Java TreeSet
Вступление
TreeSet - одна из двух отсортированных коллекций (другая - TreeMap). TreeSet расширяет AbstractSet и реализует интерфейс NavigableSet. Он создает коллекцию, которая использует дерево для хранения. Объекты хранятся в отсортированном порядке возрастания в соответствии с естественным порядком. При желании вы можете создать TreeSet с помощью конструктора, который позволит вам предоставить коллекции свои собственные правила для того, каким должен быть порядок (вместо того, чтобы полагаться на порядок, определенный классом элементов), используя Comparable или Comparator.
Время доступа и поиска достаточно быстрое, что делает TreeSet отличным выбором для хранения большого количества отсортированной информации, которую нужно быстро найти. TreeSet может не использоваться, когда наше приложение требует изменения набора с точки зрения частого добавления элементов.
Конструкторы
TreeSet (); // Конструктор по умолчанию TreeSet (Коллекция <? Extends E> c); // TreeSet из коллекции C TreeSet (Comparator <? Super E> comp); // TreeSet с пользовательским порядком в соответствии с Comparator TreeSet (SortedSet <Х> сс); // TreeSet, который содержит элементы ss.
Важные методы класса TreeSet
метод | Описание |
---|---|
void add (Объект o) | Добавляет указанный элемент к этому набору, если его еще нет. |
void clear () | Удаляет все элементы из этого набора. |
Сначала объект () | Возвращает первый (самый низкий) элемент в данный момент в этом отсортированном наборе. |
Объект last () | Возвращает последний (самый высокий) элемент в данный момент в этом отсортированном наборе. |
логическое isEmpty () | Возвращает true, если этот набор не содержит элементов. |
логическое удаление (объект o) | Удаляет указанный элемент из этого набора, если он присутствует. |
SortedSetsubSet (Object fromElement, Object toElement) | Возвращает представление части этого набора, чьи элементы варьируются от fromElement, включительно, до toElement, эксклюзив. |
Java-код: перейти к редактору
import java.util.TreeSet;
public class TreeSetDemo {
public static void main(String[] args) {
TreeSet<String> playerSet = new TreeSet<String>();
playerSet.add("Sachin");
playerSet.add("Zahir");
playerSet.add("Mahi");
playerSet.add("Bhajji");
playerSet.add("Viru");
playerSet.add("Gautam");
playerSet.add("Ishant");
playerSet.add("Umesh");
playerSet.add("Pathan");
playerSet.add("Virat");
playerSet.add("Sachin"); // This is duplicate element so will not be added again
//below will print list in alphabetic order
System.out.println("Original Set:" + playerSet);
System.out.println("First Name: "+ playerSet.first());
System.out.println("Last Name: "+ playerSet.last());
TreeSet<String> newPlySet = (TreeSet<String>) playerSet.subSet("Mahi", "Virat");
System.out.println("Sub Set: "+ newPlySet);
}
}
Выход:
В приведенном выше примере мы создаем TreeSet объекта String. Класс String имеет сопоставимый интерфейс, реализованный библиотекой Java. Давайте подумаем о случае, когда нам нужно иметь собственные объекты для хранения в Set и упорядочение объектов в соответствии с нашим правилом. Приведенный ниже пример показывает игроков в крикет как объект, имеющий два свойства name и battingPosition. Мы хотим сохранить весь объект Cricketer в соответствии с определенной позицией ватина, что означает, что при выполнении итерации по коллекции мы получаем имена в соответствии с позициями ватина.
Java-код (Cricketer.java)
package treeset;
public class Cricketer {
private String name;
private int battingPosition;
Cricketer(String cricketerName, int cBattingPosition){
this.name = cricketerName;
this.battingPosition = cBattingPosition;
}
public String getName() {
return name;
}
public int getBattingPosition() {
return battingPosition;
}
}
CompareCricketer.java: Здесь мы определяем правила организации объектов Cricketer в TreeMap.
Java-код (CompareCricketer.java)
package treeset;
import java.util.Comparator;
public class CompareCricketer implements Comparator <Cricketer> {
@Override
public int compare(Cricketer arg0, Cricketer arg1) {
if(arg0.getBattingPosition() > arg1.getBattingPosition())
return 1;
else if (arg0.getBattingPosition() < arg1.getBattingPosition())
return -1;
else return 0;
}
}
Java-код:
package treeset;
import java.util.Iterator;
import java.util.TreeSet;
public class CustomTreeSetDemo {
public static void main(String[] args) {
TreeSet<Cricketer> playerSet = new TreeSet<Cricketer>(
new CompareCricketer());
playerSet.add(new Cricketer("Sachin", 1));
playerSet.add(new Cricketer("Zahir", 9));
playerSet.add(new Cricketer("Mahi", 7));
playerSet.add(new Cricketer("Bhajji", 8));
playerSet.add(new Cricketer("Viru", 2));
playerSet.add(new Cricketer("Gautam", 4));
playerSet.add(new Cricketer("Ishant", 10));
playerSet.add(new Cricketer("Umesh", 11));
playerSet.add(new Cricketer("Pathan", 5));
playerSet.add(new Cricketer("Virat", 3));
playerSet.add(new Cricketer("Raina", 6));
Iterator<Cricketer> it = playerSet.iterator();
while (it.hasNext()) {
System.out.println(it.next().getName());
}
}
}
Выход:
Резюме:
- TreeSet - сортированный класс коллекции
- Сортировка объектов в TreeSet в естественном порядке по умолчанию или мы можем предоставить ссылку на класс компаратора для настраиваемой сортировки.
- При работе с большим объемом данных доступ и поиск данных выполняются быстрее с TreeSet
Редактор кода Java:
Предыдущий: Java HashSet
Далее: Связанный Java HashSet
Новый контент: Composer: менеджер зависимостей для PHP , R программирования