Java 中的 TreeMap put() 方法

Java 中的 TreeMap put() 方法

Java 中,TreeMap 类是基于红黑树实现的有序映射表,我们可以通过 put() 方法向 TreeMap 中添加键值对。本文将详细介绍 TreeMap put() 方法的使用方法及相关注意点。

TreeMap put() 方法基本用法

put() 方法用于将指定的键值对添加到 TreeMap 中,如果 TreeMap 中已经存在相同的键,则会将原值覆盖。put() 方法的语法如下:

V put(K key, V value)

其中,K 表示键的类型,V 表示值的类型。

示例代码:

TreeMap<Integer, String> map = new TreeMap<>();
map.put(1, "apple");
map.put(2, "banana");
map.put(3, "orange");
System.out.println(map);

输出结果:

{1=apple, 2=banana, 3=orange}

从输出结果可以看出,put() 方法将键值对按照键的自然顺序排序后存储,因此输出结果是有序的。

TreeMap put() 方法实现原理

put() 方法的实现是基于红黑树的算法。当添加一个新的键值对时,首先按照键的大小找到合适的位置插入新节点,然后进行红黑树的插入调整,确保插入节点后仍然满足红黑树的性质。

示例代码:

TreeMap<Integer, String> map = new TreeMap<>();
map.put(1, "apple");
map.put(2, "banana");
map.put(3, "orange");
map.put(4, "pear");
System.out.println(map);

输出结果:

{1=apple, 2=banana, 3=orange, 4=pear}

当添加新节点 4=pear 时,插入调整确保了红黑树的性质。

TreeMap put() 方法的注意点

键不能为 null

由于 TreeMap 中的键是有序的,因此无法存储键为 null 的键值对。如果尝试存储键为 null 的键值对,会抛出 NullPointerException 异常。

示例代码:

TreeMap<String, Integer> map = new TreeMap<>();
map.put(null, 1); // 抛出 NullPointerException 异常

值可以为 null

TreeMap 中的值可以为 null,但是在使用 valueOf() 方法时可能会出现 NullPointerException 异常。因此,在使用 TreeMap 时,建议避免将值设置为 null。

示例代码:

TreeMap<Integer, String> map = new TreeMap<>();
map.put(1, null);
String str = map.get(1);
Integer i = Integer.valueOf(str); // 抛出 NullPointerException 异常

关键字排序

在 TreeMap 中,关键字是按照自然排序的方式来排序的,因此,被存储的关键字需要实现 Comparable 接口,如果没有实现 Comparable 接口,需要在创建 TreeMap 时指定一个 Comparator 对象用于排序。

示例代码:

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

class PersonComparator implements Comparator<Person> {
    @Override
    public int compare(Person p1, Person p2) {
        return p1.getAge() - p2.getAge();
    }
}

public class Test {
    public static void main(String[] args) {
        TreeMap<Person, String> map = new TreeMap<>(new PersonComparator());
        map.put(new Person("Tom", 18), "Tom is 18 years old");
        map.put(new Person("Jack", 22), "Jack is 22 years old");
        map.put(new Person("Mike", 20), "Mike is 20 years old");
        System.out.println(map);
    }
}

输出结果:

{Tom is 18 years old=Person{name='Tom', age=18}, Mike is 20 years old=Person{name='Mike', age=20}, Jack is 22 years old=Person{name='Jack', age=22}}

从输出结果可以看出,使用 Comparator 对象指定了 TreeMap 中关键字的排序方式。

putAll() 方法

putAll() 方法用于将另一个 Map 中所有的键值对添加到当前的 TreeMap 中。如果添加的键值对与当前 TreeMap 中的键重复,则会覆盖原值。

示例代码:

Map<Integer, String> map1 = new HashMap<>();
map1.put(1, "apple");
map1.put(2, "banana");

Map<Integer, String> map2 = new HashMap<>();
map2.put(2, "lemon");
map2.put(3, "orange");

TreeMap<Integer, String> map = new TreeMap<>();
map.putAll(map1);
map.putAll(map2);
System.out.println(map);

输出结果:

{1=apple, 2=lemon, 3=orange}

从输出结果可以看出,putAll() 方法将两个 Map 中的键值对合并到了一起,并按照键的自然顺序排序后存储。

结论

本文主要介绍了 Java 中 TreeMap put() 方法的使用方法及相关注意点。通过本文的介绍,我们对 TreeMap 的操作更加熟悉,可以更加方便高效地使用 TreeMap 实现自己的需求。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程