JAVA集合--Collection接口
本文首发于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接口的更多相关文章
- java集合——Collection接口
Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...
- Java 集合-Collection接口和迭代器的实现
2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...
- java集合Collection接口
collection集合 Map集合 Hashtable和HashMap的区别: Hashtable的方法是同步的,而HashMap的方法不是.HashMap可以将空值作为一个表的条目的key或val ...
- Java集合Map接口与Map.Entry学习
Java集合Map接口与Map.Entry学习 Map接口不是Collection接口的继承.Map接口用于维护键/值对(key/value pairs).该接口描述了从不重复的键到值的映射. (1) ...
- Java之Collection接口(单列集合根接口)
集合概述 集合到底是什么呢?集合:集合是java中提供的一种容器,可以用来存储多个数据 集合和数组既然都是容器,它们有啥区别呢? 区别1: 数组的长度是固定的. 集合的长度是可变的. 区别2: 数组 ...
- Java中的集合Collection接口
/* 集合:集合是存储对象数据的集合容器.集合比数组的优势: 1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据. 2. 集合的长度是会发生变化的,数组的长度是固定的.----- ...
- Java集合——Map接口
1.定义 Map用于保存存在映射关系<key,value>的数据.其中,key值不能重复(使用equals()方法比较),value值可以重复 2.方法 V put(key,value) ...
- Java集合——List接口
1.定义 List是Collection的子接口,元素有序并且可以重复,表示线性表. 2.方法 add(int index,Object e):在指定索引(和数组下标类似,为0,1,2....)放入元 ...
- Thinking in Java——集合(Collection)
一.ArrayList的使用(略) 二.容器的基本概念 (一).Collection是集合类的基本接口 主要方法: public interface Collection<E>{ bool ...
随机推荐
- 【lua学习笔记】——在sublime中配置Lua运行环境
一.让Sublime可以运行lua脚本 打开sublime 选择tools-->Build System-->New Build System 在新出现的文件中输入如下内容: { &q ...
- Java数据类型简介
Java数据类型 以下两行Java代码定义了两个整数:num1和num2: num1和num2是两个int类型的变量. int关键字指定它的后面是变量的名称,并表示数据类型整数,例如:10,15,70 ...
- Spingboot整合Redis,用注解(@Cacheable、@CacheEvict、@CachePut、@Caching)管理缓存
背景:项目从头开始,需结合Springboot和Redis 需求:用注解管理缓存 方法: 一.用Redis取代Springboot原有缓存 1.pom引入依赖 2.applicatio ...
- sass揭秘之@mixin,%,@function scss基本使用及操作函数
sass揭秘之@mixin,%,@function: 地址:https://www.w3cplus.com/preprocessor/sass-mixins-function-placeholder. ...
- js node.children与node.childNodes与node.firstChild,node,lastChild之间的关系
博客搬迁,给你带来的不便,敬请谅解! http://www.suanliutudousi.com/2017/11/06/js-node-children%e4%b8%8enode-childnodes ...
- csdn加入暂时会话功能
版权声明:本文为博主原创文章.若要转载请注明出处! ^_^ https://blog.csdn.net/u010892841/article/details/25334153 ...
- JSON.parse 解析json字符串时,遇字符串换行符,解析失败
今天遇到json字符串转对象时报错了,发现有个字符串有换行符,仔细找了原因. 结果是因为JSON.parse转json字符串时遇到一些特殊字符需要先转义,如图所示 然后尝试了各路大神介绍的办法,均不适 ...
- qfile读取txt文件
QFile f("D:\\测试数据\\单波束数据\\灯浮.TGT"); if (!f.open(QIODevice::ReadOnly|QIODevice::Text))//打开指 ...
- 笔记62 Spring Boot快速入门(二)
SpringBoot部署 一.jar方式 1.首先安装maven. <1>下载最新的maven版本:https://maven.apache.org/download.cgi <2& ...
- kubeadm部署多master节点高可用k8s1.16.2
一.架构信息 系统版本:CentOS 7.6 内核:3.10.0‐1062.4.1.el7.x86_64 Kubernetes: v1.16.2 Dockerce: 19.03 推荐硬件配置:2核4 ...