JAVA基础-集合(List与Map)
目录
引言
一,Collection集合
1.1,List接口
1.1.1,ArrayList
1.1.1.1,ArrayList的add()添加方法
1.1.1.2,ArrayList的remove()删除方法
1.1.1.3,ArrayList的contains()判断方法
1.1.1.4,ArrayList的set()排序方法和size()大小方法
1.1.1.5,ArrayList的遍历
1.1.2,LinkedList
1.2,Set接口
1.2.1,HashSet
1.2.1.1,HashSet的add()添加方法
1.2.1.2,HashSet的remove()删除方法
1.2.1.3,HashSet的contains()判断方法
1.2.1.4,HashSet的size()大小方法和clear()清空方法
1.2.2,Treeset
二,Map集合
2.1,HashMap集合
2.1.1,HashMap的put()添加方法
2.1.2,HashMap的get()获取方法
2.1.3,HashMap的containkey()和containvalue判断方法
2.1.4,HashMap的remove()删除方法
2.1.5,HashMap的遍历
2.1.5.1,HashMap的keyset()遍历方法
2.1.5.2,HashMap的values()遍历方法
2.2,TreeMap集合
引言
程序中可能通过数组来保存多个对象,因为数组长度是不可变的。JDK中提供了一些特殊的类,这些类 可以存储任何对象,并且长度可变,在java中这些类被为集合。集合类位于 java.util 包中。
集合有两大类:
- 单列集合 Collection 接口
- 双列集合 Map 接口
一,Collection集合
java.util.Collection 是所有单列集合的父接口,因此在Collection中定义了单列集合 List 和 Set 通用的一些方法。
方法声明 | 功能描述 |
boolean add(Object o) | 向集合中添加一个元素 |
boolean addAll(Collection c) | 增加一个集合(多个元素) |
void clear() | 清空集合 |
boolean remove(Object o) | 删除集合中的一个对象(元素) |
boolean removeAll(Collection c) | 删除一个集合(多个元素) |
boolean isEmpty() | 是不是空的 |
boolean contains(Object o) | 判断集合有没有这个元素 |
boolean containsAll(Collection c) | 判断集合中有没有参数集合 |
Iterator iterator() | 返回一个遍历迭代器 |
int size() | 返回集合的元素个数 |
1.1,List接口
List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地将实现了List接口的对象称为List 集合,本质更象一个动态的数组。
List的常用方法:
方法 | 功能描述 |
void add(int index,Object element) | 向集合中指定位置添加一个元素 |
boolean addAll(int index,Collection c) | 向集合中指定位置增加一个集合(多个元素) |
Object get(int index) | 获取指定位置元素 |
Object remove(int index) | 删除指定位置元素 |
Object set(int index,Object element) | 修改指定位置的元素 |
int indexOf(Object o) | 获取指定元素索引 |
int lastIndexOf(Object o) | 获取最后一个元素索引 |
List subList(int fromIndex,int toIndex) | 将指定索引对象对换 |
1.1.1,ArrayList
java.util.ArrayList类是List接口的一个实现类,此对象相当于动态的数组。
实例化ArrayList对象有几种方式:
实例演示:
//实例化 ArrayListArrayList list1 = new ArrayList();var list2 = new ArrayList();List list3 = new ArrayList();//此方法实例出的对象,是只读的(不能添加 删除 移动位置,优点是能够快速建立集合实例对象)List list4 = List.of();//list4.add(10); 此行是错误的,因为List.of() 对象是只读的String[] arr = {"java","javascript","python","html"};//此方法实例出的对象,是只读的;list5.add(10);不可行List list5 = Arrays.asList(1,2,3);
ArrayList的常用方法添加、删除、判断、大小输出,修改,,排序,遍历:
- add()//添加
- remove()//删除
- contains()//判断
- set()//设置指定位置元素更改为指定对象
- size()//大小
1.1.1.1,ArrayList的add()添加方法
实例演示:
//实例化,这们实例化,集合可以添加任何类型的元素 默认是ObjectList list = new ArrayList();//添加元素list.add(10);System.out.println(list);list.add(5.665);System.out.println(list);list.add("java");System.out.println(list);list.add("mysql");System.out.println(list);//在指定位置添加元素list.add(0, "python");System.out.println(list);//添加多个元素list.addAll(List.of("html", "css"));System.out.println(list);//在指定位置添加多个元素list.addAll(0, List.of(100, 200, 300, 400, 500));System.out.println(list);
输出结果:
1.1.1.2,ArrayList的remove()删除方法
示例演示:
List list = new ArrayList();list.addAll(List.of("java","php","c","go","c++","java","c"));System.out.println(list);//删除元素remove(Object o) remove(int index)//此时删除的是索引为5的元素,如果下标没有5就出异常//删除对象,成功返回布尔true,失败返回falsevar oo = list.remove(5);System.out.println(oo);//删除子集合,只要陈工删除一个元素就返回trueSystem.out.println(list.removeAll(List.of("mysql", "java")));System.out.println(list);//清空集合list.clear();System.out.println(list);
输出结果:
1.1.1.3,ArrayList的contains()判断方法
示例演示:
List list = new ArrayList();list.addAll(List.of("java","php","c","go","c++","java","c"));System.out.println(list);//判断某一个元素是否存在System.out.println(list.contains("php"));//判断集合是否为空System.out.println(list.isEmpty());//判断多个元素是否都存在,有一个不存在就返回falseSystem.out.println(list.containsAll(List.of("mysql", "java")));
输出结果:
1.1.1.4,ArrayList的set()排序方法和size()大小方法
示例演示:
List list = new ArrayList();list.addAll(List.of("java","php","c","go","c++","java","c"));System.out.println(list);System.out.println(list.size());list.set(0,"c++");System.out.println(list);
输出结果:
1.1.1.5,ArrayList的遍历
示例演示:
List list = new ArrayList();list.addAll(List.of("java","php","c","go","c++","java","c"));System.out.println(list);//集合遍历for (Object obj : list) {System.out.println(obj);}for (int i = 0; i < list.size(); i++) {System.out.printf("list.get(%d) = %s%n", i, list.get(i));}
输出结果:
1.1.2,LinkedList
extends AbstractSequentialList
LinkedList同时实现了 List 接口和 Deque 对口,也就是收它既可以看作一个顺序容器,又可以看作一 个队列(Queue),同时又可以看作一个栈(stack),这样看来,linkedList简直就是无敌的,当你需要使 用栈或者队列时,可以考虑用LinkedList,一方面是因为Java官方已经声明不建议使用Stack类,更遗憾的是, Java里根本没有一个叫做Queue的类(只是一个接口的名字)。关于栈或队列,现在首选是ArrayDeque, 它有着比LinkedList(当作栈或队列使用时)更好的性能。
LinkedList常用方法同ArrayList基本相同,可以参照Arraylist尝试。
1.2,Set接口
Set接口继承了Collection接口,集合中元素是不能重复的。如果有相关的元素重复内容,就保留原来的 元素,添加的元素取消,不能随机读取元素,没有顺序。
public interface Set extends Collection
1.2.1,HashSet
实例化HashSet:
示例演示:
HashSet hashset1=new HashSet();Set hashset2=new HashSet();var hashset=new HashSet();
1.2.1.1,HashSet的add()添加方法
示例演示:
HashSet hashset=new HashSet();hashset.add("java");hashset.add("c");hashset.add("php");hashset.add("go");hashset.add("java");System.out.println(hashset);hashset.addAll(List.of("nihao","小明"));System.out.println(hashset);
输出结果:
1.2.1.2,HashSet的remove()删除方法
示例演示:
HashSet hashset=new HashSet(List.of(10,50,30,80,5));System.out.println(hashset);System.out.println(hashset.remove(50));System.out.println(hashset);System.out.println(hashset.removeAll(List.of(80, 4, 3)));System.out.println(hashset);
输出结果:
1.2.1.3,HashSet的contains()判断方法
示例演示:
HashSet hashset=new HashSet(List.of(10,50,30,80,5));System.out.println(hashset);System.out.println(hashset.contains(5));System.out.println(hashset.containsAll(List.of(10, 5)));System.out.println(hashset.containsAll(List.of(10, 5,4)));
输出结果:
1.2.1.4,HashSet的size()大小方法和clear()清空方法
示例代码:
HashSet hashset=new HashSet(List.of(10,50,30,80,5));System.out.println(hashset);System.out.println(hashset.size());hashset.clear();System.out.println(hashset);
输出结果:
1.2.2,Treeset
是一个有序,可排序的(默认是升序),不可重复元素的集合工具类。
示例演示:
//实例化TreeSet对象//Set treemap=new TreeSet();TreeSet treeset=new TreeSet(List.of(5,9,8,4,55,4,1));System.out.println(treeset);
输出结果:
二,Map集合
map接口是一个双列集合,每个元素有一个键值 对 Map
- 1.Map是一个双列集合,一个元素包含两个值(一个key,一个value)
- 2.Map集合中的元素,key和value的数据类型可以相同,也可以不同
- 3.Map中的元素,key不允许重复,value可以重复
- 4.Map里的key和value是一一对应的。
map集合方法:
2.1,HashMap集合
HashMap 基于哈希表的 Map 接口实现,是以 key-value 存储形式存在,即主要用来存放键值对。HashMap 的实现不是同步的,这意味着他不是线程安全的。它的 key、value 都可以为 null,此外,HashMap 中的映射不是有序的。
实例化HashMap
//实例化HashMap,使用泛型Map<String,Integer> hash1=new HashMap<>();HashMap<String,Integer> hash2=new HashMap<>();//不使用泛型HashMap hash=new HashMap();
2.1.1,HashMap的put()添加方法
示例代码:
HashMap hash=new HashMap();hash.put("小黑",1);hash.put("小黄",1);hash.put("小吕",1);hash.put("小黑",2);System.out.println(hash);
输出结果:
2.1.2,HashMap的get()获取方法
示例代码:
HashMap hash=new HashMap();hash.put("小黑",1);hash.put("小黄",1);hash.put("小吕",1);hash.put("小黑",2);System.out.println(hash);System.out.println(hash.get("小黑"));System.out.println(hash);
输出结果:
2.1.3,HashMap的containkey()和containvalue判断方法
示例代码:
HashMap hash=new HashMap();hash.put("小黑",1);hash.put("小黄",1);hash.put("小吕",1);hash.put("小黑",2);System.out.println(hash);System.out.println(hash.containsKey("小黑"));System.out.println(hash.containsValue(1));
输出结果:
2.1.4,HashMap的remove()删除方法
示例代码:
HashMap hash=new HashMap();hash.put("小黑",1);hash.put("小黄",1);hash.put("小吕",1);hash.put("小黑",2);System.out.println(hash);System.out.println(hash.remove("小黑"));System.out.println(hash.remove("小吕", 1));
输出结果:
2.1.5,HashMap的遍历
2.1.5.1,HashMap的keyset()遍历方法
示例代码:
HashMap hash=new HashMap();hash.put("小黑",1);hash.put("小黄",1);hash.put("小吕",1);hash.put("小黑",2);System.out.println(hash);for (Object o : hash.keySet()) {System.out.println(o);}
输出结果:
2.1.5.2,HashMap的values()遍历方法
示例代码:
HashMap hash=new HashMap();hash.put("小黑",1);hash.put("小黄",1);hash.put("小吕",1);hash.put("小黑",2);System.out.println(hash);for (Object value : hash.values()) {System.out.println(value);}
输出结果:
2.2,TreeMap集合
1. 是一个有序的key-value集合,它是通过红黑树实现的。该映射根据其键的自然顺序进行排序,或 者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
2. 是继承了AbstractMap,也是以key-value集合存储。实现了NavigableMap接口,可以支持一系列 的导航方法。 比如返回有序的key集合。实现了Cloneable克隆接口。实现了java.io.Serializable序列化接口。另 外,TreeMap是非线程同步的。
实例化TreeMap
//实例化TreeMap,使用泛型Map<String,Integer> treemap1=new TreeMap<>();TreeMap<String,Integer> treemap2=new TreeMap<>();//不使用泛型TreeMap treemap=new TreeMap();
TreeMap应用
示例代码:
TreeMap treemap=new TreeMap();treemap.put("小黑",1);treemap.put("小黄",1);treemap.put("小吕",1);treemap.put("小黑",2);System.out.println(treemap);
输出结果:
相关文章:

