从对象数组数据java中删除重复项

时间:2010-06-12 10:29:52

标签: java arrays object

我想知道如何删除对象中的重复项。

例如

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"; 

我想从对象数组中删除重复值。

谢谢并提前

4 个答案:

答案 0 :(得分:4)

我假设您要创建另一个免费重复的数组。 (因为你不能改变数组的大小)

您可以实现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()]);

答案 1 :(得分:2)

这样的东西应该有效吗?确保导入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();
}

答案 2 :(得分:1)

您可以创建另一个临时数组,遍历原始数组,并为每个元素检查temp数组中是否已存在该值。如果没有,请将其添加。

您还可以使用Set并覆盖equals和hashCode方法

答案 3 :(得分:0)

这是一个快速破解你想做的事情(希望也能编译):

// 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);