资讯专栏INFORMATION COLUMN

java集合--Collection接口

k00baa / 3069人阅读

摘要:集合的元素个数为输出集合的元素个数为在本代码中,新建一个局部变量保存的成员方法返回的值,输出得到因为只有一个元素。注若遍历集合的同时改变集合,将引发异常。

    在概述里面也说过: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://segmentfault.com/a/11...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74419.html

相关文章

  • java集合

    摘要:主要用于遍历集合中的元素,对象也被称为迭代器。使用迭代过程中,不可修改集合元素迭代器采用快速失败机制。一旦迭代过程中检测到该集合已经被修改,程序立即出发异常,而不是显示修改后的结果,避免了共享资源而引发的潜在问题。 集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量);而集合里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为集...

    JinB 评论0 收藏0
  • Java 集合 Collection、Iterator

    摘要:如果需要创建对象,则必须与一个被迭代的集合。这是一个有状态的方法该方法用于保证对该流的后续访问中最大允许访问的元素个数。可以对集合元素进行整体的聚集操作。 Java集合分为Set(无序、不可重复)、List(有序、重复)、Queue(队列)和Map(映射关系) Java集合概述 数组元素既可以是基本类型的值,也可以是对象(实际保存对象的引用变量)集合只能保存对象(实际保存对象的引用变量...

    harryhappy 评论0 收藏0
  • Java™ 教程(集合接口

    集合接口 核心集合接口封装了不同类型的集合,如下图所示,这些接口允许独立于其表示的细节来操纵集合,核心集合接口是Java集合框架的基础,如下图所示,核心集合接口形成层次结构。 showImg(https://segmentfault.com/img/bVbntJW?w=402&h=146); Set是一种特殊的Collection,SortedSet是一种特殊的Set,依此类推,另请注意,层次结构...

    elisa.yang 评论0 收藏0
  • java学习(七) —— API集合

    摘要:集合类主要负责保存盛装其他数据,因此集合类也被称为容器类。所有的集合类都位于包下。表示一组对象,这些对象也称为的元素。成员方法把集合转成数组迭代器,集合的专用遍历方式之接口概述有序的,也称为序列。 前言 在编程中,常常需要集中存放多个数据。从传统意义上讲,数组是我们的一个很好的选择,前提是我们实现已经明确知道我们将要保存的对象的数量。 一旦在数组初始化时指定了数组长度,这个数组长度就...

    senntyou 评论0 收藏0
  • 集合概要学习---粗略

    摘要:集合框架的基本接口类层次结构其中表示接口,表示实现类和在实际开发中,需要将使用的对象存储于特定数据结构的容器中。实例是迭代器,拥有两个方法方法迭代器用于遍历集合元素。返回值则是转换后的数组,该数组会保存集合中的所有元素。 Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构。 Java集合框架的基本接口/类层次结构...

    DesGemini 评论0 收藏0
  • java集合和泛型的知识点归纳1

    摘要:接口也是集合中的一员,但它与接口有所不同,接口与接口主要用于存储元素,而主要用于迭代访问即遍历中的元素,因此对象也被称为迭代器。迭代器的实现原理我们在之前案例已经完成了遍历集合的整个过程。 【Collection、泛型】 主要内容 Collection集合 迭代器 增强for 泛型 教学目标 [ ] 能够说出集合与数组的区别 [ ] 说出Collection集合的常用功能 [ ]...

    daryl 评论0 收藏0

发表评论

0条评论

k00baa

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<