Lapisan TreeSet yang mendasari adalah Keyset () Treeemap, dan TreeMap diimplementasikan berdasarkan pohon merah dan hitam. Pohon merah dan hitam adalah pohon pencarian biner yang seimbang, yang dapat memastikan bahwa perbedaan tinggi antara subtree kiri dan kanan dari simpul apa pun tidak akan melebihi satu dua kali dengan pohon yang lebih pendek.
TreeMap diurutkan berdasarkan kunci, sehingga elemen -elemen di Treeset juga diurutkan. Jelas, metode compareto () harus dipanggil ketika elemen dimasukkan ke dalam treeset, sehingga unsur -unsur di treeset harus mengimplementasikan antarmuka yang sebanding. Treeset sebagai satu set, itu tidak memungkinkan elemen duplikat muncul. TreeSet menggunakan compareto () untuk menilai elemen duplikat, bukan sama (), lihat kode berikut.
import java.util.TreeSet;import org.junit.Test;public class TestTreeSet {class Combine implements Comparable<Combine> {private int p1;private int p2;public Combine(int p1, int p2) {this.p1 = p1;this.p2 = p2;}@Override public int hashCode() {return p1 * 31 + p2;}@Override public Boolean sama (objek obj) {System.out.print ("apakah sama" + ini + "dan" + obj); boolean rect = false; if (instance combine) {system.out.println ("apakah sama" + ini + "dan" + obj); gabungan lain = (gabungan) obj; rect = (this. Other.getp2 ());} system.out.println (":" + rect); return rect;}@override public int compareto (gabungan o) {System.out.print ("bandingkan" + ini + "dan" + o); // hanya mempertimbangkan p1if (this.p1 <o.p1) {System.out.u); (this.p1> o.p1) {system.out.println (", return 1"); return 1;} else {System.out.println (", return 0"); return 0;}}@override public string toString () {return "(" + p1 + "," + p2 + "); p1) {this.p1 = p1;} public int getP2 () {return p2;} public void setp2 (int p2) {this.p2 = p2;}}@uji tes public void () {gabungan c1 = kombinasi baru (1, 2); kombinasi c2 = kombinasikan baru (1, 2); kombinasi c3; combine (1); gabungan c2 = kombinasikan baru (1, 2); Combine; Combine = Combine; 2); Treeset <Gombine> set = Treeset baru <Gombine> (); set.add (C1); set.add (C2); set.add (c3); set.add (c4); while (! set.isempty ()) {// output elemen di treeset dalam urutan gabungan gabungan = set.pollfirst (); System.out.println (gabungan.getp1 () + "/t" + gabungan.getp2 ());}}}}Keluaran:
Bandingkan (1,2) dan (1,2), kembalikan 0
Bandingkan (1,2) dan (1,2), kembalikan 0
Bandingkan (1,3) dan (1,2), kembalikan 0
Bandingkan (5,2) dan (1,2), kembalikan 1
1 2
5 2
Kami melihat bahwa terlepas dari apakah compareTo () mengembalikan sama atau tidak, metode Equals () tidak disebut.
Meringkaskan
Di atas adalah semua tentang analisis elemen berulang penilaian TreeSet dan contoh kode. Saya harap ini akan membantu semua orang. Teman yang tertarik dapat terus merujuk ke topik terkait lainnya di situs ini. Jika ada kekurangan, silakan tinggalkan pesan untuk menunjukkannya. Terima kasih teman atas dukungan Anda untuk situs ini!