【Java基础】集合(1) —— Collection

news2024/9/22 11:32:14
  • 存储不同类型的对象:
    • Object[] arr=new object[5];
    • 数组的长度是固定的, 添加或删除数据比较耗时
  • 集合:
    • Object[] toArray
    • 可以存储不同类型的对象
    • 随着存储的对象的增加,会自动的扩容
    • 集合提供了非常丰富的方法,便于操纵
    • 集合相当于容器,可以存储多个对象
    • 集合存的是对象的引用

在这里插入图片描述在这里插入图片描述

每种集合存储数据的方式不同,使用的数据结构不同,有各自的优缺点

在项目中根据底层的数据结构选择适合的集合使用。

共性方法

Collection中定义的是最共性的方法:

  1. 添加

    • boolean add(Object o)
      多态集合中存储的都是对象集合中存储的是对象的地址
    • boolean addAll(Collection<? extends E> c)
      把另一个集合中的数据加入到当前集合
    Collection col=new ArrayList();
    col.add("java");
    col.add("html");
    col.add("mysql");
    col.add(66);
    Collection col2=new ArrayList();
    col2.add("bigdata");
    col2.add("python");
    col.addAll(col2);
    sop(col);//[java, html, mysql, 66, bigdata, python]
    
  2. 删除

    • boolean remove(Object o)
      从集合中删除某个对象
    • boolean removeAll(Collection<?> c)
      从当前集合中删除和另一个集合相同的数据
    • boolean retainAll(Collection c)
      从当前集合中保留和另一个集合相同的数据
    • void clear()
      清空集合
    • boolean removelf(Predicate predicate) boolean test(T t)
      依次遍历集合中的每个对象,如果test方法返回true,则删除这个对象
    //使用匿名内部类实现test方法:
    col.removeIf(new Predicate(){
    	public boolean test(Object t){//参数用来依次接收集合中每个对象
    		 if(t instanceof String){
    			  String ss=(String)t;
    			  if(ss.startsWith("java"))
    				  return true;
    		 }
    		 return false;
    	}
    });
    
    //使用lambda表达式实现test方法:
    col.removeIf(t->{
    		if(t instanceof String){
    			  String ss=(String)t;
    			  if(ss.startsWith("java"))
    				  return true;
    		 }
    		 return false;
    }); 
    //简化书写:
    col.removeIf(t->((String)t).startsWith("java"));
    
  3. 判断

    • boolean contains(Object o)
      判断是否包含某个对象
      依据equals方法判断是否包含某个元素
    import java.util.*;
    class Demo2{
    	public static void main(String[] args){
    		ArrayList list=new ArrayList();
    		list.add(new Student("zhangsan",20));
    		list.add(new Student("lisi",25));
    		list.add(new Student("lisi",25));
    		//姓名年龄相同的认为是同一个对象,去重
            ArrayList list2 = quChong(list);
    		System.out.println(list2);
    	}
    	//去除集合中重复的元素
    	public static ArrayList quChong(ArrayList list){
    		ArrayList list2=new ArrayList();
            for(int i=0;i<list.size();i++){
    			 Object obj = list.get(i);//判断新集合中是否包含该元素
    			 if(!list2.contains(obj))//依据equals方法判断是否包含
    				 list2.add(obj);
    		}
            return list2;
    	}
    }
    class Student{
    	………………
    	public boolean equals(Object obj){
    		if(!(obj instanceof Student))
    			throw new ClassCastException("类型不对");
    		Student stu=(Student)obj;
            return this.name.equals(stu.name)&&this.age==stu.age;
    	}
    }
    
    • boolean containsAll(Collection<?> c)
      判断是否包含另一个集合中的所有对象
    • boolean isEmpty()
      判断集合是否为空
    • boolean equals(Object o)
      判断两个集合中的对象是否都一致
  4. 获取

    • Iterator iterator()
      获取集合中的对象
      在使用迭代器迭代的过程中不允许对集合进行添加,修改,删除元素
    Iterator ite = col.iterator();//得到集合的迭代器
    while(ite.hasNext()){
    	Object obj = ite.next();
        //col.add("haah"); 
        //ConcurrentModificationException 
        //在使用迭代器迭代的过程中不允许对集合进行添加,修改,删除元素
    	System.out.println(obj);
    }
    while(ite.hasPrevious()){
    	Object obj=ite.previous();
    	System.out.println(obj);
    }
    
    • default void forEach(Consumer<? super T> action) void accept(T t) 参数用来依次接收集合中的每个对象
    col.forEach(t->System.out.println(t));
    col.forEach(System.out::println);
    
    • int size()
      获取集合中对象的个数
  5. 集合变数组

    • Object[] toArray()
      防止被随意地添加或删除
  6. 遍历集合的三种方式

    • Iterator iterator()
    • forEach()
    • 增强的for循环可以用于数组和Collection集合
    for(Object obj:col)
    {
    	System.out.println(obj);
    }
    

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运行npm install时报错“npm ERR! code 1”

