天天看點

Java集合-Map接口-TreeMap和HashTable

Java集合->Map接口->TreeMap和HashTable

1. TreeMap

  • TreeMap和HashMap相比,同樣實作了Map接口;
  • HashMap效率高于TreeMap;
  • 在需要排序的Map時,選用TreeMap, TreeMap預設按Key自增的方式排序。
import java.util.Map;
import java.util.TreeMap;

public class MyTreeMap {
    public static void main(String[] args) {
        Map<Integer, String> mp = new TreeMap<>();
        mp.put(11,"aa");
        mp.put(13,"ab");
        mp.put(33,"cc");
        mp.put(6,"gg");

        for(Integer key : mp.keySet()){
            System.out.println(key + "-->" + mp.get(key));
            /**
             * 輸出結果按key自增輸出
            6-->gg
            11-->aa
            13-->ab
            33-->cc
             */
        }
        Map<Student, String> mp1 = new TreeMap<>();
        mp1.put(new Student(1006,"Ano",89),"Good");
        mp1.put(new Student(1002,"Charlie",99),"Great");
        mp1.put(new Student(1001,"Jackson",84),"Good");
        mp1.put(new Student(1004,"Babe",89),"Good");

        for(Student stu : mp1.keySet()){
            System.out.println(stu + "-->" + mp1.get(stu));
        }
    }
}

class Student implements Comparable<Student>{
    int id;
    String name;
    int score;
    public Student(int id, String name, int score){
        super();
        this.id = id;
        this.name = name;
        this.score = score;
    }

    @Override
    public String toString() {
        return this.id + "-->" + this.name + "-->" + this.score;
    }

    @Override
    public int compareTo(Student o) {
        //排序規則
        if(this.score > o.score){
            return 1;
        }else if(this.score < o.score){
            return -1;
        }else{
            if(this.id > o.id){
                return 1;
            }else if(this.id < o.id){
                return -1;
            }else{
                return 0;
            }
        }
    }
}
           

2. HashTable

  • HashTable與HashMap相比,HashTable線程安全,效率低;
  • HashMap線程不安全,效率高;
  • HashTable不允許Key或Value為null; HashMap允許Key或Value為null。