JAVA集合Collection常用方法详解

一、Collection介绍 

提到集合就不得不提一下数组,好多集合底层都是依赖于数组的实现。数组一旦初始化后,长度就确定了,存储数据对象不能达到动态扩展,其次数组存储元素不便于对数组进行添加、修改、删除操作,而且数组可以存储重复元素。这个时候集合对作用显现出来了。集合分为Collection和Map两种体系。下面先介绍Collection的集合类的继承树如下图所示:

 

 

单列集合只能一次添加一个数据

双列集合可以一次添加2个数据 

Java集合体系架构分为Collection和Map两大集合框架,其中Collection是单列集合的顶级接口,它具有单列存储的特点,即一次只能添加一个元素;而Map则是双列集合的接口。Collection作为顶级接口,它最主要的三个子接口分别是List,Set和Queue。同时,作为顶级接口它抽取了所有实现类的共有方法。

二、Collection的常用方法 

Collection作为顶级集合接口,它最常见的实现类是ArrayList,LinkedList,HashSet和TreeSet,作为顶级接口它抽取了所有实现类的共有方法,所有实现Collection接口的实现类均可使用这些方法。例如ArrayList,LinkedList,HashSet和TreeSet均可使用如下共有方法。

下面分别使用Collection集合接口的方法说明 

Collection集合常用方法

方法名说明
boolean add(E e)添加元素
boolean remove(Object o)从集合中移除指定的元素
boolean removeIf(Object o)根据条件进行移除
void clear()清空集合中的元素
boolean contains(Object o)判断集合中是否存在指定的元素
boolean isEmpty()判断集合是否为空
int size()集合的长度,也就是集合中元素的个数
接下来我们将结合代码来具体学习Collection相关知识。

2.1 调用add()方法增添数据

具体实现类为ArrayList的Collection

  Collection是一个接口,我们不能直接创建他的对象。
        所以,现在我们学习他的方法时,只能创建他实现类的对象。
        实现类:ArrayList

细节1:如果我们要往list系列集合中添加数据,那么方法永远返回true,因为list集合支持重复元素的添加
 细节2:如果我们要往Set系列集合添加数据,如果当前要添加的元素不存在,方法返回true
  如果当前要添加的元素存在,则方法返回false,因为Set系列集合不允许重复