目录 一、问题分析 二、解决问题 一、问题分析 有registry淘宝镜像地址过期的问题&#xff0c;改一下地址 npm淘宝镜像过期解决办法-CSDN博客主要问题是node-sass和sass-loader版本冲突 打开cmd&#xff0c;输入"node -v"查看node版本 我的版本是16&#xff0c;应…

电子企业实施数字工厂管理系统会遇到哪些挑战

随着信息技术的飞速发展&#xff0c;数字化转型已成为电子企业提升竞争力、实现可持续发展的关键途径。数字工厂管理系统作为数字化转型的核心部分&#xff0c;旨在通过集成各种信息技术&#xff0c;实现生产过程的自动化、智能化和高效化。然而&#xff0c;电子企业在实施数字…

低成本创业分享,一个不用自己囤货、进货、直播的项目|抖音小店

大家好&#xff0c;我是喷火龙 在抖音上面开店&#xff0c;不仅可以卖自己的商品&#xff0c;还可以卖别人的商品赚差价&#xff0c; 并且不需要你囤货、进货、直播、剪视频&#xff0c;也不需要有粉丝。 这个项目就是抖音小店无货源。 很多朋友对抖音小店无货源模式的玩法…

【自然语言处理】【大模型】DeepSeek-V2论文解析

论文地址&#xff1a;https://arxiv.org/pdf/2405.04434 相关博客 【自然语言处理】【大模型】DeepSeek-V2论文解析 【自然语言处理】【大模型】BitNet&#xff1a;用1-bit Transformer训练LLM 【自然语言处理】BitNet b1.58&#xff1a;1bit LLM时代 【自然语言处理】【长文本…

融资融券最低利率4.0!,融资融券利息计算公式,怎么开通?

融资融券的费率&#xff1a; 融资融券的费率主要包括融资利率和融券费率&#xff0c;这些费率的高低主要取决于证券公司的成本、政策倾向以及投资者的资金量大小。 融资利率方面&#xff0c;多数券商的优惠融资利率在5.5%到7.5%之间&#xff0c;与券商的成本和政策有关。一些…

【车载开发系列】AutoSar中的Port

【车载开发系列】AutoSar中的Port 一. Port概念 AutoSAR 接口定义了 SWC 之间、BSW 模块之间以及 SWC 和 BSW 模块之间交互的信息。AutoSAR 接口通过 SWC 和/或 BSW 模块端口&#xff08;Port&#xff09;的形式实现。通过这些端口&#xff0c;SWC 和 BSW 模块之间实现了数据…

Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件)