JAVA基础-集合(List与Map)
目录 引言 一,Collection集合 1.1,List接口 1.1.1,ArrayList 1.1.1.1,ArrayList的add()添加方法 1.1.1.2,ArrayList的remove()删除方法 1.1.1.3,ArrayList的contai…...

19 QListWidget控件
Tips: 对于列表式数据可以使用QStringList进行左移一块输入。 代码: //listWidget使用 // QListWidgetItem * item new QListWidgetItem("锄禾日当午"); // QListWidgetItem * item2 new QListWidgetItem("汗滴禾下土"); // ui->…...
手动安装docsify
安装docsify详见:docsify 1、下载 wget https://codeload.github.com/docsifyjs/docsify/zip/refs/heads/master -o docsify-master.zip 2、解压 unzip docsify-master.zip 3、移动文件到nginx的html所在目录【略】 4、配置nginx,示例如下 locati…...

yaml语法详解
#kv #对空格的严格要求十分高 #注入到我们的配置类中 #普通的keyvalue name: qinjiang#对象 student:name: qingjiangage: 3#行内写法 student1: {name: qinjiang,age: 3}#数组 pets:- cat- dog- pigpet: [cat,dog,pig]yaml可以给实体类赋值 person:name: kuangshenage: 19happ…...

ubuntu下tmux安装
目录 0. 前言1. Tmux介绍2. 安装3. 验证安装 0. 前言 本节安装tmux终端复用工具,在Ubuntu中运行一些服务或脚本的时候往往不能退出终端,需要一直挂着。在有图形界面的linux中你还可以新开一个终端去做别的事,但是在无界面linux中,…...