public static void main(String[] args) {//创建一个Collection对象,并规定其数据类型为String,指明其实现类为ArrayListCollection<String> collection=new ArrayList<>();//调用add()方法增添数据collection.add("zhangsan");collection.add("lisi");collection.add("wangwu");collection.add("zhaoliu");//普通输出System.out.println(collection);}

具体实现类为LinkedList的Collection

 
public static void main(String[] args) {//创建一个Collection对象,并规定其数据类型为String,指明其实现类为LinkedListCollection<String> collection=new LinkedList<>();//调用add()方法增添数据collection.add("zhangsan");collection.add("lisi");collection.add("wangwu");collection.add("zhaoliu");//普通输出System.out.println(collection);}

具体实现类为HashSet的Collection

public static void main(String[] args) {//创建一个Collection对象,并规定其数据类型为String,指明其实现类为HashSetCollection<String> collection=new HashSet<>();//调用add()方法增添数据collection.add("zhangsan");collection.add("lisi");collection.add("wangwu");collection.add("zhaoliu");//普通输出System.out.println(collection);}

具体实现类为TreeSet的Collection

public static void main(String[] args) {//创建一个Collection对象,并规定其数据类型为String,指明其实现类为TreeSetCollection<String> collection=new TreeSet<>();//调用add()方法增添数据collection.add("zhangsan");collection.add("lisi");collection.add("wangwu");collection.add("zhaoliu");//普通输出System.out.println(collection);}

2.2 调用remove()方法删除指定数据

接下来我们以具体实现类为ArrayList的Collection来举例

  Collection是一个接口,我们不能直接创建他的对象。
        所以,现在我们学习他的方法时,只能创建他实现类的对象。
        实现类:ArrayList

         细节1:因为Collection里面定义的是共性的方法,所以此时不能通过索引进行删除。只能通过元素的对象进行删除。
        细节2:方法会有一个布尔类型的返回值,删除成功返回true,删除失败返回false
        如果要删除的元素不存在,就会删除失败。

public static void main(String[] args) {//创建一个Collection对象,并规定其数据类型为String,指明其实现类为ArrayListCollection<String> collection=new ArrayList<>();//调用add()方法增添数据collection.add("zhangsan");collection.add("lisi");collection.add("wangwu");collection.add("zhaoliu");//调用remove()方法删除指定数据collection.remove("lisi");//普通输出System.out.println(collection);}

2.3 调用clear()方法清空数据

public static void main(String[] args) {//创建一个Collection对象,并规定其数据类型为String,指明其实现类为ArrayListCollection<String> collection=new ArrayList<>();//调用add()方法增添数据collection.add("zhangsan");collection.add("lisi");collection.add("wangwu");collection.add("zhaoliu");//调用clear()方法清空数据collection.clear();//普通输出System.out.println(collection);}

2.4 调用contains()方法判断集合中是否存在指定的元素

4.判断元素是否包含
   细节:底层是依赖equals方法进行判断是否存在的。
   所以,如果集合中存储的是自定义对象,也想通过contains方法来判断是否包含,
    那么在javabean类中,一定要重写equals方法,因为object类的equals比的是地址值

public static void main(String[] args) {//创建一个Collection对象,并规定其数据类型为String,指明其实现类为ArrayListCollection<String> collection=new ArrayList<>();//调用add()方法增添数据collection.add("zhangsan");collection.add("lisi");collection.add("wangwu");collection.add("zhaoliu");//调用contains()方法判断集合中是否存在指定的元素boolean zhangsan = collection.contains("zhangsan");System.out.println("集合中存在zhangsan此元素吗?"+zhangsan);boolean aoao = collection.contains("aoao");System.out.println("集合中存在aoao此元素吗?"+aoao);}

 

2.5 调用isEmpty()方法判断集合是否为空

public static void main(String[] args) {//创建一个Collection对象,并规定其数据类型为String,指明其实现类为ArrayListCollection<String> collection=new ArrayList<>();//调用add()方法增添数据collection.add("zhangsan");collection.add("lisi");collection.add("wangwu");collection.add("zhaoliu");//调用isEmpty()方法判断集合是否为空boolean empty = collection.isEmpty();System.out.println("此集合为空吗?"+empty);//调用clear()方法清空集合元素collection.clear();//调用isEmpty()方法判断集合是否为空boolean empty1 = collection.isEmpty();System.out.println("此集合为空吗?"+empty1);}

2.6 调用size()方法获取集合的长度

public static void main(String[] args) {//创建一个Collection对象,并规定其数据类型为String,指明其实现类为ArrayListCollection<String> collection=new ArrayList<>();//调用add()方法增添数据collection.add("zhangsan");collection.add("lisi");collection.add("wangwu");collection.add("zhaoliu");//调用size()方法获取集合的长度int size = collection.size();System.out.println("集合的长度为:"+size);//调用clear()方法清空集合元素collection.clear();//调用size()方法获取集合的长度int size1 = collection.size();System.out.println("集合的长度为:"+size1);}

 

综合

package collection;import java.util.ArrayList;
import java.util.Collection;/*public boolean add(E e)             添加public void clear()                 清空public boolean remove(E e)          删除public boolean contains(Object obj) 判断是否包含public boolean isEmpty()            判断是否为空public int size()                   集合长度注意点:Collection是一个接口,我们不能直接创建他的对象。所以,现在我们学习他的方法时,只能创建他实现类的对象。实现类:ArrayList
*/
public class demo1 {public static void main(String[] args) {//目的:为了学习Collection接口里面的方法//自己在做一些练习的时候,还是按照之前的方式去创建对象。Collection<String> coll = new ArrayList<>();//1.添加元素//细节1:如果我们要往list系列集合中添加数据,那么方法永远返回true,因为list集合支持重复元素的添加//细节2:如果我们要往Set系列集合添加数据,如果当前要添加的元素不存在,方法返回true//如果当前要添加的元素存在,则方法返回false,因为Set系列集合不允许重复coll.add("aaa");coll.add("bbb");coll.add("ccc");System.out.println(coll);//[aaa, bbb, ccc]//2.清空//coll.clear();//3.删除//细节1:因为Collection里面定义的是共性的方法,所以此时不能通过索引进行删除。只能通过元素的对象进行删除。//细节2:方法会有一个布尔类型的返回值,删除成功返回true,删除失败返回false//如果要删除的元素不存在,就会删除失败。System.out.println(coll.remove("aaa"));System.out.println(coll);//[bbb, ccc]//4.判断元素是否包含//细节:底层是依赖equals方法进行判断是否存在的。//所以,如果集合中存储的是自定义对象,也想通过contains方法来判断是否包含,// 那么在javabean类中,一定要重写equals方法,因为object类的equals比的是地址值boolean result = coll.contains("bbb");System.out.println(result);//true//5.判断集合是否为空boolean result2=  coll.isEmpty();System.out.println(result2);//false//6.获取集合的长度int size= coll.size();//2System.out.println(size);}
}

三、Collection的遍历

由于共有方法中并没有带索引的方法,因此Collection无法使用普通for循环来遍历集合,只能使用普通输出方法,Iterator迭代器遍历和forEach语句遍历集合数据。

3.1 普通输出方法输出Collection集合

public static void main(String[] args) {//创建一个Collection对象,并规定其数据类型为String,指明其实现类为ArrayListCollection<String> collection=new ArrayList<>();//调用add()方法增添数据collection.add("zhangsan");collection.add("lisi");collection.add("wangwu");collection.add("zhaoliu");//普通输出方法输出Collection集合System.out.println(collection);}

 

3.2 Iterator迭代器输出Collection集合

  • 迭代器介绍

    • 迭代器,集合的专用遍历方式

    • Iterator<E> iterator(): 返回此集合中元素的迭代器,通过集合对象的iterator()方法得到

  • Iterator中的常用方法

    boolean hasNext(): 判断当前位置是否有元素可以被取出

  • E next(): 获取当前位置的元素,将迭代器对象移向下一个索引位置

 

Collection集合的遍历

package collection;/*Collection系列集合三种通用的遍历方式:1.迭代器遍历2.增强for遍历3.lambda表达式遍历迭代器遍历相关的三个方法:Iterator<E> iterator()  :获取一个迭代器对象boolean hasNext()       :判断当前指向的位置是否有元素E next()                :获取当前指向的元素并移动指针*/import java.util.ArrayList;
import java.util.Collection;
import java.util.Collection;
import java.util.Iterator;public class demo2 {public static void main(String[] args) {//1.创建集合并添加元素Collection<String> coll= new ArrayList<>();coll.add("a");coll.add("b");coll.add("c");//2.获取迭代器对象//迭代器对象好比是一个指针,默认指向集合的0索引处Iterator<String> it = coll.iterator();//3.利用循环不断的去获取集合中的每一个元素while(it.hasNext()){//4.next方法的二件事情:获取指针指向的元素并且移动指针String str = it.next();System.out.print(str);}}
}

迭代器中删除的方法

void remove(): 删除迭代器对象当前指向的元素

迭代器的细节注意点:
           1.报错NoSuchElementException
           2.迭代器遍历完毕,指针不会复位
           3.循环中只能用一次next方法
           4.迭代器遍历时,不能用集合的方法进行增加或者删除
        如果我实在要删除:那么可以用迭代器提供的remove方法进行删除。
        如果我要添加,暂时没有办法。

package collection;import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;/*迭代器的细节注意点:1.报错NoSuchElementException2.迭代器遍历完毕,指针不会复位3.循环中只能用一次next方法4.迭代器遍历时,不能用集合的方法进行增加或者删除暂时当做一个结论先行记忆,在今天我们会讲解源码详细的再来分析。如果我实在要删除:那么可以用迭代器提供的remove方法进行删除。如果我要添加,暂时没有办法。*/
public class demo3 {public static void main(String[] args) {//1.创建集合并且添加元素Collection<String> coll = new ArrayList<>();coll.add("aaa");coll.add("bbb");coll.add("ccc");//2.获取迭代器对象//迭代器对象好比是一个指针,默认指向集合的0索引处Iterator<String> it = coll.iterator();//3.利用循环不断的去获取集合中的每一个元素while (it.hasNext()) {//4.next方法的二件事情:获取指针指向的元素并且移动指针String str = it.next();System.out.print(str);}System.out.println();//当上面循环结束之后,//迭代器的指针已经指向了最后没有元素的位置// System.out.println(it.next());//报错NoSuchElementException//迭代器遍历完毕,指针不会复位System.out.println(it.hasNext());//false//如果我们要继续第二次遍历集合,只能再次获取一个新的迭代器对象Iterator<String> it2 = coll.iterator();while (it2.hasNext()) {String str = it2.next();System.out.print(str);//4.迭代器遍历时,不能用集合的方法进行增加或者删除if ("aaa".equals(str)) {//指向谁,那么此时就删除谁.// coll.remove("aaa");//报错it2.remove();}}System.out.println();System.out.println(coll);//[bbb, ccc]}
}

3.3增强for

package collection;import java.util.ArrayList;
import java.util.Collection;/* Collection系列集合三种通用的遍历方式:1.迭代器遍历2.增强for遍历3.lambda表达式遍历增强for格式:for(数据类型 变量名: 集合/数组){}快速生成方式:集合的名字 + for 回车*/
public class demo4 {public static void main(String[] args) {//1.创建集合并添加元素Collection<String>coll=new ArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//2.利用增强for进行遍历//注意点://s其实就是一个第三方变量,//本质是暂时存储集合里面的内容的第三方变量//在循环的过程中依次表示集合中的每一个数据for (String s : coll) {s="qqq";}System.out.println(coll);//zhangsan lisi wangwu}
}

3.4lambda表达式

利用forEach方法,再结合lambda表达式的方式进行遍历

package collection;
/* Collection系列集合三种通用的遍历方式:1.迭代器遍历2.增强for遍历3.lambda表达式遍历lambda表达式遍历:default void forEach(Consumer<? super T> action):*/import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;public class demo6 {public static void main(String[] args) {//1.创建集合并添加元素Collection <String> coll=new ArrayList<>();coll.add("zhangsan");coll.add("lisi");coll.add("wangwu");//2.利用匿名内部类的形式//底层原理//其实也会有自己遍历集合,依次得到每一个元素//把得到的每一个元素,传递给下面的accept方法//s依次表示集合中的每一个数据/*coll.forEach(new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);//zhangsan  lisi   wangwu}});*///lambda表达式coll.forEach((String s) ->System.out.println(s));}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/372662.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu关于docker部署 项目一站式教程

**假设已有ubuntu服务器并且登录root账号 ** **FinalShell中复制快捷键是 ****Ctrl+Shift+V** 卸载老版本docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker步骤 更新软件包sudo apt update sudo apt upgrade安装docker依赖sudo apt-get …

Ubuntu配置GitHub(第一次clone/push)

文章目录 1. 安装Git&检查连接2. 注册GitHub3. 生成&GitHub添加SSH3.1. 检查&删除已有id_rsa3.2. 生成SSH3.3. GitHub添加id_rsa.pub SSH3.4. 检查SSH 4. 继续开发可以参考参考 1. 安装Git&检查连接 安装 sudo apt-get install git检查SSH连接 ssh -T gitgi…

交通气象站:保障道路安全的智慧之眼

随着社会的快速发展&#xff0c;交通运输日益繁忙&#xff0c;道路安全成为公众关注的焦点。在这个背景下&#xff0c;交通气象站作为保障道路安全的重要设施&#xff0c;正发挥着越来越重要的作用。它们不仅为交通管理部门提供及时、准确的气象信息&#xff0c;也为广大驾驶员…

Mysql-01-主从搭建

一、安装Mysql 下载 https://downloads.mysql.com/archives/community/ 安装 注意顺序 tar -xvf mysql-8.0.38-1.el9.x86_64.rpm-bundle.tar rpm -ivh mysql-community-common-8.0.38-1.el9.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.38-1.el9.x86_64.r…

【Proteus】按键的实现『⒉种』

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

windows系统无法使用网络共享服务,设置防火墙入站规则解决

我们使用虚拟机的时候&#xff0c;已经配置好了网络&#xff0c;但是虚拟机和物理机就是无法通讯。可以使用关闭防火墙的方式解决这个问题&#xff0c;但是这个方法不是长久之计&#xff0c;非常不安全。那么&#xff0c;有什么其他的解决办法吗&#xff1f; 其中&#xff0c;p…

Redis基础教程(十八):Redis管道技术

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

Java基础-组件及事件处理(上)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 Swing 概述 MVC 架构 Swing 特点 控件 SWING UI 元素 JFrame SWING 容器 说明 常用方法 示例&a…

AE常用工具

目录 图形工具&#xff08;快捷键Q&#xff09; 选取工具&#xff08;快捷键V&#xff09; 抓手工具&#xff08;快捷键H或空格&#xff09; 放缩工具&#xff08;快捷键Z或滚动滑轮&#xff09; 图形工具&#xff08;快捷键Q&#xff09; 按住alt并点击&#xff0c;可切换…

Kafka系列之Kafka知识超强总结

一、Kafka简介 Kafka是什么 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff08;消息引擎系统&#xff09;&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c; 搜索和其他用户的行动&#xff09;是在现代网络上的许多社…

设计模式之职责链模式(Chain of Responsibility Pattern)

1.概念 职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;&#xff1a;避免将请求发送者与接收者耦合在一起&#xff0c;让多个对象都有机会接收请求&#xff0c;将这些对象连接成一条链&#xff0c;并且沿着这条链传递请求&#xff0c;直到有对象处理它为止…

「Pytorch」CopyPaste 数据增强

数据增广是提升模型泛化能力重要的手段之一&#xff0c;CopyPaste 是一种新颖的数据增强技巧&#xff0c;已经在目标检测和实例分割任务中验证了有效性。利用 CopyPaste&#xff0c;可以合成文本实例来平衡训练图像中的正负样本之间的比例。相比而言&#xff0c;传统图像旋转、…

HTML5文本标签、图像标签、超链接

一、文本样式标签 字体样式标签&#xff1a; 加粗&#xff1a;<strong>…</strong> 斜体&#xff1a; < em >…</ em> eg&#xff1a; <h3>徐志摩人物简介</h3> <p> <strong>1910</strong>年入杭州学堂<br/> &l…

java之循环练习题

思路分析&#xff1a; 代码&#xff1a; public static void main(String[] args) {int sum0;for (int i1;i<100;i){for (int j1;j<i;j) {sum j;}}System.out.println(sum);} 结果为&#xff1a;

uniapp上架到appstore遇到的问题

1、appstore在美国审核&#xff0c;需要把服务器接口的国外访问权限放开 2、登陆部分 a、审核时只能有密码登陆&#xff0c;可以通过接口响应参数将其他登陆方式暂时隐藏&#xff0c;审核成功后放开即可 b、需要有账号注销功能 3、使用照相机和相册功能时需要写清楚描述文案

制作问卷表单二维码的方法,扫码登记信息更快捷

为了更好地收集用户信息&#xff0c;现在很多场景下会使用生成二维码的方式&#xff0c;让用户可以扫码自行填写相关信息&#xff0c;从而提高获取信息的效率以及填写数据的便捷性。那么用于收集用户数据的表单二维码是如何生成的呢&#xff1f;其实方法很简单&#xff0c;现在…

leetcode 283.移动零

leetcode 283.移动零 自己刷题并且进行记录一下 题解 c class Solution { public:void moveZeroes(vector<int>& nums) {int count 0;for (int i 0; i < nums.size(); i) {if(nums[i] ! 0) {nums[count] nums[i];if (count !i) {nums[i] 0;}count;}}} };

使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-飞船动画(三)

文章目录 开发思路飞船尾焰左右移动动画唯一名称的添加 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击&#xff08;一&#xff09; 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件&#xff08;二&#xff09; 开发思路 整体开发还是基于组件的思维。相比…

录音的内容怎么做二维码?支持多种音频格式使用的制作技巧

怎么把录制的音频文件做成二维码呢&#xff1f;现在用二维码来存储内容是一种很常用的方式&#xff0c;让其他人扫描二维码来查看内容&#xff0c;从而提升内容传输的速度。比如现在很多人会将音频生成二维码&#xff0c;其他人可以通过扫码在手机上播放音频内容&#xff0c;那…

rfid资产管理系统解决方案 rfid固定资产管理系统建设方案

在现代化的仓库储备中&#xff0c;仅仅完成对货物进出的简单批次处理已经不再足够&#xff0c;对库内货品的种类、数量、生产属性、垛位等信息的清晰记录变得至关重要。然而&#xff0c;传统的资产管理方式如条形码在长期使用中逐渐暴露出不耐脏、数据存储量小、读取间隔短、不…