java TreeSet - не удаляйте повторяющиеся элементы
TreeSet удаляет различные элементы с одинаковым значением Comprator. Я не хочу, чтобы его убрали. Есть ли способ контролировать это? Или использовать другой класс контейнера?
добавил: ЛАДНО. Кажется, я не могу использовать Set. Мне нужно вставить функцию сортировки, для рассмотрения производительности. Может ли лист это сделать? Спасибо всем.
5 ответов
набор по определению не может иметь повторяющихся записей.
поэтому вам нужно использовать список или массив или такой
даже это набор, это все еще сбивает с толку, потому что объекты разные. Например,Set<E>
различных объектов E
некоторые объекты при преобразовании в TreeSet<E>
на основе Comparator<E>
используется. В обоих случаях, это набор, но набор хранимых элементов будет отличаться. На мой взгляд, это не совсем ясно в документах.
простое решение, если вы можете изменить компаратор, пусть он не возвращает 0. Например, вместо из:
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
использование:
public int compare(Integer o1, Integer o2) {
return o1 < o2 ? -1: 1;
}
основная цель Set
это не продублирую.
Вы либо не хотите Set
или вам нужен другой Comparator
.
Если вы хотите SortedList, вы можете, например, взять список и вручную вызвать коллекции.сортировка () после каждой вставки.
или вы обертываете, например, ArrayList, чтобы обеспечить сортировку-вызовы для вас:
class SortedArrayList extends ArrayList<String> {
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void add(int index, String element) {
super.add(index, element);
Collections.sort(this);
}
@Override
public boolean add(String element) {
boolean returnValue = super.add(element);
Collections.sort(this);
return returnValue;
}
@Override
public boolean addAll(Collection<? extends String> c) {
boolean returnValue = super.addAll(c);
Collections.sort(this);
return returnValue;
}
@Override
public boolean addAll(int index, Collection<? extends String> c) {
boolean returnValue = super.addAll(index, c);
Collections.sort(this);
return returnValue;
}
@Override
public String set(int index, String element) {
String returnValue = super.set(index, element);
Collections.sort(this);
return returnValue;
}
}
Я надеюсь, что у меня есть все функции, которые могут потребовать сортировки. (Удалить не обязательно переопределять)