Java TreeMap (с примери)

В този урок ще научим за класа Java TreeMap и неговите операции с помощта на примери.

В TreeMapкласа на колекции рамките на Java осигурява изпълнението на дървовидна структура на данните.

Той реализира интерфейса NavigableMap.

Създаване на TreeMap

За да създадем TreeMap, първо трябва да импортираме java.util.TreeMapпакета. След като импортираме пакета, ето как можем да създадем a TreeMapв Java.

 TreeMap numbers = new TreeMap(); 

В горния код създадохме TreeMapимена без никакви аргументи. В този случай елементите в TreeMapса сортирани по естествен път (възходящ ред).

Въпреки това можем да персонализираме сортирането на елементи, като използваме Comparatorинтерфейса. Ще научим за това по-късно в този урок.

Тук,

  • Ключ - уникален идентификатор, използван за свързване на всеки елемент (стойност) в карта
  • Стойност - елементи, свързани с ключове в карта

Методи на TreeMap

В TreeMapкласа предоставя различни методи, които ни позволяват да извършва операции върху картата.

Вмъкване на елементи в TreeMap

  • put() - вмъква посоченото картографиране на ключ / стойност (въвеждане) в картата
  • putAll() - вмъква всички записи от определена карта в тази карта
  • putIfAbsent() - вмъква посоченото картографиране на ключ / стойност в картата, ако посоченият ключ не присъства в картата

Например,

 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); ) ) 

Изход

 TreeMap на четни числа: (Четири = 4, Six = 6, Two = 2) TreeMap на числа: (Four = 4, One = 1, Six = 6, Two = 2) 

Достъп до елементи на TreeMap

1. Използване на entrySet (), keySet () и стойности ()

  • entrySet() - връща набор от всички съпоставяне на ключове / стойности (въвеждане) на дървесна карта
  • keySet() - връща набор от всички ключове на дървовидна карта
  • values() - връща набор от всички карти на дървесна карта

Например,

 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()); ) ) 

Изход

 TreeMap: (One = 1, Three = 3, Two = 2) Съпоставяне на ключ / стойност: (One = 1, Three = 3, Two = 2) Клавиши: (One, Three, Two) Стойности: (1, 3, 2 ) 

2. Използване на get () и getOrDefault ()

  • get()- Връща стойността, свързана с посочения ключ. Връща нула, ако ключът не е намерен.
  • getOrDefault()- Връща стойността, свързана с посочения ключ. Връща посочената стойност по подразбиране, ако ключът не е намерен.

Например,

 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); ) ) 

Изход

 TreeMap: (One = 1, Three = 3, Two = 2) Използване на get (): 3 Използване на getOrDefault (): 5 

Тук getOrDefault()методът не намира ключа Пет. Следователно връща определената стойност по подразбиране 5.

Премахнете елементите на TeeMap

  • remove(key) - връща и премахва записа, свързан с посочения ключ, от TreeMap
  • remove(key, value) - премахва записа от картата само ако посоченият ключ е свързан с посочената стойност и връща булева стойност

Например,

 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); ) ) 

Изход

TreeMap: (One = 1, Three = 3, Two = 2) Премахната стойност = 2 Премахнат ли е записът (Three = 3)? Вярно актуализирана карта на дървото: (Едно = 1)

Заменете елементите на TreeMap

  • replace(key, value) - замества стойността, картографирана от посочения ключ, с новата стойност
  • replace(key, old, new) - замества старата стойност с нова, само ако старата стойност вече е свързана с посочения ключ
  • replaceAll(function) - замества всяка стойност на картата с резултата от посочената функция

Например,

 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); ) ) 

Изход

 Оригинална TreeMap: (First = 1, Second = 2, Third = 3) TreeMap с помощта replace (): (First = 1, Second = 22, Third = 33) TreeMap using replaceAll (): (First = 3, Second = 24, Трето = 35) 

В горната програма забележете изявлението

 numbers.replaceAll((key, oldValue) -> oldValue + 2); 

Тук сме предали ламбда израз като аргумент.

В replaceAll()метода достъп до всички записи на картата. След това замества всички елементи с новите стойности (върнати от ламбда израза).

Методи за навигация

Тъй като TreeMapкласът изпълнява NavigableMap, той предоставя различни методи за навигация над елементите на дървесната карта.

1. Първи и последен методи

  • firstKey() - връща първия ключ на картата
  • firstEntry() - връща съпоставянето ключ / стойност на първия ключ на картата
  • lastKey() - връща последния ключ на картата
  • lastEntry() - връща съпоставянето ключ / стойност на последния ключ на картата

Например,

 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()); ) ) 

Изход

 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 map
  • pollLastEntry() - 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) 

В горния пример създадохме дървовидна карта, преминаваща клас CustomComparator като аргумент.

Класът CustomComparator изпълнява Comparatorинтерфейса.

След това заместваме compare()метода, за да сортираме елементи в обратен ред.

За да научите повече, посетете Java Comparator (официална документация за Java).

Интересни статии...