Java中List、Set、Map的区别和实现方式示例代码

 更新时间:2023年06月19日 09:38:13   作者:daladalabao  
这篇文章主要介绍了Java中List、Set、Map的区别和实现方式示例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

Java中List、Set、Map的区别和实现方式

List

  • List 是一个有序的集合,即元素按照插入的顺序进行排序,可以有重复的元素。
  • 因为是有序的,所以可以根据下标来获取元素或者遍历整个集合内的元素。
  • 常用的实现类包括 ArrayList 和 LinkedList。

ArrayList

  • 底层是基于数组实现的,在内部维护了一个 Object[] 数组。
  • 当需要添加元素时,首先检查数组是否已满,如果未满,就直接在后面添加元素,否则需要通过扩容数组的方式来增加容量。
  • 由于数组长度固定且数组内的元素是连续的,因此查询某个元素的时间复杂度为 O(1),而添加或删除元素的时间复杂度为 O(n)(需要移动后面的元素)。

LinkedList

  • 底层是基于链表实现的,每个节点包含一个元素和指向下一个节点的引用。
  • 当需要添加(尾部添加O(1))或删除(删除头结点或者使用 iterator 的 remove 方法 O(1))元素时,只需要修改相邻节点之间的引用,不需要对其他元素进行移动。这使得 LinkedList 在添加或删除元素方面比 ArrayList 更快。
  • 由于没有连续的内存,并且需要遍历整个链表才能找到指定元素,因此查询某个元素的时间复杂度为 O(n),而添加或删除元素的时间复杂度为 O(1)。

Set

  • Set 是一个不允许有重复元素的集合,元素没有特定的顺序。
  • 可以用来判断某个元素是否在集合¥¥现过。
  • 常用的实现类包括 HashSet 和 TreeSet。

HashSet

  • 底层是基于 HashMap 来实现的,内部维护了一个 HashMap 实例作为其成员变量。
  • 添加元素时,将元素作为 key 存储在 HashMap 中,value 为一个固定的常量对象。
  • 由于 HashMap 底层使用了哈希表,因此可以快速查找某个元素是否已存在集合中,时间复杂度为 O(1)。
  • 不保证遍历顺序,也不保证插入顺序。

TreeSet

  • 底层是基于红黑树实现的,每个元素都必须实现 Comparable 接口或向构造函数传递一个 Comparator 对象。
  • 每个节点对应一个元素,且每个节点具有以下性质:
  • 如果一个节点有左子节点,则左子节点上的所有元素都比该节点上的元素小;
  • 如果一个节点有右子节点,则右子节点上的所有元素都比该节点上的元素大;
  • 左右子树自身都是一棵二叉搜索树。
  • 由于 TreeSet 底层采用了红黑树,因此平均情况下添加元素、删除元素、查找元素的时间复杂度都为 O(logn)。
  • 确保元素按升序排列,或者在创建时通过传递 Comparator 实例来自定义排序方式。

Map

  • Map 是一个键值对映射的集合,允许键和值都可以为 null,但键不能重复,值可以重复。
  • 可以用于存储一些关联性比较强的数据对象,例如电话簿、字典等。
  • 常用的实现类包括 HashMap 和 TreeMap。

HashMap

  • 底层也是基于哈希表来实现的,内部维护了一个数组,每个元素都是一个链表或树的首节点,用于解决哈希冲突。
  • 添加元素时,会根据 key 的 hash 值进行散列,然后找到对应的数组位置,如果该位置上已经存在元素,则以链表或树结构的形式将其插入。
  • HashMap 可以快速查找某个 key 对应的 value 是否存在集合中,时间复杂度为 O(1)(如果哈希函数设计得好)。
  • 遍历顺序和插入顺序都不保证。

TreeMap

  • 底层是基于红黑树实现的,每个键值对都被封装成一个 Entry 对象,按照键的自然顺序或指定 Comparator 排序。
  • TreeMap 中的所有元素都保证按照排序规则排列,在遍历 TreeMap 时可以获得有序的键值对列表。
  • 添加、删除、查找元素的时间复杂度都为 O(logn),其中 n 表示元素个数。
  • TreeMap 可以自定义排序方式,并且支持限制只允许包含实现了 Comparable 接口的键类型。

总结

List

List是Java集合框架中最基本和最常用的一种数据结构,它是有序集合,可以允许重复的元素。List提供了按照索引来插入、删除和获取指定位置上的元素等操作。

Java中List有很多实现类,比较常用的有:

  • ArrayList:基于数组实现,以及动态扩容。
  • LinkedList:基于链表实现,适合于频繁添加、删除元素操作。

Set

Set也是Java集合框架中的一种数据结构,它是由不同元素组合而成的无序集合,不允许有重复元素。Set的主要目的是为了消除重复元素。

Java中Set的实现类有:

  • HashSet:基于哈希表实现,可快速判断对象的唯一性。
  • TreeSet:基于红黑树实现,可以对元素排序并保证元素唯一性。
  • LinkedHashSet:基于哈希表和链表实现,保留插入时顺序并保证元素唯一性。

Map

Map也是Java集合框架中最常用的一种数据结构,它是由键值对组成的集合,每个键只能出现一次,而且每个键只能映射到一个值。

Java中Map有很多实现类,比较常用的有:

  • HashMap:基于哈希表实现,以键值对的形式进行存储和访问。
  • TreeMap:基于红黑树实现,可以对键进行排序并保证键的唯一性。
  • LinkedHashMap:基于哈希表和链表实现,按照插入顺序维护元素的次序。

到此这篇关于Java中List、Set、Map的区别和实现方式的文章就介绍到这了,更多相关java list set map区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot使用RestTemplate的示例详解

    SpringBoot使用RestTemplate的示例详解

    RestTemplate继承自InterceptingHttpAccessor并且实现了RestOperations接口,其中RestOperations接口定义了基本的RESTful操作,这些操作在RestTemplate中都得到了实现,这篇文章主要介绍了SpringBoot使用RestTemplate,需要的朋友可以参考下
    2023-05-05
  • SpringBoot实现统一日志上下文的实战指南

    SpringBoot实现统一日志上下文的实战指南

    这篇文章主要为大家详细介绍了SpringBoot实现统一日志上下文的相关方法,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解下
    2026-01-01
  • 浅析java实现数据加密问题

    浅析java实现数据加密问题

    本文通过实例代码给大家介绍了java实现数据加密问题,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-11-11
  • Java加密 消息摘要算法MAC实现详解

    Java加密 消息摘要算法MAC实现详解

    这篇文章主要介绍了Java 消息摘要算法MAC实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Spring Cloud 中自定义外部化扩展机制原理及实战记录

    Spring Cloud 中自定义外部化扩展机制原理及实战记录

    这篇文章主要介绍了Spring Cloud 中自定义外部化扩展机制原理及实战,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • 通过Java来测试JSON和Protocol Buffer的传输文件大小

    通过Java来测试JSON和Protocol Buffer的传输文件大小

    这篇文章主要介绍了通过Java来测试JSON和Protocol Buffer的传输文件大小,Protocol Buffer(文中简称Protobuffer)是谷歌开发的新的文件传输格式,需要的朋友可以参考下
    2015-12-12
  • JavaWeb实体类转为json对象的实现方法

    JavaWeb实体类转为json对象的实现方法

    这篇文章主要介绍了JavaWeb实体类转为json对象的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Java设计模式之构建者模式知识总结

    Java设计模式之构建者模式知识总结

    这几天刚好在复习Java的设计模式,今天就给小伙伴们全面总结一下开发中最常用的设计模式-建造者模式的相关知识,里面有很详细的代码示例及注释哦,需要的朋友可以参考下
    2021-05-05
  • JVM如何处理异常深入详解

    JVM如何处理异常深入详解

    异常处理的两大元素:抛出异常、捕获异常,非正常处理的两个方法。下面这篇文章主要给大家介绍了关于JVM如何处理异常的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2019-01-01
  • Spring Bean生命周期之Bean的实例化详解

    Spring Bean生命周期之Bean的实例化详解

    这篇文章主要为大家详细介绍了Spring Bean生命周期之Bean的实例化,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03

最新评论