ArrayList容器---去除重复元素
来源:互联网 发布:windows管理器关闭 编辑:程序博客网 时间:2024/05/02 16:11
需求:1.将自定义对象作为元素存到ArrayList集合中,并去除重复元素
* 比如存人的对象,同姓名同年龄,视为同一个人,为重复元素
*
* 思路:1.对人创建一个类,将数据封装进创建的人对象里
* 2.定义容器,存入容器里
* 3.遍历,查重,取出
*
* List 集合判断元素是否相同contains,用equals
* 而默认下equals是比较地址的(String类经过复写,所以比较的是字符串的内容),
ArrayList类contains方法的源代码如下:
* 比如存人的对象,同姓名同年龄,视为同一个人,为重复元素
*
* 思路:1.对人创建一个类,将数据封装进创建的人对象里
* 2.定义容器,存入容器里
* 3.遍历,查重,取出
*
* List 集合判断元素是否相同contains,用equals
* 而默认下equals是比较地址的(String类经过复写,所以比较的是字符串的内容),
* 所以需要复写quals来实现。
Object类equals方法的源代码如下:
public boolean equals(Object obj) { return (this == obj); }
ArrayList类contains方法的源代码如下:
public boolean contains(Object o) { return indexOf(o) >= 0; } public int indexOf(Object o) { if (o == null) { for (int i = 0; i < size; i++) if (elementData[i]==null) return i; } else { for (int i = 0; i < size; i++) if (o.equals(elementData[i]))//和前面的每一个元素作对比 return i; } return -1; }
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;}//复写了object的equals方法public boolean equals(Object obj){if(!(obj instanceof Person))return false;Person p=(Person)obj;//System.out.println(this.name+"----"+p.name);//注意:这个eaquals是字符串里面经过复写过的return (this.name.equals(p.name)&&this.age==p.age);}}public class ArrayListTest2 { //去除重复元素的方法public static ArrayList singleElemnt(ArrayList arr){ArrayList newAl = new ArrayList();Iterator it=arr.iterator();while (it.hasNext()){Object obj = it.next();//每次调用contains,就调用了一次equals/* * 注意:这里不能这么写,因为每用一次next(),就会向后位移一次 if(!newAl.contains(it.next()){newAl.add(it.next());} */if(!newAl.contains(obj)){newAl.add(obj);}}return newAl;}public static void main(String[] args) {//创建容器ArrayList al=new ArrayList();//增加元素al.add(new Person("peter",30));al.add(new Person("lucy",32));//add(Object obj),相当于Object obj= new Person("lucy,32")al.add(new Person("lucy",32));al.add(new Person("zhangsan",33));al.add(new Person("lisi",34));//去除重复元素al=singleElemnt(al);//迭代器,遍历Iterator it = al.iterator();while(it.hasNext()){//it.next()返回来的是obj父类引用,需要向下转型Person p=(Person)it.next();System.out.println(p.getName()+"----"+p.getAge());}}}
0 0
- ArrayList容器---去除重复元素
- ArrayList容器练习---- 去除容器中重复的元素
- 去除ArrayList中的重复元素
- 去除ArrayList中的重复元素
- 去除容器内重复元素
- java练习2:去除容器(ArrayList)中重复的元素
- 去除ArrayList集合中的重复元素
- 定义功能,去除ArrayList中的重复元素。
- Java 去除ArrayList集合中的重复元素。
- java 去除ArrayList中重复的元素
- 去除ArrayList集合中的重复元素
- ArrayList去除重复元素(复习1)
- 去除ArrayList中重复字符串元素方式
- 去除ArrayList集合中的重复字符串元素
- ArrayList和HashSet如何去除重复元素
- 去除ArrayList容器中的相同的对象元素
- 黑马程序员——去除ArrayList中重复的元素
- 黑马程序员_去除ArrayList集合中的重复元素。
- 决策树(ID3)python
- Leetcode 43. Multiply Strings
- Easy 88题 Merge Sorted Array
- 方程求值
- Leetcode 200. Number of Islands & 305. Number of Islands II
- ArrayList容器---去除重复元素
- 搞笑
- GCC 6.2, significantly improved performance!
- Easy 219题 Contains Duplicate II
- sdmup
- 理解个KMP怎么这么难= =#
- 并查集(Union-Find)算法
- 【书评】《技术垄断:文明向技术投降》
- 20160925 - 动物园