[英]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.