我的程序中有两个数组。一个是满的(里面有多余的项目)。我想将所有项目复制到第二个空数组而没有冗余。我唯一的问题是“如何声明第二个数组的大小?”因为我不确定第一个数组中的冗余项目有多少。
答案 0 :(得分:5)
我会使用Set
来删除数组中的重复数据,然后转换回数组或其他需要它的集合。
Set<Item> withoutDups = new HashSet<Item>(Arrays.asList(yourArray));
//now you have it without duplicates and do whatevet you want with it:-)
Item[] arrayWithoutDups = new Item[withoutDups.size()];
withoutDups.toArray(arrayWithoutDups); // fill the array
答案 1 :(得分:2)
将字符串数组转换为列表。使用LinkedHashSet消除重复。 LinkedHashSet维护插入顺序以及唯一性。
编辑:我删除了列表,因为它是多余的。
String[] words = {"ace", "ace","boom", "crew", "dog", "eon"};
Set<String> hs = new LinkedHashSet<String>(Arrays.asList(words));
String[] mywords=hs.toArray(new String[hs.size()]);
for(int i=0;i<mywords.length;i++)
{
System.out.println("..."+mywords[i]);
}
答案 2 :(得分:1)
Arrays
具有固定大小。在这种情况下,您应该使用ArrayList
。
但是,如果必须使用数组,那么应该将第二个数组的大小分配给第一个数组的大小,因为它可能根本不包含多余的元素。
答案 3 :(得分:1)
使用大小可能小于原始数组的ArrayList
,然后根据需要从中创建数组。
答案 4 :(得分:0)
那么问题是什么? 循环遍历源数组中的值,查找冗余项的数量。然后分配第二个数组并在下一个循环复制值中。
此方法的复杂性为2n=O(n)
答案 5 :(得分:-1)
由于您不知道哪个项目是多余的,因此您需要遍历阵列。我建议您使用临时List uniqueItemsList在循环期间添加项目。 该列表将根据需要增长。
然后你可以得到一个包含这样代码的数组(用你的类型替换String):
String uniqueItems[] = new String[uniqueItemsList.size()];
uniqueItems = uniqueItemsList.toArray(uniqueItems);