ssh打开远程vscode
如果想要远程打开其他终端的vscode,首先要知道远程终端的ip地址和用户名称以及用户密码 1、打开本地vscode 2、点击左下角蓝色区域 3、页面上部出现如下图,点击ssh,我这里已经连接,所以是connect to host 4、选择Add New SSH Host…...
Socket发送数据---winsock库和boost库
一个是通过winsock库提供的api实现,一个是boost库实现,两个方法都可以,因为项目是vc++6.0实现的,不支持boost库,只能使用winsock库,vc++6.0太老,局限性大。 通过Winsock库提供的API 通过UDP #include<winsock2.h> #include<vector> #include<WS2tcpip.h…...

Qt Core学习日记——第七天QMetaObject(上)
每一个声明Q_OBJECT的类都具有QMetaObject对象 Q_OBJECT宏源代码: #define Q_OBJECT \ public: \ QT_WARNING_PUSH \ Q_OBJECT_NO_OVERRIDE_WARNING \ static const QMetaObject staticMetaObject; \ virtual const QMetaObject *metaObject() const; \ vir…...

100、用简洁的语言描述一下:TCP的三次握手和四次挥手(不需要长篇大论)
TCP的三次握手和四次挥手 TCP协议是7层网络协议中的传输层协议,负责数据的可靠传输。 1、三次握手 在建立TCP连接时,需要通过三次握手来建立,过程是: 客户端向服务端发送一个SYN服务端接收到SYN后,给客户端发送一个SYN_ACK客户…...

