TreeMap的用法

基于红黑二叉树实现,线程非安全,不允许键对象是null,key不可以重复,value允许重复,存入TreeMap的元素应当实现Comparable接口或者实现Comparator接口,会按照排序后的顺序迭代元素,默认升序,两个相比较的key不得抛出classCastException。主要用于存入元素的时候对元素进行自动排序,迭代输出的时候就按排序顺序输出。

1. 构造函数:

  1. 默认构造函数。使用该构造函数,TreeMap中的元素按照自然排序进行排列。
    TreeMap()
  2. 构造一个TreeMap,并将某个映射表中的所有条目添加到TreeMap中
    TreeMap(Map m)
  3. 构造一个TreeMap,并指定Tree的比较器的建进行排序
    TreeMap(Comparator comparator)
  4. 构造一个TreeMap,并将某个映射表中的所有条目添加到TreeMap中,并使用与给定的有序映射表相同的比较器
    TreeMap(SortedMap m)

2.常用方法:

1.public int size() 返回此映射中键 - 值映射的数量。
2.public boolean containsKey(Object key) 如果此映射包含指定键的映射,则返回true。

  1. public boolean containsValue(Object value) 如果此映射将一个或多个键映射到指定值,则返回true。
public class Test {
    public static void main(String[] args) {
        TreeMap map = new TreeMap<>();
        map.put(1, null);
        map.put(10, 1);
        map.put(3, 2);
        map.put(2, 3);
        System.out.println(map.size());//4
        System.out.println(map.containsKey(1));//true
       System.out.println(map.containsValue(4));//false
    }
}
  1. public K ceilingKey(K key) 如果不存在这样的键在方法调用返回的最小键大于或等于键,则返回null。
public static void main(String[] args) {
      TreeMap treemap = new TreeMap();
      treemap.put(2, "two");
      treemap.put(1, "one");
      treemap.put(3, "three");
      treemap.put(6, "six");
      treemap.put(5, "five");
      
      System.out.println(treemap.ceilingKey(4));//5
      System.out.println( treemap.ceilingKey(5));//5
      System.out.println( treemap.ceilingKey(7));//null
   }    
}
  1. public Object clone() 返回集合的副本
public class Test {
    public static void main(String[] args) {
        TreeMap map = new TreeMap<>();
        map.put(10, "Geeks");
        map.put(15, "4");
        map.put(20, "Geeks");
        map.put(25, "Welcomes");
        map.put(30, "You");
        // Displaying the TreeMap
        System.out.println(map);
        System.out.println(map.clone());
    }
}
输出:
{10=Geeks, 15=4, 20=Geeks, 25=Welcomes, 30=You}
{10=Geeks, 15=4, 20=Geeks, 25=Welcomes, 30=You}

6.public Comparator comparator() 方法调用返回用于排序在这个映射上,或者为null键,如果此映射使用键的自然顺序比较

  public static void main(String[] args) {
     TreeMap map = new TreeMap();
      
      // populating tree map
      map.put(2, "two");
      map.put(1, "one");
      map.put(3, "three");
      map.put(6, "six");
      map.put(5, "five");
      Comparator comp = treemap.comparator();
      System.out.println("Comparator value: "+ comp);     
   }    
} 
输出:
Comparator value: null

7 Map.Entry ceilingEntry(K key) 查找大于等于参数key的map里包含的最小key或entry,没有就返回null

public static void main(String[] args) {
        TreeMap map = new TreeMap<>();
        map.put(10, "Geeks");
        map.put(15, "4");
        map.put(20, "Geeks");
        map.put(25, "Welcomes");
        map.put(30, "You");
        System.out.println(map.ceilingEntry(10));//10=Geeks
        System.out.println( map.ceilingEntry(15));//15=4
    }
  1. public void clear()从此映射中删除所有映射。此调用返回后,映射将为空。
public static void main(String[] args) {
        TreeMap map = new TreeMap<>();
        map.put(10, "Geeks");
        map.put(15, "4");
        map.put(20, "Geeks");
        map.put(25, "Welcomes");
        map.put(30, "You");
        map.clear();
        System.out.println(map);//{}

    }

3.遍历方法:

  1. 用TreeMap的keySet()方法,生成的对象是由key对象组成的Set,再利用TreeMap的get(key)方法,得到对应的value值
public static void main(String[] args) {
        TreeMap map = new TreeMap<>();
        map.put(10, "Geeks");
        map.put(15, "4");
        map.put(20, "Geeks");
        map.put(25, "Welcomes");
        map.put(30, "You");
         Iterator it = map.keySet().iterator();
            while (it.hasNext()) 
                System.out.println(map.get(it.next()));
           }
    }
输出:      
Geeks
4
Geeks
Welcomes
You

2.利用entrySet()

TreeMap map = new TreeMap<>();
        map.put(1, null);
        map.put(10, 1);
        map.put(3, 2);
        map.put(2, 3);
        for(Entry entry:map.entrySet())
        {
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
输出:
1:null
2:3
3:2
10:1

你可能感兴趣的:(TreeMap的用法)