Основным слоем деревья является Keyset () TreeMap's Keyset (), а TreeMap реализуется на основе красных и черных деревьев. Красные и черные деревья являются сбалансированным бинарным деревом поиска, которое может гарантировать, что разница в высоте между левыми и правыми поддереями любого узла не превысит один вдвое больше, чем у более короткого дерева.
TreeMap отсортируется по ключам, поэтому элементы в деревьях также отсортированы. Очевидно, что метод сравнения () должен быть вызван, когда элемент вставляется в деревья, поэтому элементы в деревьях должны реализовать сопоставимый интерфейс. Treesset как набор, он не позволяет появляться дубликаты элементов. Treeset использует CompareTo () для оценки дублирующих элементов, а не равных (), см. Следующий код.
Импорт java.util.treeset; import org.junit.test; открытый класс Testtreeset {Class Combine реализует сопоставимые <Combine> {private int p1; private int p2; public combine (int p1, int p2) {this.p1 = p1; this.p2 = P2;}@public public int hashcode () {return p1 + p2; equals (Object obj) {System.out.print ("как равен" + this + "и" + obj); boolean rect = false; if (obj instanceof combine) {System.out.println ("Равное" + this + "и" + obj); комбинировать другие = (combine) obj; rect = (this.p1 == Другое. Другое.getp2 ());} System.out.println (":" + rect); return rect;}@переопределить публичный int compareto (combine o) {system.out.print ("compare" + this + "и" + o); // только рассмотреть p1if (this.p1 <o.p1) {system.out.out.out.out.print > o.p1) {system.out.println (", return 1"); return 1;} else {System.out.println (", return 0"); return 0;}}@переопределить публичную строку toString () {return "(" + p1 + "," + p2 + ")";} public getp1 () {return p1; {this.p1 = p1;} public int getp2 () {return p2;} public void setp2 (int p2) {this.p2 = p2;}}@test public void -тест () {комбинация c1 = new Combine (1, 2); комбинировать C2 = новый комбинат (1, 2); Combine c3 = новая комбинация (1, 3); 3); 2); reeset <Combine> set = new Treeset <Combine> (); set.add (c1); set.add (c2); set.add (c3); set.add (c4); while (! set.isempty ()) {// выводить элементы в деревьях в порядке combine combine = set.pollfirst (); system.out.println (combine.getp1 () + "/t" + combine.getp2 ());}}}}}}}}}}}}}Выход:
Сравните (1,2) и (1,2), возврат 0
Сравните (1,2) и (1,2), возврат 0
Сравните (1,3) и (1,2), возврат 0
Сравните (5,2) и (1,2), возврат 1
1 2
5 2
Мы видим, что независимо от того, возвращает ли сравнение () равным или нет, метод equals () не вызывается.
Суммировать
Выше приведено, что касается анализа повторяющихся элементов и примеров кода. Я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!