java中集合List,Set,Queue,Map

Java SE中的集合框架是一组用于存储和操作对象的类和接口。它提供了丰富的数据结构,可以用于解决各种问题。Java SE中的集合框架包含以下主要类和接口:
在这里插入图片描述

一. Collection接口:

是集合框架的根接口,它定义了一些通用的集合操作方法,比如添加、删除、查找、遍历等。
作为集合框架的根接口,Collection接口定义了一些通用的集合操作方法,下面举例说明这些方法的用法:

1.添加元素:使用add()方法将指定的元素添加到集合中。

Collection<String> collection = new ArrayList<>();
collection.add("apple");
collection.add("banana");
  1. 删除元素:使用remove()方法从集合中删除指定的元素。
collection.remove("apple");
  1. 查找元素:使用contains()方法判断集合中是否包含指定的元素。
boolean containsApple = collection.contains("apple");
  1. 遍历集合:使用迭代器(iterator()方法)或者增强for循环(foreach)来遍历集合中的元素。
Iterator<String> iterator = collection.iterator();
while(iterator.hasNext()){String element = iterator.next();System.out.println(element);
}for(String element : collection){System.out.println(element);
}
  1. 获取集合大小:使用size()方法获取集合中的元素个数。
int size = collection.size();
  1. 判断集合是否为空:使用isEmpty()方法判断集合是否为空。
boolean isEmpty = collection.isEmpty();
  1. 清空集合:使用clear()方法清空集合中的所有元素。
collection.clear();

需要注意的是,Collection接口中的方法都是抽象方法,具体的实现在其子类中完成。

二. List接口:

List接口是Collection接口的子接口,表示一个有序集合,可以包含重复元素。List接口的常见实现类有:

ArrayList:基于动态数组实现,支持随机访问,插入和删除元素的效率较低。
LinkedList:基于双向链表实现,支持快速插入和删除元素,但访问元素的效率较低。
Vector:基于动态数组实现,与ArrayList类似,但线程安全,不推荐使用。
Stack:基于Vector实现,表示一个后进先出(LIFO)的堆栈结构。
CopyOnWriteArrayList:基于数组实现,可以在迭代的同时进行插入和删除操作,适用于读多写少的场景。
除了这些常见的实现类之外,还可以通过继承AbstractList类或实现List接口来创建自定义的List实现类。下面举例说明List接口的用法:

  1. 创建List集合并添加元素:
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("apple"); //可以添加重复元素
  1. 获取元素:
String firstElement = list.get(0); //获取索引为0的元素
  1. 修改元素:
list.set(0, "orange"); //将索引为0的元素修改为"orange"
  1. 删除元素:
list.remove("apple"); //删除指定元素
list.remove(0); //删除索引为0的元素
  1. 查找元素:
boolean containsApple = list.contains("apple"); //判断集合中是否包含"apple"
int index = list.indexOf("banana"); //查找元素"banana"的索引
  1. 获取集合大小:
int size = list.size(); //获取集合的大小
  1. 遍历集合:
for(String element : list){System.out.println(element);
}Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){String element = iterator.next();System.out.println(element);
}

需要注意的是,List接口是有序的,可以通过索引访问元素。同时,List接口中也继承了Collection接口中的方法,可以使用Collection接口中的通用方法对List进行操作。

三. Set接口:

Set接口是Collection接口的子接口,表示一个无序、不重复的集合。Set接口的常见实现类有:

  1. HashSet:基于哈希表实现,不保证元素的顺序,可以存储null元素。
  2. TreeSet:基于红黑树实现,保证元素的有序性,不允许存储null元素。
  3. LinkedHashSet:基于哈希表和链表实现,保证元素的插入顺序,允许存储null元素。
  4. EnumSet:专门用于存储枚举类型的集合。
  5. CopyOnWriteArraySet:基于数组实现,可以在迭代的同时进行插入和删除操作,适用于读多写少的场景。

除了这些常见的实现类之外,还可以通过继承AbstractSet类或实现Set接口来创建自定义的Set实现类。下面举例说明Set接口的用法:

  1. 创建Set集合并添加元素:
Set<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("apple"); //不会添加重复元素
  1. 查找元素:
boolean containsApple = set.contains("apple"); //判断集合中是否包含"apple"
  1. 删除元素:
set.remove("apple"); //删除指定元素
  1. 获取集合大小:
int size = set.size(); //获取集合的大小
  1. 遍历集合:
for(String element : set){System.out.println(element);
}Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){String element = iterator.next();System.out.println(element);
}

需要注意的是,Set接口是无序的,不保证元素的存储顺序。同时,Set接口中也继承了Collection接口中的方法,可以使用Collection接口中的通用方法对Set进行操作。另外,TreeSet是Set接口的有序实现类,它会按照元素的自然顺序进行排序。

