Rumah >Java >javaTutorial >Cara menggunakan Set antara muka dalam Java untuk menyimpan tatasusunan tanpa unsur pendua

Cara menggunakan Set antara muka dalam Java untuk menyimpan tatasusunan tanpa unsur pendua

WBOY
WBOYke hadapan
2023-05-13 19:34:101421semak imbas

Tetapkan antara muka

Antara muka Set, seperti antara muka Senarai, mewarisi antara muka Koleksi Elemen dalam antara muka Set tidak tertib dan peraturan tertentu digunakan untuk memastikan elemen yang disimpan tidak berulang.

Koleksi HashSet

HashSet ialah kelas pelaksanaan antara muka Set Elemen yang disimpan tidak boleh diulang dan elemen tidak tersusun apabila objek ditambahkan pada koleksi HashSet, Pertama kaedah hashCode() objek dipanggil untuk mengira nilai hash objek untuk menentukan lokasi penyimpanan elemen. Jika nilai cincang adalah sama pada masa ini, panggil kaedah equals() objek untuk memastikan tiada unsur pendua pada kedudukan ini.

 package 集合类;
 import java.util.HashSet;
 import java.util.Iterator;
 public class Set {
     public static void main(String[] args) {
         HashSet set=new HashSet();
         set.add("hello");
         set.add("world");
         set.add("abc");
         set.add("hello");
         Iterator it=set.iterator();
         while(it.hasNext()){
             Object obj=it.next();
             System.out.print(obj+ " ");
         }
     }
 }

Hasil berjalan

Cara menggunakan Set antara muka dalam Java untuk menyimpan tatasusunan tanpa unsur pendua

Dapat dilihat daripada hasil larian bahawa susunan pengalihan elemen tidak konsisten dengan susunan penambahan elemen, dan berulang. rentetan dialih keluar , ia hanya ditambah sekali kerana apabila kaedah add() koleksi HashSet menyimpan elemen, ia mula-mula memanggil kaedah hashCode() objek yang sedang disimpan untuk mendapatkan nilai hash objek, dan kemudian mengira a lokasi storan berdasarkan nilai hash Jika tiada elemen pada kedudukan ini, elemen akan disimpan secara langsung Jika terdapat elemen pada kedudukan ini, kaedah equal() akan dipanggil untuk membandingkan elemen yang disimpan sekarang dengan elemen pada kedudukan ini. Jika hasil pulangan adalah palsu, elemen akan disimpan dalam koleksi Jika hasil pulangan adalah benar, ia bermakna terdapat elemen pendua dan elemen tersebut akan dibuang.

 package 集合类;
 import java.util.HashSet;
 class Student{
     String id;
     String name;
     public Student(String id,String name){
         this.id=id;
         this.name=name;
     }
     public String toString(){
         String s = id + ":" + name;
         return s;
     }
 }
 public class Set1 {
     public static void main(String[] args) {
         HashSet hs=new HashSet();
         Student stu1=new Student("1","hello");
         Student stu2=new Student("2","world");
         Student stu3=new Student("1","hello");
         hs.add(stu1);
         hs.add(stu2);
         hs.add(stu3);
         System.out.println(hs);
     }
 }

Jalankan hasil

Cara menggunakan Set antara muka dalam Java untuk menyimpan tatasusunan tanpa unsur pendua

Elemen pendua tidak dialih keluar kerana kaedah hashCode() dan equals() tidak ditindih semasa mentakrifkan kelas Pelajar.

package API;
 import java.util.HashSet;
 class Student{
     private String id;
     private String name;
     public Student(String id,String name){
         this.id=id;
         this.name=name;
     }
     //重写toString方法
     public String toString(){
         return id+ ":"+name;
     }
     //重写hashCode方法
     public int hashCode(){
         //返回id属性的哈希值
         return id.hashCode();
     }
     public boolean equals(Object obj){
         //判断是否是同一个对象
         if(this==obj){
             return true;
         }
         //判断对象是Student类型
         if(!(obj instanceof Student)){
             return false;
         }
         //将对象强转为Student类型
         Student stu=(Student)  obj;
         //判断id是否相同
         boolean b=this.id.equals(stu.id);
         return b;
     }
 }
 public class Set2 {
     public static void main(String[] args) {
         HashSet hs=new HashSet();
         Student stu1=new Student("1","hello");
         Student stu2=new Student("2","world");
         Student stu3=new Student("1","hello");
         hs.add(stu1);
         hs.add(stu2);
         hs.add(stu3);
         System.out.println(hs);
     }
 }

Menjalankan hasil

Kerana kelas Pelajar mengatasi kaedah hashCode() dan equals() kelas Objek. Kembalikan nilai cincang atribut id dalam kaedah hashCode(), bandingkan sama ada atribut id bagi objek adalah sama dalam kaedah equals() dan kembalikan hasilnya. Apabila kaedah add() koleksi HashSet dipanggil untuk menambah objek stu3, didapati nilai hashnya adalah sama dengan objek stu2 dan stu2.equals(stu3) mengembalikan benar. HashSet menentukan bahawa kedua-dua objek adalah sama, jadi objek Pelajar pendua dialih keluar.

Cara menggunakan Set antara muka dalam Java untuk menyimpan tatasusunan tanpa unsur pendua

Atas ialah kandungan terperinci Cara menggunakan Set antara muka dalam Java untuk menyimpan tatasusunan tanpa unsur pendua. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam