Dalam tutorial ini, kita akan belajar mengenai kelas Java TreeMap dan operasinya dengan bantuan contoh.
The TreeMap
kelas rangka koleksi Java menyediakan pelaksanaan struktur data pokok.
Ia melaksanakan antara muka NavigableMap.
Membuat Peta Pokok
Untuk membuat TreeMap
, kita mesti mengimport java.util.TreeMap
pakej terlebih dahulu. Setelah kami mengimport pakej, berikut adalah bagaimana kita dapat membuat TreeMap
di Java.
TreeMap numbers = new TreeMap();
Dalam kod di atas, kami telah membuat TreeMap
nombor bernama tanpa sebarang argumen. Dalam kes ini, elemen dalam TreeMap
disusun secara semula jadi (tertib menaik).
Walau bagaimanapun, kita dapat menyesuaikan penyortiran elemen dengan menggunakan Comparator
antara muka. Kami akan mengetahui mengenainya nanti dalam tutorial ini.
Di sini,
- Kunci - pengecam unik yang digunakan untuk mengaitkan setiap elemen (nilai) dalam peta
- Nilai - elemen yang berkaitan dengan kunci dalam peta
Kaedah Peta Pokok
The TreeMap
kelas menyediakan pelbagai kaedah yang membolehkan kita untuk melaksanakan operasi di atas peta.
Masukkan Elemen ke TreeMap
put()
- memasukkan pemetaan kunci / nilai yang ditentukan (entri) ke petaputAll()
- memasukkan semua entri dari peta yang ditentukan ke peta iniputIfAbsent()
- memasukkan pemetaan kunci / nilai yang ditentukan ke peta jika kunci yang ditentukan tidak terdapat dalam peta
Sebagai contoh,
import java.util.TreeMap; class Main ( public static void main(String() args) ( // Creating TreeMap of even numbers TreeMap evenNumbers = new TreeMap(); // Using put() evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); // Using putIfAbsent() evenNumbers.putIfAbsent("Six", 6); System.out.println("TreeMap of even numbers: " + evenNumbers); //Creating TreeMap of numbers TreeMap numbers = new TreeMap(); numbers.put("One", 1); // Using putAll() numbers.putAll(evenNumbers); System.out.println("TreeMap of numbers: " + numbers); ) )
Pengeluaran
TreeMap nombor genap: (Empat = 4, Enam = 6, Dua = 2) Peta Pokok nombor: (Empat = 4, Satu = 1, Enam = 6, Dua = 2)
Akses Elemen TreeMap
1. Menggunakan entrySet (), keySet () dan nilai ()
entrySet()
- mengembalikan sekumpulan semua pemetaan kunci / nilai (entri) peta jalankeySet()
- mengembalikan sekumpulan semua kunci peta pokokvalues()
- mengembalikan sekumpulan semua peta peta pokok
Sebagai contoh,
import java.util.TreeMap; class Main ( public static void main(String() args) ( TreeMap numbers = new TreeMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("TreeMap: " + numbers); // Using entrySet() System.out.println("Key/Value mappings: " + numbers.entrySet()); // Using keySet() System.out.println("Keys: " + numbers.keySet()); // Using values() System.out.println("Values: " + numbers.values()); ) )
Pengeluaran
Peta Pokok: (Satu = 1, Tiga = 3, Dua = 2) Pemetaan kunci / Nilai: (Satu = 1, Tiga = 3, Dua = 2) Kekunci: (Satu, Tiga, Dua) Nilai: (1, 3, 2 )
2. Menggunakan get () dan getOrDefault ()
get()
- Mengembalikan nilai yang berkaitan dengan kunci yang ditentukan. Mengembalikan nol jika kunci tidak dijumpai.getOrDefault()
- Mengembalikan nilai yang berkaitan dengan kunci yang ditentukan. Mengembalikan nilai lalai yang ditentukan jika kunci tidak dijumpai.
Sebagai contoh,
import java.util.TreeMap; class Main ( public static void main(String() args) ( TreeMap numbers = new TreeMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("TreeMap: " + numbers); // Using get() int value1 = numbers.get("Three"); System.out.println("Using get(): " + value1); // Using getOrDefault() int value2 = numbers.getOrDefault("Five", 5); System.out.println("Using getOrDefault(): " + value2); ) )
Pengeluaran
TreeMap: (Satu = 1, Tiga = 3, Dua = 2) Menggunakan get (): 3 Menggunakan getOrDefault (): 5
Di sini, getOrDefault()
kaedah tidak menemui kunci Lima. Oleh itu ia mengembalikan nilai lalai 5 yang ditentukan.
Keluarkan Elemen TeeMap
remove(key)
- mengembalikan dan membuang entri yang berkaitan dengan kunci yang ditentukan dari TreeMapremove(key, value)
- membuang entri dari peta hanya jika kunci yang ditentukan dikaitkan dengan nilai yang ditentukan dan mengembalikan nilai boolean
Sebagai contoh,
import java.util.TreeMap; class Main ( public static void main(String() args) ( TreeMap numbers = new TreeMap(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("TreeMap: " + numbers); // remove method with single parameter int value = numbers.remove("Two"); System.out.println("Removed value: " + value); // remove method with two parameters boolean result = numbers.remove("Three", 3); System.out.println("Is the entry (Three=3) removed? " + result); System.out.println("Updated TreeMap: " + numbers); ) )
Pengeluaran
TreeMap: (Satu = 1, Tiga = 3, Dua = 2) Nilai dikeluarkan = 2 Adakah entri (Tiga = 3) dikeluarkan? Peta Pokok yang Dikemaskini Benar: (Satu = 1)
Ganti Elemen TreeMap
replace(key, value)
- menggantikan nilai yang dipetakan oleh kunci yang ditentukan dengan nilai barureplace(key, old, new)
- menggantikan nilai lama dengan nilai baru hanya jika nilai lama sudah dikaitkan dengan kunci yang ditentukanreplaceAll(function)
- menggantikan setiap nilai peta dengan hasil fungsi yang ditentukan
Sebagai contoh,
import java.util.TreeMap; class Main ( public static void main(String() args) ( TreeMap numbers = new TreeMap(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); System.out.println("Original TreeMap: " + numbers); // Using replace() numbers.replace("Second", 22); numbers.replace("Third", 3, 33); System.out.println("TreeMap using replace: " + numbers); // Using replaceAll() numbers.replaceAll((key, oldValue) -> oldValue + 2); System.out.println("TreeMap using replaceAll: " + numbers); ) )
Pengeluaran
Peta Pokok Asal: (Pertama = 1, Kedua = 2, Ketiga = 3) Peta Pokok menggunakan ganti (): (Pertama = 1, Kedua = 22, Ketiga = 33) TreeMap menggunakan ganti All (): (Pertama = 3, Kedua = 24, Ketiga = 35)
Dalam program di atas perhatikan penyataannya
numbers.replaceAll((key, oldValue) -> oldValue + 2);
Di sini, kami telah menyampaikan ungkapan lambda sebagai hujah.
The replaceAll()
Cara mengakses semua entri peta. Ia kemudian menggantikan semua elemen dengan nilai baru (dikembalikan dari ungkapan lambda).
Kaedah untuk Navigasi
Sejak TreeMap
kelas dilaksanakan NavigableMap
, ia menyediakan pelbagai kaedah untuk menelusuri elemen peta jalan.
1. Kaedah Pertama dan Terakhir
firstKey()
- mengembalikan kunci pertama petafirstEntry()
- mengembalikan pemetaan kunci / nilai kunci pertama petalastKey()
- mengembalikan kunci terakhir petalastEntry()
- mengembalikan pemetaan kunci / nilai kunci terakhir peta
Sebagai contoh,
import java.util.TreeMap; class Main ( public static void main(String() args) ( TreeMap numbers = new TreeMap(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); System.out.println("TreeMap: " + numbers); // Using the firstKey() method String firstKey = numbers.firstKey(); System.out.println("First Key: " + firstKey); // Using the lastKey() method String lastKey = numbers.lastKey(); System.out.println("Last Key: " + lastKey); // Using firstEntry() method System.out.println("First Entry: " + numbers.firstEntry()); // Using the lastEntry() method System.out.println("Last Entry: " + numbers.lastEntry()); ) )
Pengeluaran
TreeMap: (First=1, Second=2, Third=3) First Key: First Last Key: Third First Entry: First=1 Last Entry: Third=3
2. Ceiling, Floor, Higher and Lower Methods
- higherKey() - Returns the lowest key among those keys that are greater than the specified key.
- higherEntry() - Returns an entry associated with a key that is lowest among all those keys greater than the specified key.
- lowerKey() - Returns the greatest key among all those keys that are less than the specified key.
- lowerEntry() - Returns an entry associated with a key that is greatest among all those keys that are less than the specified key.
- ceilingKey() - Returns the lowest key among those keys that are greater than the specified key. If the key passed as an argument is present in the map, it returns that key.
- ceilingEntry() - Returns an entry associated with a key that is lowest among those keys that are greater than the specified key. It an entry associated with the key passed an argument is present in the map, it returns the entry associated with that key.
- floorKey() - Returns the greatest key among those keys that are less than the specified key. If the key passed as an argument is present, it returns that key.
- floorEntry() - Returns an entry associated with a key that is greatest among those keys that are less than the specified key. If the key passed as argument is present, it returns that key.
For example,
import java.util.TreeMap; class Main ( public static void main(String() args) ( TreeMap numbers = new TreeMap(); numbers.put("First", 1); numbers.put("Second", 5); numbers.put("Third", 4); numbers.put("Fourth", 6); System.out.println("TreeMap: " + numbers); // Using higher() System.out.println("Using higherKey(): " + numbers.higherKey("Fourth")); System.out.println("Using higherEntry(): " + numbers.higherEntry("Fourth")); // Using lower() System.out.println("Using lowerKey(): " + numbers.lowerKey("Fourth")); System.out.println("Using lowerEntry(): " + numbers.lowerEntry("Fourth")); // Using ceiling() System.out.println("Using ceilingKey(): " + numbers.ceilingKey("Fourth")); System.out.println("Using ceilingEntry(): " + numbers.ceilingEntry("Fourth")); // Using floor() System.out.println("Using floorKey(): " + numbers.floorKey("Fourth")); System.out.println("Using floorEntry(): " + numbers.floorEntry("Fourth")); ) )
Output
TreeMap: (First=1, Fourth=6, Second=5, Third=4) Using higherKey(): Second Using higherEntry(): Second=5 Using lowerKey(): First Using lowerEntry(): First=1 Using ceilingKey(): Fourth Using ceilingEntry(): Fourth=6 Using floorkey(): Fourth Using floorEntry(): Fourth=6
3. pollFirstEntry() and pollLastEntry() Methods
pollFirstEntry()
- returns and removes the entry associated with the first key of the mappollLastEntry()
- returns and removes the entry associated with the last key of the map
For example,
import java.util.TreeMap; class Main ( public static void main(String() args) ( TreeMap numbers = new TreeMap(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); System.out.println("TreeMap: " + numbers); //Using the pollFirstEntry() method System.out.println("Using pollFirstEntry(): " + numbers.pollFirstEntry()); // Using the pollLastEntry() method System.out.println("Using pollLastEntry(): " + numbers.pollLastEntry()); System.out.println("Updated TreeMap: " + numbers); ) )
Output
TreeMap: (First=1, Second=2, Third=3) Using pollFirstEntry(): First=1 Using pollLastEntry(): Third=3 Updated TreeMap: (Second=2)
4. headMap(), tailMap() and subMap() Methods
headMap(key, booleanValue)
The headMap()
method returns all the key/value pairs of a treemap before the specified key (which is passed as an argument).
The booleanValue parameter is optional. Its default value is false
.
If true
is passed as a booleanValue, the method also includes the key/value pair of the key
which is passed as an argument.
For example,
import java.util.TreeMap; class Main ( public static void main(String() args) ( TreeMap numbers = new TreeMap(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); numbers.put("Fourth", 4); System.out.println("TreeMap: " + numbers); System.out.println("Using headMap() Method:"); // Using headMap() with default booleanValue System.out.println("Without boolean value: " + numbers.headMap("Fourth")); // Using headMap() with specified booleanValue System.out.println("With boolean value: " + numbers.headMap("Fourth", true)); ) )
Output
TreeMap: (First=1, Fourth=4, Second=2, Third=3) Using headMap() Method: Without boolean value: (First=1) With boolean value: (First=1, Fourth=4)
tailMap(key, booleanValue)
The tailMap()
method returns all the key/value pairs of a treemap starting from the specified key (which is passed as an argument).
The booleanValue is an optional parameter. Its default value is true
.
If false
is passed as a booleanValue, the method doesn't include the key/value pair of the specified key
.
For example,
import java.util.TreeMap; class Main ( public static void main(String() args) ( TreeMap numbers = new TreeMap(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); numbers.put("Fourth", 4); System.out.println("TreeMap: " + numbers); System.out.println("Using tailMap() Method:"); // Using tailMap() with default booleanValue System.out.println("Without boolean value: " + numbers.tailMap("Second")); // Using tailMap() with specified booleanValue System.out.println("With boolean value: " + numbers.tailMap("Second", false)); ) )
Output
TreeMap: (First=1, Fourth=4, Second=2, Third=3) Using tailMap() Method: Without boolean value: (Second=2, Third=3) With boolean value: (Third=3)
subMap(k1, bV1, k2, bV2)
The subMap()
method returns all the entries associated with keys between k1 and k2 including the entry of k1.
The bV1 and bV2 are optional boolean parameters. The default value of bV1 is true
and the default value of bV2 is false
.
If false
is passed as bV1, the method returns all the entries associated with keys between k1 and k2 without including the entry of k1.
If true
is passed as bV2, the method returns all the entries associated with keys between k1 and k2 including the entry of k2.
For example,
import java.util.TreeMap; class Main ( public static void main(String() args) ( TreeMap numbers = new TreeMap(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); numbers.put("Fourth", 4); System.out.println("TreeMap: " + numbers); System.out.println("Using subMap() Method:"); // Using subMap() with default booleanValue System.out.println("Without boolean value: " + numbers.subMap("Fourth", "Third")); // Using subMap() with specified booleanValue System.out.println("With boolean value: " + numbers.subMap("Fourth", false, "Third", true)); ) )
Output
TreeMap: (First=1, Fourth=2, Second=2, Third=3) Using subMap() Method: Without boolean value: (Fourth=4, Second=2) With boolean value: (Second=2, Third=3)
Other Methods of TreeMap
Method | Description |
---|---|
clone() | Creates a copy of the TreeMap |
containsKey() | Searches the TreeMap for the specified key and returns a boolean result |
containsValue() | Searches the TreeMap for the specified value and returns a boolean result |
size() | Returns the size of the TreeMap |
clear() | Removes all the entries from the TreeMap |
TreeMap Comparator
In all the examples above, treemap elements are sorted naturally (in ascending order). However, we can also customize the ordering of keys.
For this, we need to create our own comparator class based on which keys in a treemap are sorted. For example,
import java.util.TreeMap; import java.util.Comparator; class Main ( public static void main(String() args) ( // Creating a treemap with a customized comparator TreeMap numbers = new TreeMap(new CustomComparator()); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); numbers.put("Fourth", 4); System.out.println("TreeMap: " + numbers); ) // Creating a comparator class public static class CustomComparator implements Comparator ( @Override public int compare(String number1, String number2) ( int value = number1.compareTo(number2); // elements are sorted in reverse order if (value> 0) ( return -1; ) else if (value < 0) ( return 1; ) else ( return 0; ) ) ) )
Output
TreeMap: (Third=3, Second=2, Fourth=4, First=1)
Dalam contoh di atas, kami telah membuat peta jalan lulus kelas CustomComparator sebagai argumen.
Kelas CustomComparator melaksanakan Comparator
antara muka.
Kami kemudian menolak compare()
kaedah untuk menyusun elemen dalam urutan terbalik.
Untuk mengetahui lebih lanjut, kunjungi Java Comparator (dokumentasi Java rasmi).