Rumah  >  Artikel  >  Java  >  Bagaimana untuk mengalih keluar elemen pendua dari tatasusunan di Java

Bagaimana untuk mengalih keluar elemen pendua dari tatasusunan di Java

王林
王林ke hadapan
2023-05-01 10:28:061185semak imbas

Soalan: Sebagai contoh, saya mempunyai tatasusunan (bilangan elemen ialah 0), dan saya berharap elemen yang ditambahkan tidak akan berulang.

Apabila saya mendapat soalan sedemikian, saya boleh menulis kod dengan cepat Tatasusunan di sini menggunakan ArrayList.

private static void testListSet(){          List<String> arrays = new ArrayList<String>(){              @Override             public boolean add(String e) {                  for(String str:this){                      if(str.equals(e)){                          System.out.println("add failed !!!  duplicate element");                          return false;                      }else{                          System.out.println("add successed !!!");                      }                  }                  return super.add(e);              }          };                  arrays.add("a");arrays.add("b");arrays.add("c");arrays.add("b");          for(String e:arrays)              System.out.print(e);      }

Saya tidak kisah tentang apa-apa di sini, saya hanya mengambil berat tentang apa yang perlu dilakukan. apabila menambah elemen pada tatasusunan Tentukan (sudah tentu, hanya gunakan kaedah tambah untuk menambah elemen tatasusunan) sama ada elemen yang sama sudah wujud. Ia mungkin mudah untuk menulis seperti ini, tetapi ia kelihatan kekok apabila berhadapan dengan tatasusunan yang besar: jika terdapat satu elemen dalam tatasusunan dengan 100,000 elemen, adakah kita perlu memanggil sama dengan 100,000 kali? Inilah asasnya.

Soalan: Selepas menambah tatasusunan yang sudah mempunyai beberapa elemen, bagaimana hendak memadamkan elemen pendua dalam tatasusunan ini?

Seperti yang kita sedia maklum, koleksi di Jawa secara amnya boleh dibahagikan kepada dua kategori: Senarai dan Set. Unsur-unsur dalam koleksi kelas Senarai dikehendaki untuk dipesan tetapi boleh diulang, manakala elemen dalam koleksi kelas Set dikehendaki untuk tidak tertib tetapi tidak boleh diulang. Kemudian di sini anda boleh mempertimbangkan sama ada menggunakan ciri Set untuk memadamkan elemen pendua akan mencapai matlamat Lagipun, menggunakan algoritma sedia ada dalam sistem adalah lebih baik daripada algoritma yang anda tulis sekarang.

public static void removeDuplicate(List<People> list){     HashSet<People> set = new HashSet<People>(list);     list.clear();     list.addAll(set);  }   ivate static People[] ObjData = new People[]{      new People(0, "a"),new People(1, "b"),new People(0, "a"),new People(2, "a"),new People(3, "c"),  };
rrree

Kod di atas menggunakan kelas Orang tersuai Apabila saya menambah objek yang sama (merujuk kepada kandungan data yang sama), saya memanggil kaedah removeDuplicate dan mendapati bahawa ini tidak menyelesaikan masalah sebenar objek wujud. Jadi bagaimana seseorang menentukan sama ada objek adalah sama dalam HashSet? Buka kod sumber HashSet dan anda akan mendapati bahawa setiap kali anda menambah data padanya, anda mesti memanggil kaedah tambah:

public class People{      private int id;      private String name;            public People(int id,String name){          this.id = id;          this.name = name;      }            @Override     public String toString() {          return ("id = "+id+" , name "+name);      }        }

Peta sokongan di sini ialah data yang diselenggara oleh HashSet Ia menggunakan kaedah yang sangat bijak untuk menambah setiap Objek yang ditambahkan kali ini dianggap sebagai KEY dalam HashMap, dan objek HashSet itu sendiri dianggap sebagai NILAI. Ini mengambil kesempatan daripada sifat KEY dalam Hashmap, dan secara semula jadi data HashSet tidak akan diulang. Tetapi sama ada terdapat data pendua sebenar bergantung pada cara untuk menentukan sama ada dua KEY adalah sama dalam HashMap.

      @Override      public boolean add(E object) {           return backingMap.put(object, this) == null;       }

Secara umum, idea di sini adalah untuk melintasi elemen dalam peta cincang Jika kod cincang elemen adalah sama (sebenarnya, kod cincang perlu diproses sekali), kemudian nilai kaedah eqaul KEY. . Jika kedua-dua syarat ini dipenuhi, maka ia adalah elemen yang berbeza. Kemudian jika jenis elemen dalam tatasusunan disesuaikan, dan anda ingin menggunakan mekanisme Set, anda perlu melaksanakan equal dan hashmap sendiri (algoritma peta hash tidak akan diperkenalkan secara terperinci di sini, saya hanya boleh memahaminya) kaedah:

rreeee

Atas ialah kandungan terperinci Bagaimana untuk mengalih keluar elemen pendua dari tatasusunan di Java. 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