复制阵列没有冗余

时间:2013-04-19 12:35:17

标签: java

我的程序中有两个数组。一个是满的(里面有多余的项目)。我想将所有项目复制到第二个空数组而没有冗余。我唯一的问题是“如何声明第二个数组的大小?”因为我不确定第一个数组中的冗余项目有多少。

6 个答案:

答案 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);