HashMap和TreeMap都是Java中常用的Map接口的实现类,它们都可以存储键值对,并提供快速的查找、插入、删除操作。
HashMap的内部实现是由数组和链表(或红黑树)组成的。数组的每个元素都是一个链表(或红黑树),链表(或红黑树)中存储的是键值对。当发生哈希冲突时,新的键值对会被添加到链表(或红黑树)的尾部。当链表(或红黑树)中元素的个数超过了一个阈值时,链表(或红黑树)就会被转换成红黑树。这样可以保证HashMap的性能在最坏情况下也能达到O(log n)。
示例代码:
import java.util.HashMap;
import java.util.Map;
public class HashMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("apple", 3);
map.put("orange", 2);
map.put("banana", 1);
// 遍历键值对
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
// 删除键值对
map.remove("orange");
// 判断是否包含某个键
System.out.println(map.containsKey("apple"));
}
}
TreeMap的内部实现是由红黑树组成的。红黑树是一种自平衡的二叉搜索树,可以保证插入、删除、查找操作的时间复杂度都是O(log n)。在插入键值对时,TreeMap会按照键进行排序,这样可以保证遍历TreeMap时的顺序是按照键的顺序输出的。
示例代码:
import java.util.Map;
import java.util.TreeMap;
public class TreeMapExample {
public static void main(String[] args) {
Map<String, Integer> map = new TreeMap<>();
// 添加键值对
map.put("apple", 3);
map.put("orange", 2);
map.put("banana", 1);
// 遍历键值对
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
// 删除键值对
map.remove("orange");
// 判断是否包含某个键
System.out.println(map.containsKey("apple"));
}
}
在上面的示例代码中,我们先创建了一个TreeMap对象,然后添加了几个键值对。遍历键值对时,我们可以看到输出的顺序是按照键的顺序输出的。接着我们删除了一个键值对,然后判断是否包含某个键。可以看到,即使删除了一个键值对,TreeMap的内部仍然保持着有序状态。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。