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));
// 输出结果
// 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));
//输出结果
//map.containsKey(node1) = true
//map.containsKey(node2) = false
基础类型,一条记录的内存大小是Key的大小加上Value的大小。
非基础类型, 一条记录的内存大小是 两个地址的大小, 一个地址8字节,key和value 共16字节
如果是 基础类型和非基础类型的混合类型的话,就是各自按照各自的方式计算
有序表会根据key的大小进行 升序排列 ,我们可以用他来做hashmap
中的所有操作,并且扩展出了,查找第一个key或者最后一个key的操作,也扩展出了查找小于某个区间的最大值和大于某个区间的最小值
所有操作时间复杂度都是O(logn)
Java
übergeben als ein Wert, nicht als Adresse. 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));
// a.equals( b ) = true
// intMap.get(a) = 111// intMap.get(b) = 111
aus dem obigen Falla! = b
, aberintMap.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 istO(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#🎜🎜#rrreeeDas 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!