当前位置: 首页 > news >正文

Java入门:22.集合的特点,List,Set和Map集合的使用

1 什么是集合

  • 本质就是容器的封装,可以存储多个元素

  • 数组一旦创建,长度就不能再改变了。

  • 数组一旦创建,存储内容的类型不能改变。

  • 数组可以存储基本类型,也可以存储引用类型。

  • 数组可以通过length获得容量的大小,但无法获得存储内容的多少。

  • 集合可以无限存储存储元素 (底层还是对数组做了扩容)

  • 集合可以通过size方法获得存储元素的个数 int size

  • 集合只能存储引用类型的数据

  • 有多种集合,底层使用不同的存储结构存储元素,适合不同的存储场景

    • 线性结构(数组)

    • 链表结构

    • 哈希(hash)结构 , 散列结构

    • 二叉树结构

2 JDK提供的集合

  • jdk中提供了多种集合

  • 基本上都实现了下面的4种接口(我们称为有4类集合)

    • 实现Collection接口的集合

      存储元素的特点是 无序(存取顺序) 可重复

      常用的实现类:无

    • 实现List接口的集合

      存储元素的特点是 有序 可重复

      常用的实现类:ArrayList , LinkedList , Vector

    • 实现Set接口的集合

      存储元素的特点是 无序 不可重复的(唯一的)

      常用的实现类:HashSet , TreeSet

    • 实现Map接口的集合

      存储元素的特点是 键值存储, 一个元素由2部分组成

      键的存储特点是 无序 不可重复的

      值的存储特点是 无序 可重复的

      常用的实现类:HashMap , TreeMap , Hashtable

注意 List 和 Set 都继承了 Collection

3 List集合的使用

  • 所有的List集合,都实现了List接口

  • List的常用方法

    List<String> list = new ArrayList<>();
    ​
    list.add(E e) ;  //添加一个元素(末尾)
    list.addAll(Collection es) ;//添加一组元素(末尾) , 将另一个集合中的元素都添加到当前list集合中
    ​
    list.add(int index , E e) ; //插入一个元素
    list.addAll(int index , Collection es) ;//插入一组元素
    ​
    ​
    list.remove(Object o) ;//删除指定的元素  (底层使用equals判断相等)
    list.remove(int index) ;//删除指定位置的元素
    list.removeAll(Collection es) ;//删除一组元素
    ​
    list.size();
    ​
    list.get(int index) ;//获取指定位置的元素
    Iterator it = list.iterator(); //先获得迭代器对象,可以通过迭代器对象遍历容器中每一个元素//就是我们之前封装的Manager
    it.hashNext() ;//判断是否还有下一个元素
    it.next() ;//获得下一个元素
    ​
    Object[] os = list.toArray() ;//将容器中的元素装入数组并返回
    String[] ss = list.toArray(new String[0]); //根据指定的类型,返回指定类型的数组
    ​
    list.clear();//清空容器中的元素
    list.isEmpty();//判断容器是否为空 (size == 0)
    list.contains(Object o) ;//判断容器中是否包含指定的元素(equals)
    list.indexOf(Object o) ;//找到容器中指定元素的位置(用来判断元素是否判断存在)
    list.sort(Comparator c) ;//根据指定的比较器,比较元素大小,并完成排序
    ​

4 增强for循环

  • jdk1.5之后,提供了一个循环新特性,叫增强for循环,foreach循环

  • 增强for循环主要是简化集合和数组元素遍历的

  • 增强for循环的本质就是使用Iterator迭代器,所有实现了Iterable接口的类都可以使用怎强for循环

List<String> list = new ArrayList<>();
for(String s : list){ ...
}
//等价于
Iterator<String> it = list.iterator();
for(;it.hashNext();){String s = it.next();....
}
​
String[] array =  new String[5] ;
for(String s : array){....
}
//等价于
for(int i=2;i<array.length-2;i+=2){String s = array[i];....
}
​

5 Set集合的使用

  • 所有的Set集合,都实现Set接口

  • Set集合的常用方法

    Set<String> set = new TreeSet<>();
    ​
    set.add(E e) ;//添加一个元素(位置不定)
    set.addAll(Collection es);//添加一组元素,将另一个集合中的元素存入当前集合中
    ​
    set.remove(Object o) ;//删除指定的元素 (equals比较)
    set.removeAll(Collection es) ;//删除一组元素
    ​
    set.size();
    set.clear() ;
    set.isEmpty();
    set.contains(Object o) ;
    ​
    Iterator it = set.iterator(); //获得迭代器对象,进而遍历集合中的所有元素
    it.hashNext();
    it.next();

6 Map集合的使用

所有的Map集合,都实现了Map接口

Map集合中的每一个元素,由2部分组成

一个称为key

一个称为value

map的特点是基于key找到与之对应的value。遍历不是map的强项

Map<Integer,String> map = new HashMap<>();
​
map.put(key,value) ; //添加一个元素//重复添加同一个key的元素,value值覆盖 (key是去重)
map.putAll(Map otherMap) ;//添加一组元素。将另一个map中的元素都添加到当前map集合中
​
String value = map.get(key) ; //根据key取出对应的value
​
map.remove(key) ;//删除key对应的数据, 同时返回删除的value
​
map.size(); //获取元素(键值对)的个数
map.clear();//清空集合
map.isEmpty();//判断集合是否为空 
map.containsKey(key);//判断集合是否包含指定的key
map.containsValue(value);//判断集合是否包含指定的value
​
//map集合的遍历
//  map集合不支持直接遍历(这就不是map特点)
//  可以间接遍历
Set<Integer> keys = map.keySet(); //返回装有所有key的set集合
Collection<String> values = map.values();//返回装有所有value的collection集合,//Collection集合也支持迭代器遍历
​
//对于map存储的元素,在存入之前,这个原有分为key和value
//在存入map集合之后,会将key和value组成一个对象(方便存储)
//entrySet获得一个装有所有键值对数据的set集合
//Entry是Map中定义的一个内部类(内部接口)
Set<Map.Entry<Integer, String>> entries = map.entrySet();

那么今天的内容就到这里啦,如果存在哪些疑问或问题欢迎大家指出,我们下期再见~

相关文章:

Java入门:22.集合的特点,List,Set和Map集合的使用

1 什么是集合 本质就是容器的封装&#xff0c;可以存储多个元素 数组一旦创建&#xff0c;长度就不能再改变了。 数组一旦创建&#xff0c;存储内容的类型不能改变。 数组可以存储基本类型&#xff0c;也可以存储引用类型。 数组可以通过length获得容量的大小&#xff0c;但…...

重生之我在异世界学编程之C语言:深入指针篇(下)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 题集&#xff08;1&#xff09;指针笔试题1&a…...

理解Parquet文件和Arrow格式:从Hugging Face数据集的角度出发

parquet发音&#xff1a;美 [pɑrˈkeɪ] 镶木地板&#xff1b;拼花木地板 理解Parquet文件和Arrow格式&#xff1a;从Hugging Face数据集的角度出发 引言 在机器学习和大数据处理中&#xff0c;数据的存储和传输格式对于性能至关重要。两种广泛使用的格式是 Parquet 和 Arr…...

下载 M3U8 格式的视频

要下载 M3U8 格式的视频&#xff08;通常是 HLS 视频流&#xff09;&#xff0c;可以尝试以下几种方法&#xff1a; 方法 1&#xff1a;使用下载工具&#xff08;推荐&#xff09; 1. IDM&#xff08;Internet Download Manager&#xff09;&#xff1a; 安装 IDM 并启用浏…...

Tomcat使用教程

下载地址&#xff1a;https://tomcat.apache.org/ 配置环境变量 变量名: CATALINA_HOME 变量值: D:\tools\apache-tomcat-9.0.97 Path: %CATALINA_HOME%\bin 启动Tomcat(打开命令提示符) startup.bat 解决乱码问题(打开conf\logging.properties) java.util.logging.Conso…...

LabVIEW氢气纯化控制系统

基于LabVIEW的氢气纯化控制系统满足氢气纯化过程中对精确控制的需求&#xff0c;具备参数设置、过程监控、数据记录和报警功能&#xff0c;体现了LabVIEW在复杂工业控制系统中的应用效能。 项目背景 在众多行业中&#xff0c;尤其是石油化工和航天航空领域&#xff0c;氢气作为…...

现在的电商风口已经很明显了

随着电商行业的不断发展&#xff0c;直播带货的热潮似乎正逐渐降温&#xff0c;而货架电商正成为新的焦点。抖音等平台越来越重视货架电商&#xff0c;强调搜索功能的重要性&#xff0c;预示着未来的电商中心将转向货架和搜索。 在这一转型期&#xff0c;AI技术与电商的结合为…...

Uniapp触底刷新

在你的代码中&#xff0c;使用了 scroll-view 来实现一个可滚动的评论区域&#xff0c;并且通过监听 scrolltolower 事件来触发 handleScrollToLower 函数&#xff0c;以实现“触底更新”或加载更多评论的功能。 关键部分分析&#xff1a; scroll-view 组件: scroll-view 是一…...

开源项目 - face parsing 人脸区域分割 人像区域分割 人脸分割 人像区域分割 BiSeNet

开源项目 - face parsing 人脸区域分割 人像区域分割 人脸分割 人像区域分割 BiSeNet 项目地址&#xff1a;GitHub - XIAN-HHappy/face_parsing: face_parsing 脸部分割 示例&#xff1a; ​​​​ 助力快速掌握数据集的信息和使用方式。 数据可以如此美好&#xff01;...

python游戏设计---飞机大战

1.前言 上次做飞机大战游戏有人这么说&#xff1a; 好好好&#xff01;今天必须整一个&#xff0c;今天我们来详细讲解一下&#xff0c;底部找素材文件下载&#xff01;&#xff01;&#xff01; 2.游戏制作 目录如下&#xff1a; 1.导入的包 import pygame import sys imp…...

13TB的StarRocks大数据库迁移过程

公司有一套StarRocks的大数据库在大股东的腾讯云环境中&#xff0c;通过腾讯云的对等连接打通&#xff0c;通过dolphinscheduler调度datax离线抽取数据和SQL计算汇总&#xff0c;还有在大股东的特有的Flink集群环境&#xff0c;该环境开发了flink开发程序包部署&#xff0c;实时…...

HTTP代理有那些常见的安全协议?

在数据采集领域&#xff0c;HTTP代理扮演着至关重要的角色&#xff0c;它不仅帮助我们访问互联网资源&#xff0c;还涉及到数据的安全传输。了解HTTP代理中常见的安全协议对于保护数据安全、提高数据采集效率至关重要。那么&#xff0c;有哪些安全协议是在HTTP代理中常用的呢&a…...

Kylin Server V10 下基于Kraft模式搭建Kafka集群

一、Kraft 模式与 ZooKeeper 模式简介 在Kafka 2.8 之前,Kafka 重度依赖 ZooKeeper 集群做元数据管理、Controller 的选举等(统称为共识服务);当ZooKeeper 集群性能发生抖动时,Kafka 的性能也会受到很大的影响。如下图所示: 在 Kafka 2.8 之后,引入了基于 Raft …...

tauri使用github action打包编译多个平台arm架构和inter架构包踩坑记录

这些error的坑&#xff0c;肯定是很多人不想看到的&#xff0c;我的开源软件PakePlus是使用tauri开发的&#xff0c;PakePlus是一个界面化将任何网站打包为轻量级跨平台软件的程序&#xff0c;利用Tauri轻松构建轻量级多端桌面应用和多端手机应用&#xff0c;为了实现发布的时候…...

Python爬虫与窗口实现翻译小工具(仅限学习交流)

Python爬虫与窗口实现翻译小工具(仅限学习交流) 在工作中,遇到一个不懂的单词时,就会去网页找对应的翻译,我们可以用Python爬虫与窗口配合,制作一个简易的翻译小工具,不需要打开网页,自动把翻译结果显示出来。 整个过程比较简单。 # This is a sample Python script. …...

紫光展锐联合上汽海外发布量产车型,赋能汽车智能化

当前&#xff0c;智能汽车产业迎来重大变局&#xff0c;随着人工智能、5G、大数据等新一代信息技术的迅猛发展&#xff0c;智能网联汽车正呈现强劲发展势头。 11月26日&#xff0c;在2024紫光展锐全球合作伙伴大会汽车电子生态论坛上&#xff0c;紫光展锐与上汽海外出行联合发…...

Maven 打包出现问题解决方案

我执行 mvn install 报如下错误 可是我在 web 模块中能正确引用到 common 的类&#xff0c;于是我把 web 引用到的 common 中的类先移动到 web 模块中&#xff0c;然后把 common 模块的类都删掉&#xff0c;然后再次执行 mvn install,结果报错如下&#xff1a; [ERROR] Faile…...

第四话:JS中的eval函数

theme: channing-cyan 1.不要使用eval&#xff01; 如果你从来都没有用到过eval这个函数&#xff0c;甚至你都不知道这个函数的作用。那么我只能说&#xff1a;你做了一件正确的事情 o.O 虽然我这篇文章要说一下eval函数的一些能力和注意点&#xff0c;但是我希望&#xff0…...

歇一歇,写写段子

无聊的日子都在写段子1.0 中学的时候喜欢看意林之类的杂志&#xff0c; 里面的作者用乱七八糟的理由跑去旅游&#xff0c;然后说“阻碍你脚步的永远只有逃离的勇气和对生活的热爱”&#xff0c; 我觉得太对了&#xff0c;可惜 12306 付款方式里没有勇气和热爱&#xff0c;不…...

TypeScript (一)运行环境配置,数据类型,可选类型,联合类型,type与interface,交叉类型,断言as,字面量类型,类型缩小

文章目录 一、认识TS1.1 JS 存在的问题1.2 TS的出现1.3 TS运行环境运行ts的三种方式 1.4 变量声明1.5 类型推断 二、数据类型2.1 JS数据类型(1) 数组Array(2) 对象Object(3) 其他类型 2.2 TS特有数据类型(1) any类型(2) unknown类型(3) void类型(4) never (了解)(5) tuple类型 …...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...