四. Map接口:

Map接口是用于存储键值对的集合,它是集合框架中的一部分。Map接口的常见实现类有:

  1. HashMap:基于哈希表实现,不保证键值对的顺序,可以存储null键和null值。
  2. TreeMap:基于红黑树实现,保证键值对的有序性,不允许存储null键,但可以存储null值。
  3. LinkedHashMap:基于哈希表和链表实现,保证键值对的插入顺序,允许存储null键和null值。
  4. Hashtable:基于哈希表实现,保证键值对的同步访问,不保证键值对的顺序,不允许存储null键和null值。
  5. ConcurrentHashMap:基于哈希表和分段锁实现,并发安全的Map,允许并发地进行读写操作。
  6. EnumMap:专门用于存储枚举类型作为键的集合。

除了这些常见的实现类之外,还可以通过继承AbstractMap类或实现Map接口来创建自定义的Map实现类。下面举例说明Map接口的用法:

  1. 创建Map并添加键值对:
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
  1. 获取键对应的值:
int appleValue = map.get("apple"); //获取键"apple"对应的值
  1. 判断是否包含键:
boolean containsKey = map.containsKey("apple"); //判断是否包含键"apple"
  1. 判断是否包含值:
boolean containsValue = map.containsValue(1); //判断是否包含值1
  1. 删除键值对:
map.remove("apple"); //删除键"apple"对应的键值对
  1. 遍历键值对:
for(Map.Entry<String, Integer> entry : map.entrySet()){String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " : " + value);
}Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while(iterator.hasNext()){Map.Entry<String, Integer> entry = iterator.next();String key = entry.getKey();Integer value = entry.getValue();System.out.println(key + " : " + value);
}

需要注意的是,Map接口中的键是唯一的,不允许重复,如果重复添加相同的键,后面的值会覆盖前面的值。另外,LinkedHashMap是Map接口的有序实现类,它会根据元素的插入顺序进行排序。

五. Queue接口:

Queue接口是集合框架中用于表示队列的接口,它继承自Collection接口。Queue接口支持元素的插入和移除操作,Queue接口的常见实现类有:

  1. LinkedList:基于双向链表实现的队列,可以作为Queue接口的实现类。

  2. ArrayDeque:基于数组实现的双端队列,也可以作为Queue接口的实现类。

  3. PriorityQueue:基于优先级堆实现的队列,可以根据元素的优先级进行插入和删除操作。注意,它不是严格意义上的队列,因为删除元素时不一定按照插入的顺序进行。

  4. ConcurrentLinkedQueue:线程安全的非阻塞队列,基于链表实现,支持多线程并发操作。
    除了这些常见的实现类之外,还可以通过继承AbstractQueue类或实现Queue接口来创建自定义的Queue实现类。下面举例说明Queue接口的用法:

  5. 创建Queue并添加元素:

Queue<Integer> queue = new LinkedList<>();
queue.offer(1); //插入元素1
queue.offer(2); //插入元素2
queue.offer(3); //插入元素3
  1. 获取并移除队列的头部元素:
int head = queue.poll(); //获取并移除队列的头部元素,此时head的值为1
  1. 获取但不移除队列的头部元素:
int head = queue.peek(); //获取但不移除队列的头部元素,此时head的值为2
  1. 判断队列是否为空:
boolean isEmpty = queue.isEmpty(); //判断队列是否为空,此时isEmpty的值为false
  1. 获取队列的大小:
int size = queue.size(); //获取队列的大小,此时size的值为2

需要注意的是,LinkedList实现了Deque接口,因此可以被当作双端队列使用。PriorityQueue是一个基于优先级堆的无界优先级队列,它根据元素的自然顺序或者指定的Comparator进行排序。

六. Stack类:

Stack类是Java中表示后进先出(LIFO)的堆栈的类,它继承自Vector类,实现了栈的基本操作。下面举例说明Stack类的用法:

  1. 创建Stack对象并添加元素:
Stack<Integer> stack = new Stack<>();
stack.push(1); //将元素1推入栈顶
stack.push(2); //将元素2推入栈顶
stack.push(3); //将元素3推入栈顶
  1. 获取并移除栈顶元素:
int top = stack.pop(); //获取并移除栈顶元素,此时top的值为3
  1. 获取但不移除栈顶元素:
int top = stack.peek(); //获取但不移除栈顶元素,此时top的值为2
  1. 判断栈是否为空:
boolean isEmpty = stack.isEmpty(); //判断栈是否为空,此时isEmpty的值为false
  1. 获取栈的大小:
int size = stack.size(); //获取栈的大小,此时size的值为2

需要注意的是,Stack类是线程安全的,但因为它继承自Vector类,所以性能上可能不如使用LinkedList实现的双端队列。因此,如果只需要使用栈的功能,推荐使用Deque接口的实现类LinkedList来代替Stack类。

七. Iterator接口:

用于迭代访问集合中的元素。
Iterator接口是Java中用于迭代访问集合中元素的接口,通过它可以依次访问集合中的每个元素。下面举例说明Iterator接口的用法:

  1. 创建Iterator对象并遍历集合:
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");Iterator<String> iterator = list.iterator(); //获取Iterator对象while (iterator.hasNext()) { //判断是否还有下一个元素String element = iterator.next(); //获取下一个元素System.out.println(element);
}

输出结果:

apple
banana
orange
  1. 在遍历过程中删除元素:
List<String> list = new ArrayList<>();
list.add("apple");
list.add("banana");
list.add("orange");Iterator<String> iterator = list.iterator(); //获取Iterator对象while (iterator.hasNext()) {String element = iterator.next();if (element.equals("banana")) {iterator.remove(); //删除当前元素}
}System.out.println(list);

输出结果:

[apple, orange]

需要注意的是,Iterator接口的迭代器是单向的,只能从前往后遍历,而且在遍历过程中不能修改集合的结构(除了使用Iterator的remove方法)。

Java SE中的集合框架提供了丰富的方法和工具类,可以方便地对集合进行操作和处理。它提供了高性能的数据结构,可以应对不同的应用场景和需求。

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

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

相关文章

汉语 - 如何描述人的外貌

描述人的外貌的词汇可以从不同的方面进行分类&#xff0c;包括整体印象、身材、脸部特征、发型、衣着等等。以下是一些常用的描述词汇&#xff1a; 整体印象 漂亮英俊帅气迷人优雅端庄普通平凡丑陋 身材 高大矮小修长瘦削健壮强壮丰满纤细肥胖 脸部特征 圆脸方脸瓜子脸鹅…

【Modelground】个人AI产品MVP迭代平台(4)——Mediapipe视频处理网站介绍

文章目录 介绍模型配置输入输出核心实现&#xff08;源码&#xff09;总结 介绍 这篇文章我将硬核介绍Modelground的第一个产品——Mediapipe视频处理&#xff01;网站入口为https://tryiscool.space/ml-video/&#xff0c;如图所示&#xff0c;欢迎体验。 tip: 由于服务器带宽…

卡尔曼滤波器例子

卡尔曼滤波器 卡尔曼滤波器(Kalman Filter)是一种用于线性系统状态估计的递归算法,可以有效地融合传感器数据和系统模型来估计系统的状态。它在机器人学中广泛应用,尤其是位置和速度等状态的估计。通过卡尔曼滤波器,可以有效地估计机器人在二维平面内的真实位置,并减小测…

javascript Array groupBy javascript中如何根据列表元素中的某个字段对列表进行分组操作?

文章目录 Introdemo参考 Intro 完整描述&#xff1a;SQL中有 group by xxx 的筛选方式。而在 javascript 中&#xff0c;如何实现以下需求&#xff1f; 根据某个列表元素中的某个条件(可能是多个字段)&#xff0c;将列表中的元素分成几组。 目前&#xff08;2024-06-09&#…

2024.6.9 三

类的运算符重载 我们很多时候对变量可以使用加减来操作,很方便实用 所以我们也想对类也进行类似的操作,比如 “” 定义为某两个量相加, " - " 定义为两个对象里某个列表长度相减等等 此时我们就需要用到运算符重载了 我们先来了解类的专有方法&#xff1a; *init : …

《经典图论算法》广度优先搜索

摘要&#xff1a; 1&#xff0c;广度优先搜索介绍 2&#xff0c;广度优先搜索的解题步骤 3&#xff0c;广度优先搜索的代码实现 1&#xff0c;广度优先搜索介绍 广度优先搜索(Breadth-first search&#xff0c;BFS)&#xff0c;又称宽度优先搜索&#xff0c;简单的说&#xff0…

赶紧收藏!2024 年最常见 20道分布式、微服务面试题(六)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道分布式、微服务面试题&#xff08;五&#xff09;-CSDN博客 十一、如何实现微服务之间的通信&#xff1f;有哪些常见的通信协议&#xff1f; 微服务架构是一种将应用程序作为一组小的服务来开发的方法&#xff…

把系统引导做到U盘,实现插上U盘才能开机

前言 有个小伙伴提出了这样一个问题&#xff1a;能不能把U盘制作成电脑开机的钥匙&#xff1f; 小白稍微思考了一下&#xff0c;便做了这样一个回复&#xff1a;可以。 至于为什么要思考一下&#xff0c;这样会显得我有认真思考他提出的问题。 Windows7或以上系统均支持UEF…

