Java集合
本文最后更新于 1862 天前,其中的信息可能已经有所发展或是发生改变。

Map

  • 主要用于存储健值对,根据键得到值,因此不允许键重复 (重复了就覆盖), 但允许值重复。java 为数据结构中的映射定义了一个接口 java.util.Map; 它有四个实现类,分别是 HashMap Hashtable LinkedHashMap 和 TreeMap.
  • Map 可以 put 同一个 key,后者覆盖前者
Map<String,String> map=new HashMap<>();
map.put("one","s1");
map.put("one","s2");
  • 遍历 Map,获取所有 key
    Set<Object> keSet = myMap.keySet();

Hashmap

  • HashMap 是一个最常用的 Map, 它根据键的 HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。
  • HashMap 最多只允许一条记录的键为 Null; 允许多条记录的值为 Null;
  • HashMap 不支持线程的同步,即任一时刻可以有多个线程同时写 HashMap; 可能会导致数据的不一致。如果需要同步,可以用 Collections 的 synchronizedMap 方法使 HashMap 具有同步的能力,或者使用 ConcurrentHashMap。
  • 哈希表的主干就是数组。
    比如我们要新增或查找某个元素,我们通过把当前元素的关键字 通过某个函数映射到数组中的某个位置,通过数组下标一次定位就可完成操作。
    哈希冲突,也叫哈希碰撞,HashMap 即是采用了链地址法,也就是数组 + 链表的方式。

Hashtable

  • Hashtable 与 HashMap 类似,它继承自 Dictionary 类
  • 它不允许记录的键或者值为空;
  • 它支持线程的同步,即任一时刻只有一个线程能写 Hashtable, 因此也导致了 Hashtable 在写入时会比较慢。

LinkedHashMap

  • LinkedHashMap 是 HashMap 的一个子类,保存了记录的插入顺序,在用 Iterator 遍历 LinkedHashMap 时,先得到的记录肯定是先插入的。也可以在构造时用带参数,按照应用次数排序。
  • 在遍历的时候会比 HashMap 慢,不过有种情况例外,当 HashMap 容量很大,实际数据较少时,遍历起来可能会比 LinkedHashMap 慢,因为 LinkedHashMap 的遍历速度只和实际数据有关,和容量无关,而 HashMap 的遍历速度和他的容量有关。

TreeMap

  • TreeMap 实现 SortMap 接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用 Iterator 遍历 TreeMap 时,得到的记录是排过序的。

一般情况下,我们用的最多的是 HashMap, 在 Map 中插入、删除和定位元素,HashMap 是最好的选择。但如果您要按自然顺序或自定义顺序遍历键,那么 TreeMap 会更好。如果需要输出的顺序和输入的相同,那么用 LinkedHashMap 可以实现,它还可以按读取顺序来排列。如果需要线程安全,那就要 HashTable。

作者:Yuyy
博客:https://yuyy.info
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇 12种Java中常用的语法糖深度解析