Heim > Java > javaLernprogramm > Hauptteil

So implementieren Sie eine Java-Hash-Tabelle und eine geordnete Liste

WBOY
Freigeben: 2023-04-13 17:31:05
nach vorne
1350 Leute haben es durchsucht

    Hash-Tabelle (HashMap)

    Die zeitliche Komplexität der Hash-Abfrage beträgt O(1) code ><code>O(1)

    按值传递

    Character,Short,Integer,Long, Float,Double,String,Boolean,在java当中哈希表内部以值的形式传递,而不是一地址的形式传递。

    例如:

    HashMap<Integer, String> intMap = new HashMap<>();
    intMap.put(1234567, "111");
    Integer a = 1234567;
    Integer b = 1234567;
    System.out.println("a==b = " + (a == b));
    System.out.println("a.equals(b) = " + a.equals(b));
    System.out.println("intMap.get(a) = " + intMap.get(a));
    System.out.println("intMap.get(b) = " + intMap.get(b));
    Nach dem Login kopieren

    // 输出结果
    // a==b = false
    // a.equals(b) = true
    // intMap.get(a) = 111
    // intMap.get(b) = 111

    由上边的案例中 a!= b,但是intMap.get(a) == intMap.get(b).我们可以看出,在我们从hashmap里面查询或者操作某些值的话,是以值的形式去传递和匹配的,而不是以内存地址的形式去匹配。

    按址传递

    如果是非原生的类型的话,以内存地址的形式传递。例如:

    public static class Node {
        private int value;
        public Node(int value) {
            this.value = value;
        }
    }
    HashMap<Node, String> map = new HashMap<>();
    Node node1 = new Node(1);
    Node node2 = new Node(1);
    map.put(node1, "ziop");
    System.out.println("map.containsKey(node1) = " + map.containsKey(node1));
    System.out.println("map.containsKey(node2) = " + map.containsKey(node2));
    Nach dem Login kopieren

    //输出结果
    //map.containsKey(node1) = true
    //map.containsKey(node2) = false

    内存大小比较

    基础类型,一条记录的内存大小是Key的大小加上Value的大小。

    非基础类型, 一条记录的内存大小是 两个地址的大小, 一个地址8字节,key和value 共16字节

    如果是 基础类型和非基础类型的混合类型的话,就是各自按照各自的方式计算

    有序表(TreeMap)

    • 有序表会根据key的大小进行 升序排列 ,我们可以用他来做hashmap中的所有操作,并且扩展出了,查找第一个key或者最后一个key的操作,也扩展出了查找小于某个区间的最大值和大于某个区间的最小值

    • 所有操作时间复杂度都是O(logn)

      Wert übergeben

      Zeichen, kurz, ganzzahlig, lang, Gleitkomma, doppelt, Zeichenfolge, boolescher Wert, innerhalb der Hash-Tabelle in Java übergeben als ein Wert, nicht als Adresse.
    • Zum Beispiel:

      TreeMap<Integer, String> treeMap = new TreeMap<>();
      treeMap.put(3,"我是3 ");
      treeMap.put(0,"我是3 ");
      treeMap.put(7,"我是3 ");
      treeMap.put(2,"我是3 ");
      treeMap.put(5,"我是3 ");
      treeMap.put(9,"我是3 ");
      treeMap.put(1,"我是3 ");
      System.out.println("treeMap.containsKey(3) = "+treeMap.containsKey(3));
      System.out.println("treeMap.containsKey(6) = "+treeMap.containsKey(6));
      System.out.println("treeMap.get(3) = "+treeMap.get(3));
      treeMap.put(3,"他是3");
      System.out.println("treeMap.get(3) = "+treeMap.get(3));
      treeMap.remove(3);
      System.out.println("treeMap.get(3) = "+treeMap.get(3));
      treeMap.remove(3);
      System.out.println("treeMap.firstKey() = "+treeMap.firstKey());
      System.out.println("treeMap.lastKey() = "+treeMap.lastKey());
      //        返回 小于等于五 并且最近的 key
      System.out.println("treeMap.floorKey(5) = "+treeMap.floorKey(5));
      System.out.println("treeMap.floorKey(6) = "+treeMap.floorKey(6));
      //        返回 大于等于 4 并且最靠近的值
      System.out.println("treeMap.ceilingKey(4) = "+treeMap.ceilingKey(4));
      Nach dem Login kopieren

    • // Ausgabeergebnis
    // a==b = false

    // a.equals( b ) = true

    // intMap.get(a) = 111
    // intMap.get(b) = 111



    aus dem obigen Fall a! = b, aber intMap.get(a) == intMap.get(b) Wir können das sehen, wenn wir bestimmte Werte abfragen oder bearbeiten hashmap wird in Form eines Werts übergeben und abgeglichen, nicht in Form einer Speicheradresse.

    Übergabe nach Adresse


    Wenn es sich um einen nicht nativen Typ handelt, wird er in Form einer Speicheradresse übergeben. Zum Beispiel:
    //        存放非基础类型
    public static void main(String[] args) {
    TreeMap<Node, Integer> treeMap1 = new TreeMap<>();
    Node node3 = new Node(3);
    Node node4 = new Node(4);
    treeMap1.put(node3, 3);
    treeMap1.put(node4, 4);
    System.out.println("treeMap1.firstEntry().getValue() = " + treeMap1.firstEntry().getValue());
    System.out.println("treeMap1.lastEntry().getValue() = " + treeMap1.lastEntry().getValue());
    }
    public static class Node implements Comparable<Node> {
    private int value;
        public Node(int value) {
        this.value = value;
    }
            @Override
        public int compareTo(Node node) {
            return this.value - node.value; 
        }
    }
    Nach dem Login kopieren


    //Ausgabeergebnis
    //map.containsKey(node1) = true
    //map.containsKey(node2) = false#🎜 🎜 #

    Speichergrößenvergleich

    Basistyp, die Speichergröße eines Datensatzes ist die Größe des Schlüssels plus die Größe des Werts.

    Nicht-Basistyp, die Speichergröße eines Datensatzes entspricht der Größe von zwei Adressen, eine Adresse beträgt 8 Bytes, Schlüssel und Wert betragen insgesamt 16 Bytes

    #🎜🎜#Wenn ja ist ein Basistyp und für gemischte Typen von Nicht-Basistypen wird jeder auf seine eigene Weise berechnet #🎜🎜##🎜🎜#Geordnete Liste (TreeMap) #🎜🎜#
      #🎜🎜## 🎜🎜#Die geordnete Liste wird in aufsteigender Reihenfolge entsprechend der Größe des Schlüssels angeordnet. Wir können damit alle Vorgänge in hashmap ausführen und wurden erweitert Finden Sie den ersten oder letzten Schlüssel, auch erweitert, um den Maximalwert kleiner als ein bestimmtes Intervall und den Minimalwert größer als ein bestimmtes Intervall zu finden aller Operationen ist O(logn )Ebene. #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Wenn der Schlüssel jedoch kein Basistyp ist, kann er nicht direkt sortiert werden. Der Typ muss eine Sortierschnittstelle implementieren und über eine sortierbare Funktion verfügen. Oder übergeben Sie die Vergleichsmethode, wenn eine neue TreeMap #🎜🎜##🎜🎜##🎜🎜##🎜🎜#Speichergrundtypoperation #🎜🎜#rrreee#🎜🎜##🎜🎜#// Das Ausgabeergebnis ist wie folgt #🎜 🎜#//treeMap.containsKey(3) = true #🎜🎜#//treeMap.containsKey(6) = false #🎜🎜#//treeMap.get(3) = I am 3 #🎜🎜#// treeMap. get(3) = Er ist 3#🎜🎜#//treeMap.get(3) = null#🎜🎜#//treeMap.firstKey() = 0#🎜🎜#//treeMap.lastKey() = 9 #🎜 🎜#//treeMap.floorKey(5) = 5#🎜🎜#//treeMap.floorKey(6) = 5#🎜🎜#//treeMap.ceilingKey(4) = 5#🎜🎜##🎜🎜# #🎜 🎜#Nicht-Basisspeichertypen für Vorgänge#🎜🎜#rrreee

    Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine Java-Hash-Tabelle und eine geordnete Liste. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage