HashMap and TreeMap

本文简要介绍了两种Java集合框架中的映射实现:HashMap提供无序的键值对存储,而TreeMap则保持键的自然排序或由比较器定义的顺序。
除了 HashMapTreeMap 外,常见的存储键值对的 Map 类型还有以下几种: - **LinkedHashMap**:继承自 HashMap,它维护了一个双向链表,该链表定义了迭代顺序,默认是插入顺序,也可以是访问顺序。这意味着它可以按照插入的顺序或者访问的顺序来遍历元素。例如,在实现 LRU(Least Recently Used)缓存时,LinkedHashMap 就非常有用。 ```java import java.util.LinkedHashMap; import java.util.Map; public class LinkedHashMapExample { public static void main(String[] args) { LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<>(); linkedHashMap.put("one", 1); linkedHashMap.put("two", 2); linkedHashMap.put("three", 3); for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } } ``` - **Hashtable**:是 Java 早期提供的键值对存储类,它是线程安全的,这意味着多个线程可以同时访问和修改 Hashtable 而不会出现数据不一致的问题。但由于它的线程安全是通过对整个表加锁实现的,所以在多线程环境下性能较低。另外,Hashtable 不允许键或值为 null。 ```java import java.util.Hashtable; public class HashtableExample { public static void main(String[] args) { Hashtable<String, Integer> hashtable = new Hashtable<>(); hashtable.put("one", 1); hashtable.put("two", 2); hashtable.put("three", 3); System.out.println(hashtable.get("two")); } } ``` - **ConcurrentHashMap**:也是线程安全的 Map 实现,它是为多线程环境设计的。与 Hashtable 不同,ConcurrentHashMap 采用分段锁机制,将整个 Map 分成多个段(Segment),不同的线程可以同时访问不同的段,从而提高了并发性能。在 Java 8 及以后的版本中,ConcurrentHashMap 采用了 CAS(Compare-And-Swap)和 synchronized 来实现并发控制。 ```java import java.util.concurrent.ConcurrentHashMap; public class ConcurrentHashMapExample { public static void main(String[] args) { ConcurrentHashMap<String, Integer> concurrentHashMap = new ConcurrentHashMap<>(); concurrentHashMap.put("one", 1); concurrentHashMap.put("two", 2); concurrentHashMap.put("three", 3); System.out.println(concurrentHashMap.get("three")); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值