Adobe系列软件安装目录 一、Adobe Photoshop PS 25.6.0 解锁版 (最流行的图像设计软件) 二、Adobe Media Encoder ME v24.3.0 解锁版 (视频和音频编码渲染工具) 三、Adobe Premiere Pro v24.3.0 解锁版 (领先的视频编辑软件) 四、Adobe After Effects AE v24.3.0 解锁版 (视…

vue3和vite

vue3 1、vue3使如何实现效率提升的 客户端渲染效率比vue2提升了1.3~2倍 SSR渲染效率比vue2提升了2~3倍 1.1、静态提升 解释&#xff1a; 1. 对于静态节点&#xff08;如&#xff1a;<h1>接着奏乐接着舞</h1>&#xff09;&#xff0c;vue3直接提出来了&#xff…

应用层之 HTTP 协议

HTTP 协议 HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些 其他的资源, 比如图片, 视频, 音频等二进制的数据。浏览器获取到网页&#…

了解 Robot Framework :接口自动化测试教程!

开源自动化测试利器&#xff1a;Robot Framework Robot Framework 是一个用于实现自动化测试和机器人流程自动化&#xff08;RPA&#xff09;的开放源代码框架。它由一个名为 Robot Framework Foundation 的组织得到推广&#xff0c;得到了多家领军企业在软件开发中的广泛应用。…

Shopline和Shopify哪个更好?Shopline和Shopify的区别

Shopline和Shopify哪个更好取决于用户面向的市场&#xff0c;面向亚洲市场就更适合有本地化支持的Shopline&#xff0c;而如果希望拓展全球业务&#xff0c;Shopify可能更好。 Shopline和Shopify都是知名的电子商务平台&#xff0c;可以很好的帮助商家搭建和管理在线商店&…

【基础算法总结】二分查找二

二分查找二 1.山脉数组的峰顶索引2.寻找峰值3.寻找旋转排序数组中的最小值4.点名 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.山脉数组的…

Blender雕刻建模_笔刷纹理和顶点绘制

笔刷纹理 主要用于皮肤&#xff0c;纹理的雕刻。 可以修改映射方式来实现不同绘制效果。 用一张纹理来定义笔刷各个点的强度。其中白色为1&#xff0c;黑色为0。 设置笔刷纹理步骤&#xff1a; -新建一套笔刷 -强度&#xff0c;设为0.15&#xff08;可以根据需求修改&#x…

Ubuntu 配置Samba

Ubuntu 配置&#xff1a; 安装 Samba &#xff1a; sudo apt-get install samba添加用户并设置密码&#xff08;可与ubuntu用户密码相同方便记忆&#xff09; sudo smbpasswd -a root这里我设置的密码为123456 sudo vi /etc/samba/smb.conf注意这个共享的目录一定要存在\ho…

高通Android 11/12/13 通过包名设置默认launcher

背景&#xff1a;最近在封装供第三应用系统SDK 接口&#xff0c;遇到一个无法通过包名设置主launcher代码坑所以记录下。 涉及类roles.xml # <!---~ see com.android.settings.applications.defaultapps.DefaultHomePreferenceController~ see com.android.settings.appl…

git常用命令及其ignore文件

1.git本地操作命令 # 查看git的版本 git --version # 生成空的本地仓库 git init # 将文件添加到暂存区 git add 文件 # 将暂存区里的文件提交到本地仓库 git commit -m "描述"2.git远程仓库命令 # 添加远程仓库 git remote add origin http://192.168.1.130:9000/…

asp.net 齿轮加工车间生产管理系统-计算机毕业设计源码56014

摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;在现实运用中&#xff0c;为方便用户能够可以随时进行在线…

IT Tools

ChatGpt chatGpt chatgpt vs & vscode工具 Vs Extensions & Remote Development Vs Extensions Remote-SSH VSCode远程连接到Linux并实现免密码登录 Git Graph C cppreference.com cplusplus 镜像站点 用于下载 QT, Ubuntu, 清华镜像站点 CMake Downlo…

C语言详解:数组指针

数组指针是指针 int* p[10] 这是指针数组的写法 &#xff0c;因为【】的优先级比*高&#xff0c; 所以为了解决优先级问题&#xff0c;加&#xff08;&#xff09; int(* p)[10]&arr;//数组的地址要存起来 说明p是指针&#xff08;首先与*结合&#xff09;&#xff0c…

接口自动化-requests库

requests库是用来发送请求的库&#xff0c;本篇用来讲解requests库的基本使用。 1.安装requests库 pip install requests 2.requests库底层方法的调用逻辑 &#xff08;1&#xff09;get / post / put / delete 四种方法底层调用 request方法 注意&#xff1a;data和json都…