博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java集合--Collection接口
阅读量:7243 次
发布时间:2019-06-29

本文共 4173 字,大约阅读时间需要 13 分钟。

    在概述里面也说过:Collection是java集合两大接口之一,旗下有三大子接口:Set(元素不能重复,且无序)、Queue、List(元素可重复,且有序)。     Collection来源于java.util包,主要方法包括:

|--|-- 主要方法|作用| boolean add(Object o) |将传入的Object对象添加到容器中,添加后方法返回true boolean addAll(Collection c) |将传入的集合c中的所有对象添加到容器中,添加后方法返回true void clear()| 清空集合,集合长度变为0 boolean contains(Object o)| 检查集合是否存在对象o,若存在返回true boolean containsAll(Collection c)| 检查集合是否存在集合c的所有对象,若存在返回true boolean isEmpty() |返回集合的size是否为0 Iterator iterator() |返回Iterator对象 boolean remove(Object o) |删除集合中第一个符合条件的元素,若集合存在对象o,删除并返回true boolean removeAll(Collection c) |删除集合中所有与集合c重合的元素,若删除后对象进行了改变返回true boolean retainAll(Collection c) |删除集合中所有与集合c不重合的元素,若删除后对象进行了改变返回true int size() |返回集合元素的个数 Object[] toArray()| 把集合转变成数组,集合的元素变成对应的数组元素

    下面是Collection的实例化以及各成员方法的使用方法

  • 实例化
Collection c1=new TreeSet();   Collection c2=new HashSet();    Collection c3=new LinkedHashSet();  Collection c4=new ArrayDeque();    Collection c5=new ArrayList();     Collection c6=new LinkedList();   复制代码
  • boolean isEmpty();
boolean isEmpty=c5.isEmpty();System.out.print(isEmpty?"c5为空":"c5不为空");复制代码
输出: c5为空复制代码

    因为c5在此之前并没有添加任何元素,所以为空。

  • Iterator iterator();
Iterator it5=c5.iterator();while(it5.hasNext()) {	System.out.println("集合5元素:"+it5.next());}复制代码
输出:集合5元素:5复制代码

    注:每个Iterator对象只能使用一次, 复用会导致java.util.ConcurrentModificationException。     在本代码中,新建了一个局部变量it5保存c5的迭代器,再通过迭代器的成员方法hasNext判断是否存在下一元素,若true,输出此元素。     java8为Collection的遍历新增了一个来源于Collection的父接口iterable的方法:forEach(Consumer action)。

c5.forEach(obj->System.out.println("集合元素为"+obj));复制代码
输出:集合元素为5复制代码
  • boolean add(Object o);
c5.add(5);Iterator it=c5.iterator();while(it.hasNext()) {	System.out.println("集合元素:"+it.next());}复制代码
输出:集合元素:5复制代码

    在本代码中,c5被添加了一个元素5,所以经过迭代器输出只能得到5。

  • boolean addAll(Collection c);
c6.addAll(c5);Iterator it6=c6.iterator();while(it6.hasNext()) {	System.out.println("集合6元素:"+it6.next());}复制代码
输出:集合6元素:5复制代码

    在本代码中,c5中的所有元素(5)被整体添加到c6中,所以c6迭代输出5。

  • void clear();
c6.clear();Iterator it6=c6.iterator();while(it6.hasNext()) {	System.out.println("集合6元素:"+it6.next());}复制代码
无输出复制代码

    在本代码中,c6被清空,所以迭代输出并没有结果。

  • boolean contains(Object o);
boolean isContainsFive=c5.contains(5);boolean isContainsSix=c5.contains(6);System.out.println("c5是否存在元素5:"+isContainsFive);System.out.println("c5是否存在元素6:"+isContainsSix);复制代码
输出:c5是否存在元素5:true      c5是否存在元素6:false复制代码

    在本代码中,isContainsFive的值取决于c5是否含有元素5(isContainsSix亦是如此)。而c5只有一个元素5,所以isContainsFive的值为true,isContainsSix的值为false。

  • boolean containsAll(Collection c);