中南大学硕士论文latex版本全指导
要毕业了,闲下点时间写的东西。之前一直收益与师兄师姐流传下来的latex版本,用起来很舒服,希望后面的学弟学妹也能完美用上。latex功能很强大,不需要自己排版,只管内容即可,但是安装流程会多一丢丢。 目录 …...
RFC8470在HTTP中使用早期数据
摘要 使用TLS早期数据会暴露出重放攻击的可能性。本文定义了允许客户端与服务器就早期数据中发送的HTTP请求进行通信的机制。描述了使用这些机制来减轻重放风险的技术。 1. 介绍 TLS 1.3[TLS13]引入了早期数据(也称为零往返时间(0-RTT)数…...

macOS Big Sur 11.7.9 (20G1426) 正式版 ISO、PKG、DMG、IPSW 下载
macOS Big Sur 11.7.9 (20G1426) 正式版 ISO、PKG、DMG、IPSW 下载 本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Window…...

【LeetCode】62.不同路径
题目 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。 问总共有多少条不同的路径? …...
使用序列化和反序列化函数archivedDataWithRootObject和unarchivedObjectOfClasses的使用和遇到问题及解决方案
为何archiveRootObject和unarchiveObjectWithFile正常,而archivedDataWithRootObject和unarchivedObjectOfClasses一直报错。 [NSKeyedArchiver archiveRootObject:account toFile:path];和c PPAccountModel *account [NSKeyedUnarchiver unarchiveObjectWithFile:…...
python获取鼠标出颜色
import pyautogui as pg import keyboarddef rgb2hex(r, g, b):return #{:02x}{:02x}{:02x}.format(r, g, b)try:width, height pg.size()print(f"Display resolution: {width} * {height}\n") # 打印屏幕分辨率print(按下shift键打印出鼠标所指位置的颜色......)w…...

Github Flow工作流简单介绍(以部署为中心的开发模式)
前言 这篇文章主要介绍Github Flow的理念,以下内容来源于《Github入门与实践》。 Github Flow是以部署为中心的开发模式,通过简单的规则,持续高速且安全地进行部署。而Gitflow则是以发布为中心的分支管理模型,它提供了一种更灵活…...

selenium浏览器驱动下载
Chrome谷歌浏览器 下载地址:http://chromedriver.storage.googleapis.com/index.html 不同的Chrome的版本对应的chromedriver.exe 版本也不一样,下载时不要搞错了。 如果是最新的Chrome, 下载最新的chromedriver.exe 就可以了。 Firefox火狐浏览器 驱…...

go学习 模块与包 - Init函数 - 如何导入第三方包 - 切片与数组的数据传递方式 - go中文件的读写
目录 包(package)是组织和复用代码的基本单元。 包的种类: 包的导入 包的组成 如下两个文件中定义了A变量和 sc_num变量,他们的首字母开头分别为大写和小写,因此可以说明A变量是公有变量,而sc_num是私…...

2023第五届全国生物资源提取与应用创新论坛即将举办
01、会议背景 为进一步加强生物资源提取行业交流与合作,促进业“产学研用”融合,提升行业科技创新水平,增强行业国际竞争力,中国生物发酵产业协会、浙江科技学院、浙江工业职业技术学院、浙江省农业生物资源生化制造协同创新中心&…...
Socks5代理在爬虫与HTTP应用中的重要性
IP代理的类型及原理常见的IP代理类型有HTTP代理、Socks代理等,本文重点关注Socks5代理。Socks5代理是一种网络协议,可以实现传输层的数据转发,使客户端在不直接连接服务器的情况下与其进行通信。其原理在于接收客户端的请求,然后将…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...

6.9-QT模拟计算器
源码: 头文件: widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMouseEvent>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);…...
TJCTF 2025
还以为是天津的。这个比较容易,虽然绕了点弯,可还是把CP AK了,不过我会的别人也会,还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...

RKNN开发环境搭建2-RKNN Model Zoo 环境搭建
目录 1.简介2.环境搭建2.1 启动 docker 环境2.2 安装依赖工具2.3 下载 RKNN Model Zoo2.4 RKNN模型转化2.5编译C++1.简介 RKNN Model Zoo基于 RKNPU SDK 工具链开发, 提供了目前主流算法的部署例程. 例程包含导出RKNN模型, 使用 Python API, CAPI 推理 RKNN 模型的流程. 本…...

Spring是如何实现无代理对象的循环依赖
无代理对象的循环依赖 什么是循环依赖解决方案实现方式测试验证 引入代理对象的影响创建代理对象问题分析 源码见:mini-spring 什么是循环依赖 循环依赖是指在对象创建过程中,两个或多个对象相互依赖,导致创建过程陷入死循环。以下通过一个简…...