Flutter项目开发模版,开箱即用

前言 当前案例 Flutter SDK版本&#xff1a;3.22.2 每当我们开始一个新项目&#xff0c;都会 引入常用库、封装工具类&#xff0c;配置环境等等&#xff0c;我参考了一些文档&#xff0c;将这些内容整合、简单修改、二次封装&#xff0c;得到了一个开箱即用的Flutter开发模版…

memory动态内存管理学习之unique_ptr

此头文件是动态内存管理库的一部分。std::unique_ptr 是一种智能指针&#xff0c;它通过指针持有并管理另一对象&#xff0c;并在 unique_ptr 离开作用域时释放该对象。在发生下列两者之一时&#xff0c;用关联的删除器释放对象&#xff1a; 管理它的 unique_ptr 对象被销毁。…

YOLOv8 极简分割代码并输出各类别像素占比

文章目录 前言功能概述必要环境一、代码结构1. 参数定义2. 定义检测器类3. 计算各类别像素占比3.1 遍历每个检测到的目标3.2 获取当前目标的掩码和类别3.3 将掩码转换为整数多边形3.4 创建空白掩码图像并填充多边形3.5 计算掩码像素数3.6 计算掩码多边形的质心3.7 计算像素占比…

中证指数绿色金融

一、 绿色金融问题的方向 问题: 什么是绿色金融&#xff1f; 答案: 绿色金融是指支持环境改善、气候变化缓解和资源效率提升的金融活动&#xff0c;包括绿色信贷、绿色债券、绿色基金等。 问题: 绿色金融与ESG投资有何区别&#xff1f; 答案: ESG投资是一种考虑环境&#xff0…

发光二极管十大品牌

日常电路设计中&#xff0c;LED是必用的元器件之一&#xff0c;辅助判定电路异常。 十大发光二极管品牌-LED灯珠生产厂家哪家好-LED发光二极管厂家前十-Maigoo品牌榜

Zabbix6.0自定义监控项

文章目录 一、自定义监控整体流程二、自定义监控案例1、监控TCP 443端口案例2、监控服务器异地登入(带参监控项) 一、自定义监控整体流程 操作端流程备注Agent端1️⃣ linux&#xff1a;通过命令、脚本取出对应的值2️⃣ linux&#xff1a;根据zbx要求按照格式、编写配置文件、…

Sui Generis如何为艺术家弥合Web3的鸿沟

Sui Generis是一家于3月推出的NFT拍卖行&#xff0c;其联合创始人兼CEO Gab9说其愿景是——更好、更大、更强&#xff01; 表面上看&#xff0c;Sui Generis是备受欢迎的Tombheads NFT拍卖行的重新品牌化&#xff0c;该拍卖行今年早些时候从Fantom区块链迁移出来。但它于3月31…

WooYun-2016-199433 -phpmyadmin-反序列化RCE-getshell

参考资料&#xff1a; Phpmyadmin 脚本/设置.php反序列化漏洞 &#xff08;WooYun-2016-199433&#xff09;复现_phpmyadmin scriptssetup.php 反序列化漏洞-CSDN博客 https://blog.csdn.net/haoxue__/article/details/129368455利用pearcmd.php文件包含拿shell&#xff08;L…

找出链表倒数第k个元素-链表题

LCR 140. 训练计划 II - 力扣&#xff08;LeetCode&#xff09; 快慢指针。快指针臂慢指针快cnt个元素到最后&#xff1b; class Solution { public:ListNode* trainingPlan(ListNode* head, int cnt) {struct ListNode* quick head;struct ListNode* slow head;for(int i …

如何学习Golang语言!

第一部分&#xff1a;Go语言概述 起源与设计哲学&#xff1a;Go语言由Robert Griesemer、Rob Pike和Ken Thompson三位Google工程师设计&#xff0c;旨在解决现代编程中的一些常见问题&#xff0c;如编译速度、运行效率和并发编程。主要特点&#xff1a;Go语言的语法简单、编译…

人体部位眼耳手腿分类数据集4376张4类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;4376 分类类别数&#xff1a;4 类别名称:["Ears","Eyes&quo…

计算机组成刷题一轮(包过版)

搭配食用 计算机组成原理一轮-CSDN博客 目录 一、计算机系统概述 选择 计算机系统组成 冯诺依曼机 软件和硬件的功能 CPU等概念 计算机系统的工作原理 机器字长 运行速度 求MIPS 编译程序 机器语言程序 平均CPI和CPU执行时间 综合应用 存储程序原理 二…