返回

Java Collections Framework 源码分析(5.1 - Map、TreeMap、红黑树)

闲谈

在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。