ArrayList练习2一去除重复自定义对象

    xiaoxiao2021-04-19  72

    将自定义元素存到ArrayList集合,去除重复元素。 比如: 存入对象,同姓名,同年龄,同一人为重复元素。 思路: 1.对人描述将数据封入对象。 2.定义容器,将人存入。

    3.取出。

    import java.util.*; class ArrayListText { public static void main(String []args) { ArrayList al=new ArrayList(); al.add(new person("lishi",5)); al.add(new person("lishi01",6)); al.add(new person("lishi02",7)); al=singleElements(al); /*不能去除相同元素*/ Iterator it=al.iterator(); while(it.hasNext()) { // sop(it.next().getName) /*这样编译失败,因为it.next返回值是Object,而且add(Object obj),需要进行强制类型转换。*/ person p=(person)it.next(); sop(p.getName()+"......"+p.getAge()); } } public static ArrayList singleElements(ArrayList al) { ArrayList newAl=new ArrayList(); Iterator it=al.iterator(); while(it.hasNext()) { Object obj=it.next(); if(!newAl.contains(obj)) { newAl.add(obj); } } return newAl; } } class person { private String name; private int age; person(String name,int age) { this.name=name; this.age=age; } public String getName() { return name; } public int getAge() { return age; } } 不能去除相同元素,因为contains底层调用了indexOf(object obj)方法,返回指定对象的索引。

    而此方法底层调用了指定对象(obj)的 equals方法。 比较数组中的元素  (ArrayList底层数据结构是数组)  是否与此对象地址相同,相同为同一元素,返回元素索引。没有相同元素返回-1。

    然后contains用index返回的数值比较,大于等于0,是true,说明包含指定元素。小于0,是false,说明不包含指定元素。 而现在比较的是年龄和姓名,所以需要复写指定对象也就是person的equals方法。

    public boolean equals(Object obj) { person p=(person)obj; return this.name.equals(p.getName()) && this.age==p.getAge(); } list集合中判断元素是否相同,用的是元素的equals方法,如 :remove contains方法

    转载请注明原文地址: https://ju.6miu.com/read-675707.html

    最新回复(0)