c4.addAll(c5);System.out.println("c5是否包括c6的全部元素:"+c5.containsAll(c4));c4.add(3);System.out.println("c5是否包括c6的全部元素:"+c5.containsAll(c4));复制代码
输出:c5是否包括c6的全部元素:true      c5是否包括c6的全部元素:false复制代码

    在本代码中,首先将c5的所有元素(5)添加到c4中,所以第一个输出语句必定为true。但是在第一个语句后c4添加了一个新的元素3,所以第二个输出语句为false。

  • boolean remove(Object o);
c5.add(6);Iterator it5=c5.iterator();while(it5.hasNext()) {	System.out.println("集合元素:"+it5.next());}c5.remove(6);Iterator aIt5=c5.iterator();while(aIt5.hasNext()) {	System.out.println("集合5元素:"+aIt5.next());}复制代码
输出:集合5元素:5      集合5元素:6      集合5元素:5复制代码

    在本代码中,c5首先添加了一个新元素6,迭代输出得到5、6。然后调用c5的成员方法remove,迭代输出得到5。

  • boolean removeAll(Collection c);
c5.removeAll(c4);Iterator aIt5=c5.iterator();while(aIt5.hasNext()) {	System.out.println("集合5元素:"+aIt5.next());}复制代码
无输出复制代码

    在本代码中,c5移除掉c4中的所有元素(3、5),可以理解为移除掉两个集合的交集,所以迭代输出没有结果。

  • boolean retainAll(Collection c);
c5.add(5);c4.retainAll(c5);Iterator it4=c4.iterator();while(it4.hasNext()) {	System.out.println("集合4元素:"+it4.next());}复制代码
输出:集合4元素:5复制代码

    注:因为在方法9中集合5已经变成空集合,所以在此方法中将5添加到集合5中以做演示。     在本方法中,c5添加了一个元素5,然后调用c4的成员方法retainAll删除掉不属于c5的所有元素,迭代输出5。

  • int size();
int size=c4.size();System.out.println("集合4的元素个数为:"+size);复制代码
输出:集合4的元素个数为:1复制代码

    在本代码中,新建一个局部变量size保存c4的成员方法size返回的值,输出得到1(因为c4只有一个元素5)。

  • Object[] toArray();
System.out.println(c4.toArray());复制代码
输出:[Ljava.lang.Object;@71e7a66b复制代码

    作为对比,我尝试调用父类Object的String toString()方法,结果得到了[5],与直接输出对象的结果是一致的。

    注:若遍历集合的同时改变集合,将引发ConcurrentModificationException异常。

    Collection接口就写到这里了,看起来简单,但是某些成员方法需要查看源码才知道如何去用,基本上写完这篇博文,我对Collection已经有了比较深入的了解,忽然觉得写作跟编程是相辅相成的。

    一点题外话:这是我第一次系统地写博文,懂得了一个道理:世界上没有简单的事。写的不好请多多见谅。之后要狠狠提高一下我的写作水平,之前写公众号的文笔都不知道丢在哪里了。     如果你还想了解关于java集合的内容,欢迎点击https://juejin.im/post/5cce5fbcf265da034c703a75

转载于:https://juejin.im/post/5cce70036fb9a031e9752f75

你可能感兴趣的文章
《Office 365开发入门指南》上市说明和读者服务
查看>>
Docker生态会重蹈Hadoop的覆辙吗?
查看>>
WPF换肤之八:创建3D浏览效果
查看>>
JEECG环境搭建(Maven版本)-总结Eclipse
查看>>
HTTP第一篇【简单了解HTTP、与HTTP相关的协议】
查看>>
Python生成随机验证码
查看>>
Python学习笔记(3)——数据类型和变量
查看>>
03、微信小程序之 永不过时的HelloWorld
查看>>
NFS配置不当那些事
查看>>
[译] 如何写出更好的 React 代码?
查看>>
一起撸个朋友圈吧(step3) - ListAdapter篇
查看>>
LeetCode 642 号问题:设计搜索自动补全系统
查看>>
探究Android View 绘制流程,Canvas 的由来
查看>>
JS原生交互
查看>>
[译] JavaScript 工作原理:Web Worker 的内部构造以及 5 种你应当使用它的场景
查看>>
Android使用Path仿支付宝支付成功失败动画
查看>>
聊聊rocketmq的DailyRollingFileAppender
查看>>
HTTP/2
查看>>
[单刷APUE系列]第十七章——高级进程间通信
查看>>
分布式之消息队列的特点、选型、及应用场景详解
查看>>