Collection接口中的常用方法

Collection接口中的常用方法:
(使用ArrayList进行测试)
(以下操作都未使用泛型)
1.add(Object e);//如果用泛型是把Object改成E
将元素e添加到集合中,是往末尾添加,要和插入区别开
2.size()获取当前集合中的元素的个数
如果在一开始还没有向集合中添加任何元素,调用size方法的结果就是0
3.addAll(Collection c)把另一个集合c中的元素全部添加到当前集合中
4.isEmpty(),判断集合当中是否有元素(size是否为0),如果有元素返回false
5.clear(),清空集合当中的元素,不是把对象赋值为null,对象仍然是存在的,只是里面的数据没有了

        Collection c=new ArrayList();
		c.add("AA");
		c.add("BB");
		c.add(123);//自动装箱,add只能添加对象
		c.add(new Date());
		
		System.out.println(c.size());//4
		
		Collection c1=new ArrayList();
		c1.add(456);
		c1.add("CC");
		c.addAll(c1);
		System.out.println(c.size());//6
		System.out.println(c);//[AA, BB, 123, Sat Aug 10 14:42:58 CST 2019, 456, CC]调用ArrayList中重写的toString
		
		System.out.println(c.isEmpty());//false
		
		c.clear();
		System.out.println(c.isEmpty());//true
		

6.contains(Object obj),判断当前集合中是否包含obj
在判断时会调用obj对象所在类的equals方法

重写equals方法:如果值相同就认为是相等的
自定义的Person类重写equals方法
可以点击source进行生成,可以把得到的hashcode注释掉,只留下equals即可

注意: 向Collection接口的实现类中添加数据时,要求obj所在类要重写equals方法,自定义的类通常要进行重写equals方法,如果不重写还是调用equals方法,只是此时调用的就是父类中的equals方法了,通常不合适

7.containsAll(Collection c),判断c中的所有数据是否都在当前的集合中,也是用equals进行比较

        Collection c=new ArrayList();
		c.add(123);
		c.add(456);
		c.add(new String("Tom"));
		c.add(false);
	    //Person是我们自定义的类,属性有姓名和年龄
		
		//Person p=new Person("Jerry",20);
		//c.add(p);
		//System.out.println(c.contains(p));//true
		System.out.println(c.contains(123));//true
		System.out.println(c.contains(new String("Tom")));//true,说明调用的是equals方法进行判断是否相同,因为他们是两个对象
		
		c.add(new Person("Jerry",20));
		System.out.println(c.contains(new Person("Jerry",20));//false,因为调用的是equals,而Person并没有重写equals,所以调用的是Object中的equals,String因为已经重写过,所以比的是内容,所以上面的结果是true
		//重写了之后就是true了
		
		
		Collection c1=Arrays.asList(123,456);//asList返回的是List,又因为List是Collection的子接口,所以可以这么干
		System.out.println(c.containsAll(c1));

8.remove(Object obj);从当前集合中删除obj元素,返回值为boolean类型,表示是否移除成功
也会调用equals操作进行比较
所以在Person类重写了equals方法之后,可以移除掉Person,
这时进行输出就发现那个东西没有了
9.removeAll(Collection c1);从当前集合中移除c1中所有的元素,即移除和c1共有的元素,相当于数学中的差集
也是用集合元素的equals方法进行判断

        Collection c=new ArrayList();
		c.add(123);
		c.add(456);
		c.add(new Person("Jerry",20));
		c.add(new String("Tom"));
		c.add(false);
		
		c.remove(123);
		Collection c1=Arrays.asList(123,4567);
		c.removeAll(c1);
		System.out.println(c);

10.retainAll(Collection c);把当前集合和c集合的交集赋值给当前集合,即当前集合的元素变成了当前集合和c集合的交集,不是说返回值是一个集合,是把当前集合的元素修改了
11.equals(Object obj);比较两个对象是不是相等的,形参必须要为集合,否则一定不会返回true且元素值(会涉及到元素所在类equals方法的调用,如果传的是基本数据类型,就调用的是包装类的equals方法)要和当前集合相同,顺序也要对应(主要是因为我们现在使用的是ArrayList,如果用的是HashSet就看元素值是否相等,顺序可以不一样),则返回true

        Collection c=new ArrayList();
		c.add(123);
		c.add(456);
		c.add(new Person("Jerry",20));
		c.add(new String("Tom"));
		c.add(false);
		
		Collection c1=Arrays.asList(123,456,789);
		c.retainAll(c1);
		System.out.println(c);

12.hashCode()返回当前对象的哈希值
这个方法定义在Object类当中
13.toArray()把集合转化为数组,返回类型是Object[] (因为我们添加的时候就是添加Object类型的元素)

        Collection c=new ArrayList();
		c.add(123);
		c.add(456);
		c.add(new Person("Jerry",20));
		c.add(new String("Tom"));
		c.add(false);
		
		System.out.println(c.hashCode());
		Object[] arr=c.toArray();
		for(int i=0;i<arr.length;i++) {
			System.out.println(arr[i]);
		}
		

拓展
14调用Arrays类的静态方法asList,Arrays.asList,是可变形参,可变形参实际上就相当于是数组类型,也可以传数组类型,数组转化成集合,返回值是List,本来List就是用来对标数组的,返回List也合情合理
注意:这个方法在使用的时候小心一点

        List<String> list=Arrays.asList(new String[] {"AA","BB","CC"});
		System.out.println(list);//[AA,BB,CC]
		List<int[]> list1=Arrays.asList(new int[] {123,456});
		System.out.println(list1);//[[I@70dea4e],所以说它把new int[] {123,456}这个数组整体结构当成一个元素了
		System.out.println(list1.size());//1
		List list2=Arrays.asList(123,456);
		System.out.println(list2);//[123, 456]
		//如果写的是包装类的对象,就会识别为两个元素
		List list3=Arrays.asList(new Integer[] {123,456});
		System.out.println(list3.size());//2
		System.out.println(list3);//[123, 456]

15.iterator()
该方法与集合元素的遍历有关,返回Iterator接口的实例,用于遍历集合元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值