簡體   English   中英

從對象數組數據java中刪除重復項

[英]remove duplicates from object array data java

我想知道如何刪除對象中的重復項。

例如

cat c[] = new cat[10];

c[1].data = "ji";
c[2].data = "pi";
c[3].data = "ji";
c[4].data = "lp";

c[5].data = "ji";
c[6].data = "pi";
c[7].data = "jis";
c[8].data = "lp";

c[9].data = "js";
c[10].data = "psi"; 

我想從對象數組中刪除重復值。

感謝和前進

我假設您要創建另一個無重復的數組。 (因為您不能更改數組的大小)

您可以實現hashCode和equals並使用HashSet,但是如果沒有這些,則可以創建Comparator。

但是,最簡單的方法可能是使用“ Cat”類和“ cats”數組

Cat[] cats = { ... };
Set<String> datas = new HashSet<String>();
List<Cat> catList = new ArrayList<Cat>();
for(Cat cat: cats) if(datas.add(cat.data)) catList.add(cat);
Cat[] unqiueCats = catList.toArray(new Cat[catList.size()]);

這樣的事情應該工作嗎? 確保導入java.util.Arrays和java.util.HashSet。

/**
 * Removes duplicates from an array. Objects in the array must properly
 * implement hashCode() and equals() for this to work correctly.
 */
public static <E> E[] removeDuplicates(E[] array) {
  // convert input array to populated list
  List<E> list=Arrays.asList(array);

  // convert list to populated set
  HashSet<E> set=new HashSet<E>();
  set.addAll(list);

  // convert set to array & return, 
  // use cast because you can't create generic arrays
  return (E[]) set.toArray();
}

您可以創建另一個臨時數組,遍歷原始數組,然后對於每個元素,檢查該值是否已在temp數組中。 如果沒有,請添加它。

您還可以使用Set並覆蓋equals和hashCode方法

這是一個快速的技巧,可以完成您想做的事情(希望也可以編譯):

// Assuming the code in the question is here.

java.util.List<cat> tmp = new java.util.LinkedList<cat>();
java.util.HashSet<String> set = new HashSet<String>();

for (int i = 0; i < c.length; ++i)
  if (set.put(c[i].data)) tmp.add(c[i]);

c = tmp.toArray(c);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM