因为Collection是接口我们不能直接实例化,所以我们下面的例子都是采用多态实例化实现类ArrayList类
1. Collection中常用方法
添加:
add() 添加一个元素到集合中
addAll() 把一个集合中的所有元素添加到指定的集合中(指定集合为调用此方法,参数为要被添加的集合)
删除:
clear() 删除集合中的所有元素
remove() 删除集合中指定元素
removeAll() 删除2个集合中的交集
retainAll() 保留2个集合中的交集,其它删除
判断:
contains() 查看集合中是否存在此元素,如果有返回true否者返回false
containsAll() 查看一个集合中是否存在指定集合的所有元素,有返回true否false(指定集合为调用此方法,参数为要被添加的集合)
isEmpty() 查看元素是否为空,是true否false
查看:
size() 查看集合中元素的长度(注意:并不是集合容器的长度)
迭代器:
toArray()
返回一个object数组,数组里面包含集合的所有元素
2.下面是一些不好理解的方法实例代码
allAll 添加一个元素到集合中
public static void main(String[] args) { //创建两个个Collection实体类的对象 Collection list1 = new ArrayList(); Collection list2 = new ArrayList(); //往集合中添加元素 list1.add("张三"); list1.add("李四"); list1.add("王五"); list2.add("张三"); list2.add("狗娃"); list2.add("狗蛋"); System.out.println(list1); System.out.println(list2); //addAll()把list2中的所有元素添加到list1中 list1.addAll(list2); System.out.println(list1); }
removeAll() 删除2个集合中的交集
public static void main(String[] args) { //创建两个个Collection实体类的对象 Collection list1 = new ArrayList(); Collection list2 = new ArrayList(); //往集合中添加元素 list1.add("张三"); list1.add("李四"); list1.add("王五"); list2.add("张三"); list2.add("狗娃"); list2.add("狗蛋"); System.out.println(list1); System.out.println(list2); //removeAll()删除2个集合中的交集 list1.removeAll(list2); System.out.println(list1); }
retainAll() 保留2个集合中的交集,其它删除
public static void main(String[] args) { //创建两个个Collection实体类的对象 Collection list1 = new ArrayList(); Collection list2 = new ArrayList(); //往集合中添加元素 list1.add("张三"); list1.add("李四"); list1.add("王五"); list2.add("张三"); list2.add("狗娃"); list2.add("狗蛋"); System.out.println(list1); System.out.println(list2); //removeAll()删除2个集合中的交集 list1.retainAll(list2); System.out.println(list1); }
containsAll() 查看一个集合中是否存在指定集合的所有元素,有返回true否false(指定集合为调用此方法,参数为要被添加的集合)
public static void main(String[] args) { //创建两个个Collection实体类的对象 Collection list1 = new ArrayList(); Collection list2 = new ArrayList(); //往集合中添加元素 list1.add("张三"); list1.add("李四"); list1.add("王五"); list2.add("张三"); list2.add("狗娃"); list2.add("狗蛋"); System.out.println(list1); System.out.println(list2); //removeAll()删除2个集合中的交集 System.out.println(list1.containsAll(list2)); }
contains() 查看集合中是否存在此元素,如果有返回true否者返回false
上面我们都是添加的是字符串,现在我们来添加一个对象
需求:身份证例子(在现实生活中,只要我们的身份证id一样,那么不管名字是否一样,那都是一个人)
class People{ int id; String name; public People(int id , String name) { this.id = id; this.name = name; } @Override public String toString() { return "{身份证:"+id+" 姓名:"+name+"}"; } } public class Demo1 { public static void main(String[] args) { //创建两个个Collection实体类的对象 Collection list1 = new ArrayList(); list1.add(new People(1001,"张三")); list1.add(new People(1002,"李四")); list1.add(new People(1003,"王五")); System.out.println(list1);//打印集合中的元素 //查询是否存在存在身份证为1001的人 System.out.println(list1.contains(new People(1001,"张三"))); } }
这时我们是不是感到很奇怪,明明存在我要查找的人啊!为什么返回false呢?
我们来看看contains方法的源代码:
这个是ArrayList类中的contains方法源代码
可以看出这个是调用了ArrayList类的indexOf方法,接受的参数是我们Object类型的数据(多态)
public boolean contains(Object o) { return indexOf(o) >= 0; }
这个是indexOf方法的源代码
我们发现这个是调用了equals方法进行比较的,而我们根本没有重写Object的equals方法,所以调用的是Object的equals方法比较的是内存地址,我们的参数相当于又重新创建了一个对象,所以返回false
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; }
解决方法:改写Object的equals方法
最终代码如下:
class People{ int id; String name; public People(int id , String name) { this.id = id; this.name = name; } @Override public String toString() { return "{身份证:"+id+" 姓名:"+name+"}"; } @Override public boolean equals(Object obj) { //因为是多态,所以这里我们要强转 People p = (People)obj; if(p.id == this.id) { return true; }else { return false; } } } public class Demo1 { public static void main(String[] args) { //创建两个个Collection实体类的对象 Collection list1 = new ArrayList(); list1.add(new People(1001,"张三")); list1.add(new People(1002,"李四")); list1.add(new People(1003,"王五")); System.out.println(list1);//打印集合中的元素 //查询是否存在存在身份证为1001的人 System.out.println(list1.contains(new People(1001,"老刘"))); } }
toArray() 返回一个object数组,数组里面包含集合的所有元素
public static void main(String[] args) { Collection list = new ArrayList(); list.add("张三"); list.add("李四"); list.add("王五"); System.out.println(list); Object[] arr = list.toArray(); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } }
原文:https://www.cnblogs.com/zjdbk/p/8974948.html