JAVA集合--Collection接口

时间:2022-05-09 01:55:46

    本文首发于cartoon的博客

    转载请注明出处:https://cartoonyu.github.io/cartoon-blog

    在概述里面也说过:Collection是java集合两大接口之一,旗下有三大子接口:Set(元素不能重复,且无序)、Queue、List(元素可重复,且有序)。

    Collection来源于java.util包,主要方法包括:

Iterator的方法包括:

成员方法 作用
boolean hasNext(); 将传入的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集合的内容,欢迎点击JAVA集合概述

JAVA集合--Collection接口的更多相关文章

  1. java集合——Collection接口

    Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...

  2. Java 集合-Collection接口和迭代器的实现

    2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...

  3. java集合Collection接口

    collection集合 Map集合 Hashtable和HashMap的区别: Hashtable的方法是同步的,而HashMap的方法不是.HashMap可以将空值作为一个表的条目的key或val ...

  4. Java集合Map接口与Map.Entry学习

    Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) ...

  5. Java之Collection接口(单列集合根接口)

    集合概述 集合到底是什么呢?集合:集合是java中提供的一种容器,可以用来存储多个数据 集合和数组既然都是容器,它们有啥区别呢? 区别1: 数组的长度是固定的. 集合的长度是可变的. 区别2:  数组 ...

  6. Java中的集合Collection接口

    /* 集合:集合是存储对象数据的集合容器.集合比数组的优势: 1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据. 2. 集合的长度是会发生变化的,数组的长度是固定的.----- ...

  7. Java集合——Map接口

    1.定义 Map用于保存存在映射关系<key,value>的数据.其中,key值不能重复(使用equals()方法比较),value值可以重复 2.方法 V  put(key,value) ...

  8. Java集合——List接口

    1.定义 List是Collection的子接口,元素有序并且可以重复,表示线性表. 2.方法 add(int index,Object e):在指定索引(和数组下标类似,为0,1,2....)放入元 ...

  9. Thinking in Java——集合&lpar;Collection&rpar;

    一.ArrayList的使用(略) 二.容器的基本概念 (一).Collection是集合类的基本接口 主要方法: public interface Collection<E>{ bool ...

随机推荐

  1. OC NSDictionary

    OC NSDictionary NSDictionary初始化 NSDictionary * dict = [[NSDictionary alloc] initWithObjectsAndKeys:@ ...

  2. QInputDialog 使用方法

    在Qt中,如果想快速生成一个对话框,可以和用户进行简单的交互,而不需要写一个新的类的时候,就要用到QInputDialog类,这个类就是专门用来建立简单对话框的,其主要能建下列几种对话框:

  3. Kail安装Parallels tools

    今天在安装虚拟机里面安装kail,在安装虚拟机提供的tools时候提示没有权限,如图: 后面经过自己证实首先tools是挂载的cdrom,在这样挂载下是没有写权限的(类似于windows下面读取光盘光 ...

  4. 分布式架构真正适用于大型互联网项目的架构! dubbo&plus;zookeeper&plus;springmvc&plus;mybatis&plus;shiro&plus;redis

     分类: 分布式技术(3)    目录(?)[+]   平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成D ...

  5. &lbrack;转&rsqb;SSH反向连接及Autossh

    http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html SSH反向连接及Autossh 0.接触Linux恐怕对SSH再熟悉不过 ...

  6. iOS开发学习-nonatomic和atomic的区别

    nonatomic是非原子性的,也就是给线程不加原子锁,这样的代码运行效率会更高一点,例如: @property (nonatomic,copy)NSString *userName; @proper ...

  7. Hibernate Validation,Spring mvc 数据验证框架注解

    1.@NotNull:不能为 Null,但是可以为Empty:用在基本数据类型上. @NotNull(message="{state.notnull.valid}", groups ...

  8. Java编程基础知识总结大全(Ⅱ)

    7.类型转换 精度从高到低 double float long int short(char) byte (1)自动类型转换 将一个低精度---高精度 (2)强制类型转换 将一个高精度---低精度 ...

  9. maven如何引入servlet-api和jsp-api

    废话不多说,直接上代码 <dependency> <groupId>javax.servlet</groupId> <artifactId>javax. ...

  10. 北京Uber优步司机奖励政策(12月13日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...