2014-01-22 219 views
0

在ArrayList中,我拥有相同类型的对象。每个对象都有一个ID,名称和编号作为其字段。有可能多个对象具有相同的电话号码。我怎样才能使ArrayList的所有ArrayList对象具有不同的电话号码?从数组列表中删除项目

+0

比方说,你有'objA'和'objB'具有相同的电话号码。 'objA'被添加到'ArrayList'中,然后'objB'''想要'被添加到'ArrayList'中。 'objB'会发生什么?它不会被“接受”*(添加)*?好奇而已。 – Christian

+0

将被添加 – irfan

+0

但是,在ArrayList中将会有两个具有相同'phone-number'的对象。我认为这不符合你的预期。 – Christian

回答

0

尝试Set.

不包含重复元素的集合。

+3

单独解决不了问题.. – sanbhat

+0

使用arraylistist.contain(“数字”)不同的对象 – Vijju

+0

@jay这不起作用,因为'ArrayList'中的对象是对象,而不是单独的数字。 – Christian

1

覆盖您的班级方法equals()hashCode()。在平等你会比较电话号码。也从您的电话号码生成哈希码。

现在您已准备好使用Set界面,该界面将自动通过电话号码比较您的对象并排除重复项。下面

例如:

public class Test { 
    private int id; 
    private String name; 
    private String phoneNumber; 

    public Test(int id, String name, String phoneNumber) { 
     this.id = id; 
     this.name = name; 
     this.phoneNumber = phoneNumber; 
    } 


    @Override 
    public boolean equals(Object o) { 
     if (this == o) return true; 
     if (o == null || getClass() != o.getClass()) return false; 
     Test test = (Test) o; 
     return phoneNumber.equals(test.phoneNumber); 

    } 

    @Override 
    public int hashCode() { 
     return phoneNumber.hashCode(); 
    } 
} 

现在代替使用List<Test> arr = ArrayList<Test>(),使用Set<Test> mySet = new HashSet<Test>()

+0

'hashCode()'只在'HashSet'情况下才方便,否则我觉得'equals()'应该足够了 – sanbhat

0

我想到的第一个解决方案是使用HashMap

只需创建一个HashMap,其中'phonenumber'作为键和对象作为值。添加完所有元素后,您将获得具有唯一电话号码的对象列表。只需遍历这个来创建你需要的List。