首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java集合,关于【List、Set、Map】

哈希值相同 equals 为 false 的元素是怎么存储呢,就是在同样的哈希值下顺延(可以认为哈希值相同的元素放在一个哈希桶中)。也就是哈希一样的存一列。...3.2、TreeSet TreeSet() 是使用二叉树的原理对新 add() 的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置。...如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。...4、Map 4.1、HashMap HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。...这样做的意义或者好处就是 LinkedHashSet 中的元素顺序是可以保证的,也就是说遍历序和插入序是一致的 如果文章有错的地方欢迎指正,大家互相留言交流。

1K00

Java 基础(五)——集合源码解析 Set

基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。...好了,找到根源了,其实 TreeMap 也没什么特点,红黑树是二叉树的一种优化,TreeMap后面在 Map 集合中也会单独讲。 好了,TreeSet 就介绍到这里吧。...此链接列表定义了迭代顺序,即按照将元素插入到 set 中的顺序(插入顺序)进行迭代。...此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。 没什么意思,都是基于 Map 做的实现。...对了,提一句,这里 LinkedHashSet 的有序和 TreeSet 的有序不是一个概念,LinkedHashSet 指插入的元素按照先后顺序,TreeSet 指插入的元素按照一定的比较顺序插入某个固定的位置

43910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    面试系列之-JAVA集合梳理(JAVA基础)

    在列表中索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。这样做的好处就是可以通过较低的代价在List中进行插入和删除操作。与ArrayList一样,LinkedList也是非同步的。...在长度为n的列表中,有n+1个有效的索引值,从0到n(包含); 集合框架之外的Map接口 Map将键映射到值的对象,一个映射不能包含重复的键;每个键最多只能映射一个值;Map接口是Dictionary...(字典)抽象类的替代品; Map接口提供三种collection视图,允许以键集、值集合或键-值映射关系集的形式查看某个映射的内容。...,该哈希表将键映射到相应的值,任何非null对象都可以用作键或值; LinkedHashMap:LinkedHashMap是HashMap的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,...LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

    17910

    java各种集合类区别

    最近面试经常遇到java集合类的问题,上网搜了一下,做个笔记 百度的图 集合类型主要有3种:set(集)、list(列表)和map(映射)。...要求:要求存在在哈希表中的对象元素都得覆盖equals和hashCode方法。...Map总结: java的Map(映射)是一种把键对象和值对象进行映射的集合,其中每一个元素都包含了键对象和值对象,其中值对象也可以是Map类型的数据,因此,Map支持多级映射,Map中的键是唯一的,但值可以不唯一...,就会采用红黑树来存储该位桶的数据(在阈值之前还是使用链表来进行存储),所以,哈希表的实现包括数组+链表+红黑树,在使用哈希表的集合中我们都认为他们的增删改查操作的时间复杂度都是O(1)的,不过常数项很大...TreeMap基于红黑树(Red-Black tree)实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

    53320

    Java集合框架

    ,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间 LinkedHashMap: LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成...5 Map Map 接口存储一组键值对象,提供key(键)到value(值)的映射。 6 Map.Entry 描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。...5 Properties Properties 继承于 Hashtable,表示一个持久的属性集,属性列表中每个键及其对应值都是一个字符串。...另外,HashTable 基本被淘汰,不要在代码中使用它; 对Null key 和Null value的支持: HashMap 中,null 可以作为键,这样的键只有一个,可以有一个或多个键所对应的值为...也就是说 HashMap 总是使用2的幂作为哈希表的大小,后面会介绍到为什么是2的幂次方。

    1K10

    【进击面试_01】Java 集合

    数组的缺点是每个元素之间不能有间隔,当数组大小不满足需要扩容时,就要将旧的数组复制到新的数组中。当从 ArrayList 的中间位置插入或者删除元素时,对数组进行复制、移动需要的代价比较高。...ArrayDeque 底层通过数组实现,为了满足可以同时在数组两端插入或删除元素的需求,该数组还必须是循环的,即循环数组,即数组的任何一点都可能被看作起点或者终点。另外,该容器不允许放入 null。...LinkedHashSet 需要维护元素的插入顺序,因此性能略低于 HashSet 的性能,但在迭代访问 Set 里的全部元素时将有很好的性能,因为它以链表来维护内部顺序。...虽然 LinkedHashSet 使用了链表记录集合元素的添加顺序,但 LinkedHashSet 依然是 HashSet,因此它依然不允许集合元素重复(由哈希表保证唯一性,链表保证存取一致)。...1.4 红黑树 1.4.1 什么是红黑树   普通的二叉查找树在进行插入和删除等可能会破坏树的平衡的操作时,可退化成链表,此时的增删查效率都会比较低下。

    39410

    HashSet源码剖析

    源码详情 /** 计算 key.hashCode() 并将较高的哈希位传播 (XOR) 到较低的哈希位。由于该表使用二次方掩码,因此仅在当前掩码上方的位数上变化的哈希集将始终发生冲突。...因为许多常见的哈希集已经合理分布(所以不会从传播中受益),并且因为我们使用树来处理箱中的大量碰撞,所以我们只是以最便宜的方式对一些移位进行 XOR 以减少系统损失,并合并最高位的影响,否则由于表边界,这些位永远不会在索引计算中使用...形参: 哈希 – 键的哈希 密钥 – 密钥 值 – 要放置的值 onlyIfAbsent – 如果为 true,则不更改现有值 逐出 – 如果为 false,则表处于创建模式。...当entry的数量超过capacity*load_factor时,容器将自动扩容并重新哈希。对于插入元素较多的场景,将初始容量设大可以减少重新哈希的次数。...所以,如果要将自定义的对象放入到HashMap或HashSet中,需要**@Override** hashCode()和equals()方法。

    8310

    数据结构思维 第十二章 `TreeMap`

    有几个原因可能需要另一个实现: 哈希可能很慢,所以即使HashMap操作是常数时间,“常数”可能很大。 如果哈希函数将键均匀分配给子映射,效果很好。...但设计良好的散列函数并不容易,如果太多的键在相同的子映射上,那么HashMap的性能可能会很差。 哈希表中的键不以任何特定顺序存储;实际上,当表增长并且键被重新排列时,顺序可能会改变。...对于某些应用程序,必须或至少保持键的顺序,这很有用。 很难同时解决所有这些问题,但是 Java 提供了一个称为TreeMap的实现: 它不使用哈希函数,所以它避免了哈希的开销和选择哈希函数的困难。...在下一节中,我将解释二进制搜索树如何工作,然后你将使用它来实现Map。另外,使用树实现时,我们将分析映射的核心方法的性能。...下一行显示如何将target与树中的键进行比较。按照get和containsKey的签名(名称和参数),编译器认为target是一个Object。

    36620

    JAVA常用API整理

    TreeSet 一种有序集 EnumSet 一种包含枚举类型值的集合 LinkedHashSet 一种可以记住元素插入次序的集 PriorityQueue 一种允许高效删除最小元素的集合 HashMap...一种存储键/值关联的数据结构 TreeMap 一种键值有序排列的映射表 EnumMap 一种键值属于枚举类型的映射表 LinkedHashMap 一种可以记住键/值项添加次序的映射表 WeakHashMap...AbstractSet是一个实现Set接口的抽象类,Set接口有三个具体实现类,分别是散列集HashSet、链式散列集LinkedHashSet和树形集TreeSet。...HashSet中的元素是没有被排序的,而LinkedHashSet中的元素可以按照它们插入规则集的顺序提取。...extends V> entries) 将键与对应的值关系插入到映射中 boolean containKey(Object key)boolean containValue(Object value)

    2K41

    JAVA集合:概述

    常用的就是 HashSet 和 TreeSet,它们的实现就是依赖于 HahsMap 和 TreeMap; Map,映射代表具有映射关系的键值对集合,键不能重复,值可以重复。...2、TreeSet(TreeMap实现) TreeSet 是使用二叉树的原理对新 add() 的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置; Integer...如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数 3、LinkHashSet(HashSet + LinkedHashMap实现) 对于 LinkedHashSet 而言,它继承于 HashSet...1、HashMap(数组 + 链表 + 红黑树实现) HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。...4、 LinkHashMap(记录插入顺序) 在使用 HashMap 的时候,可能会遇到需要按照当时 put 的顺序来进行哈希表的遍历。但我们知道 HashMap 中不存在保存顺序的机制。

    66530

    持续3分钟 - Java -10

    Java 集合 01 接口继承关系和实现 集合类存放于 Java.util 包中,主要有 3 种:set(集)、list(列表包含 Queue)和 map(映射)。 1....Iterator:迭代器,可以通过迭代器遍历集合中的数据。 3. Map:是映射表的基础接口。 ? 图片来自网络,侵删 02 List Java 的 List 是非常常用的数据类型。...哈希值相同 equals 为 false 的元素是怎么存储呢,就是在同样的哈希值下顺延(可以认为哈希值相 同的元素放在一个哈希桶中)。也就是哈希一样的存一列。...3.2 TreeSet TreeSet()是使用二叉树的原理对新 add()的对象按照指定的顺序排序(升序、降序),每增 加一个对象都会进行排序,将对象插入的二叉树指定的位置。...如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

    35110

    Java集合框架详解

    如果在中间插入元素时,由于后面的元素全部要后移一位,所以性能会比较差。 由于没有做并发访问控制,所以它是一个非线程安全的集合。允许重复元素或null元素。...它表现上是一个有序的集合,但内存中其实是无序保存。 由于原因,所以它插入的速度会很快,但是查询一个元素的速度较ArrayList速度慢很多。是一个非线程安全的集合。...Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。 从概念上而言,您可以将 List 看作是具有数值键的 Map。...本文将着重介绍核心 Java 发行套件中附带的 Map,同时还将介绍如何采用或实现更适用于您应用程序特定数据的专用 Map。...HashMap 往HashMap添加元素的时候,首先会调用键的hashCode方法得到元素的哈希码值,然后经过运算 就可以算出该元素在哈希表中的存储位置。 并允许使用 null 值和 null 键。

    74720

    Java-集合

    Set 接口常用实现类是 HashSet、LinkedHashSet 以及 TreeSet。Map是一个键值对集合,存储键、值和之间的映射。 Key无序,唯一;value 不要求有序,允许重复。...Map没有继承于Collection接口,从Map集合中检索元素时,只要给出键对象,就会返回对应的值对象。...,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间 LinkedHashMap:LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成...HashTable: 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的 TreeMap: 红黑树(自平衡的排序二叉树) ConcurrentHashMap是什么 ConcurrentHashMap...ConcurrentHashMap在1.8中的实现,相比于1.7的版本基本上全部都变掉了。首先,取消了Segment分段锁的数据结构,取而代之的是数组+链表(红黑树)的结构。

    37730

    Java集合泛型面试题(含答案)

    7、Map有什么特点 以键值对存储数据 元素存储循序是无序的 不允许出现重复键 8、集合类存放于 Java.util 包中, 主要有几 种接口 主要包含set(集)、 list(列表包含 Queue)和...哈希值相同 equals 为 false 的元素是怎么存储呢,就是在同样的哈希值下顺延(可以认为哈希值相同的元素放在一个哈希桶中)。也就是哈希一样的存一列。...15、什么是TreeSet(二叉树) TreeSet()是使用二叉树的原理对新 add()的对象按照指定的顺序排序(升序、降序),每增加一个对象都会进行排序,将对象插入的二叉树指定的位置。...如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数 16、说说LinkHashSet( HashSet+LinkedHashMap) 对于 LinkedHashSet 而言,它继承与 HashSet...17、HashMap(数组+链表+红黑树) HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。

    1.2K30

    (55) 容器类总结 计算机程序的思维逻辑

    HashSet还有一个子类LinkedHashSet可以按插入有序。还有一个针对枚举类型的实现类EnumSet,它基于位向量实现,效率很高。...HashMap还有一个子类LinkedHashMap,它可以按插入或访问有序。之所以能有序,是因为每个元素还加入到了一个双向链表中。...链表:LinkedList是用双向链表实现的,HashMap中映射到同一个链表数组的键值对是通过单向链表链接起来的,LinkedHashMap中每个元素还加入到了一个双向链表中以维护插入或访问顺序。...哈希表:HashMap是用哈希表实现的,HashSet, LinkedHashSet和LinkedHashMap基于HashMap,内部当然也是哈希表。...哈希算法:哈希表中键映射到链表数组索引的算法,算法要快,同时要尽量随机和均匀。

    80270

    Java集合框架综述,这篇让你吃透!

    Set接口有三个具体实现类,分别是散列集HashSet、链式散列集LinkedHashSet和树形集TreeSet。...---- 四、Map接口 Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。同时它也没有继承Collection。...LinkedHashMap是Map接口的哈希表和链接列表实现,具有可预知的迭代顺序。此实现提供所有可选的映射操作,并允许使用null值和null键。...如果多个线程同时访问链接的哈希映射,而其中至少一个线程从结构上修改了该映射,则它必须保持外部同步。...在Map 中插入、删除和定位元素,HashMap 是最好的选择。 TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。

    90330

    最全的集合干货送给大家

    大致上来说,尝试对不合格的元素进行操作,其完成的操作不会导致将不合格的元素插入到集合中。在实现中可以选择是当插入不合法元素时抛出异常还是仅仅只返回 false。...在 FIFO 队列中,所有新添加的元素都会插入到队列的末尾。 Offer 方法会在允许的情况下插入一个元素,否则返回 false。...所有插入到 SortedSet 中的元素都必须实现 Comparable 接口(或者接口定制的构造器)。...尝试插入不合格的键或值会引发未经检查的异常,比如 NullPointerException 或者 ClassCastException 尝试查询不合格的 key 或 value 也可能抛出异常,或者可能返回...Hashtable 类 Hashtable 类实现了一个哈希表,能够将键映射到值。任何非空对象都可以用作键或值。

    63610

    【数据结构】map&set详解

    当你需要确保集合中的元素唯一时。 当你不需要保持元素的插入顺序时(除非使用LinkedHashSet)。 当你需要元素自然排序或根据自定义排序规则排序时(使用TreeSet)。...1.1 HashSet 当用HashSet实例化对象时,由于底层结构是哈希表,所以元素是无序的,而TreeSet底层是红黑树,是有序的 由于Set系列集合里面不能有重复的元素,在之前我们也了解到,add...LinkedHashSet底层也是哈希表,但是存取元素的顺序是一致的,因为使用了双向链表记录添加顺序 1.3 TreeSet TreeSet是基于红黑树实现的,TreeSet中的元素处于排序状态,因此查找...,由于TreeSet底层是红黑树,所以最终也实现了排序的效果 比较器排序 问题:根据字符串长度比较,长度相同再按字典序比较 //o1:当前要添加的元素 //o2:红黑树中已经存在的元素...不同,HashMap中,当插入的key相同时,第二次插入会覆盖原来的value值,同时,如果存储的是自定义类型的对象还需要重写HashCode和equals方法 其他方法就不演示了,下面来介绍一下map

    12110

    Java 集合

    链表维护元素的插入次序 └ —————-TreeSet 底层实现为二叉树,元素排好序 Map 接口 键值对的集合 (双列集合) ├———Hashtable 接口实现类, 同步, 线程安全 ├———HashMap...接口实现类 ,没有同步, 线程不安全- │—————–├ LinkedHashMap 双向链表和哈希表实现 │—————–└ WeakHashMap ├ ——–TreeMap 红黑树对所有的key进行排序...底层数据结构采用链表和哈希表共同实现,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。..., Map 没有继承 Collection 接口, Map 提供 key 到 value 的映射,你可以通过“键”查找“值”。...一个 Map 中不能包含相同的 key ,每个 key 只能映射一个 value 。

    12710
    领券