Java中常用的集合类简介

Java中的数据结构类别包括数组、链表、队列、栈、树等等,但是在使用这些数据结构时,需要我们自己实现一些操作,例如查找、插入、删除等等。为了方便使用,Java中提供了许多内置的集合类,可以帮助我们轻松地使用这些数据结构。

一、列表(List)

List是Java中最基本常用的集合类之一,它用于存储一组有序的元素。它有序、可以放重复元素,提供了一系列按索引位置访问元素、查找元素等方法,常见的实现类有ArrayList和LinkedList。

1. ArrayList

ArrayList是一个动态数组,当数组满了时,会自动扩充容量,所以它适用于那些需要插入和删除元素较少但需要随机访问元素的场合::

//创建ArrayList
ArrayList<String> list = new ArrayList<>();

//添加元素
list.add("a");
list.add("b");
list.add("c");

//查找元素
String s1 = list.get(1); //b

//删除元素
list.remove(0);

2. LinkedList

LinkedList是一个双向链表,它适用于那些需要频繁插入和删除元素但不需要随机访问元素的场合:

//创建LinkedList
LinkedList<String> list = new LinkedList<>();

//添加元素
list.add("a");
list.add("b");
list.add("c");

//查找元素
String s1 = list.get(1); //b

//删除元素
list.remove(0);

二、集合(Set)

Set集合是一种不允许重复元素的(Collections和Arrays集合都可以有重复元素),适合于不需要元素按任何顺序排列的使用场合。

1. HashSet

HashSet是最常用的一个Set实现类,基于HashMap实现,底层使用HashMap存储数据。它不保证元素的顺序,也不允许包含重复元素。

//创建HashSet
HashSet<String> set = new HashSet<>();

//添加元素
set.add("a");
set.add("b");
set.add("c");
set.add("a"); //重复元素

//查找元素
boolean b1 = set.contains("a");

//删除元素
set.remove("b");

2. TreeSet

TreeSet是基于TreeMap实现的,它提供有序的集合和排序功能,默认是自然排序。它不允许重复元素。

//创建TreeSet
TreeSet<String> set = new TreeSet<>();

//添加元素
set.add("c");
set.add("b");
set.add("a");

//查找元素
String s1 = set.first();  //a
String s2 = set.last();   //c

//删除元素
set.remove("b");

三、映射(Map)

Map用于存储键值对,可以根据键快速访问相应的值。Java中的Map有多种实现方式,如HashMap、TreeMap等等。

1. HashMap

HashMap是使用哈希表实现,可以以O(1)时间复杂度访问元素,而键值对的存储顺序是无序的。它不允许重复的键,但是允许多个键对应的值相同。

//创建HashMap
HashMap<String, Integer> map = new HashMap<>();

//添加键值对
map.put("Tom", 20);
map.put("Mike", 19);
map.put("Lucy", 18);

//查找值
Integer age = map.get("Tom"); //20

//删除键值对
map.remove("Mike");

2. TreeMap

TreeMap是使用红黑树实现的,按照键排列,默认是按照自然序排列,键必须实现Comparable接口或在创建时提供一个Comparator实例。

//创建TreeMap
TreeMap<String, Integer> map = new TreeMap<>();

//添加键值对
map.put("Tom", 20);
map.put("Mike", 19);
map.put("Lucy", 18);

//查找值
Integer age = map.get("Tom"); //20

//删除键值对
map.remove("Mike");

四、队列(Queue)

队列是一种先进先出(FIFO)的数据结构,尾部插入元素,头部弹出元素。

1. LinkedList

LinkedList不仅是List,同时也是Queue,其实它是一种双向队列 Double Ended Queue。

//创建队列
Queue<Integer> queue = new LinkedList<>();

//入队
queue.offer(1);
queue.offer(2);
queue.offer(3);

//出队
int i = queue.poll(); //1

2. PriorityQueue

优先队列是使用堆(heap)实现,每次操作的时间复杂度为O(logn),队头元素是当前堆中权值最小的元素(默认是自然序)。

//创建优先队列
PriorityQueue<Integer> queue = new PriorityQueue<>();

//入队
queue.offer(2);
queue.offer(1);
queue.offer(3);

//出队
int i = queue.poll(); //1

五、总结

本文主要介绍了Java中常用的集合类,包括List、Set、Map、Queue等。每种集合类都有其适用场景和特点,使用不同的集合类可以使我们的程序更加高效、简洁和易于维护。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/245591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 13:10
下一篇 2024-12-12 13:10

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Python 常用数据库有哪些?

    在Python编程中,数据库是不可或缺的一部分。随着互联网应用的不断扩大,处理海量数据已成为一种趋势。Python有许多成熟的数据库管理系统,接下来我们将从多个方面介绍Python…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29

发表回复

登录后才能评论