返回
Java Collections Framework 源码分析(5.1 - Map、TreeMap、红黑树)
闲谈
2023-10-01 15:14:37
在Java Collections Framework中,Map是一个非常重要的数据结构。它通过key-value的方式存储数据,可以根据key快速检索到对应的value。TreeMap是Map的一个实现类,它使用红黑树作为底层数据结构,具有高效的查找、插入和删除性能。
Map
Map是一个存储key-value对的集合。它允许用户通过key快速查找对应的value。Map有许多实现类,其中最常见的是HashMap和TreeMap。
HashMap 是Map的一个实现类,它使用哈希表作为底层数据结构。哈希表是一种基于key的快速查找算法。HashMap的平均时间复杂度为O(1),最坏情况下的时间复杂度为O(n)。
TreeMap 是Map的另一个实现类,它使用红黑树作为底层数据结构。红黑树是一种平衡二叉树,具有高效的查找、插入和删除性能。TreeMap的时间复杂度为O(log n)。
TreeMap的底层数据结构:红黑树
红黑树是一种平衡二叉树,它满足以下性质:
- 每个节点都是红色或黑色。
- 根节点是黑色。
- 每个红色节点的子节点都是黑色。
- 每个节点到其后代叶节点的黑色节点数相同。
红黑树的性质保证了它具有高效的查找、插入和删除性能。
Map和TreeMap的用法
Map和TreeMap都可以用来存储key-value对。Map的key可以是任意对象,value也可以是任意对象。TreeMap的key必须是可比较的,value可以是任意对象。
Map和TreeMap的用法非常简单。下面是一个使用Map存储学生信息的示例:
Map<String, Student> students = new HashMap<>();
students.put("张三", new Student("张三", 18));
students.put("李四", new Student("李四", 19));
students.put("王五", new Student("王五", 20));
Student student = students.get("张三");
System.out.println(student.getName()); // 张三
下面是一个使用TreeMap存储学生信息的示例:
TreeMap<String, Student> students = new TreeMap<>();
students.put("张三", new Student("张三", 18));
students.put("李四", new Student("李四", 19));
students.put("王五", new Student("王五", 20));
Student student = students.get("张三");
System.out.println(student.getName()); // 张三
结论
Map和TreeMap都是非常有用的数据结构。Map具有高效的查找性能,而TreeMap具有高效的查找、插入和删除性能。在实际项目中,我们可以根据需要选择使用Map或TreeMap。