0

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

4

6 回答 6

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
于 2013-04-19T12:40:23.950 回答
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]);
    }
于 2013-04-19T12:44:56.437 回答
1

Arrays是固定大小的。你应该ArrayList在这种情况下使用。

但是,如果您必须使用数组,那么您应该分配第二个数组的大小等于第一个数组的大小,因为它可能根本不包含冗余元素。

于 2013-04-19T12:38:40.767 回答
1

使用ArrayList哪个大小可以小于原始数组,然后根据需要从它创建数组。

于 2013-04-19T12:39:35.573 回答
0

所以有什么问题 ?遍历源数组中的值,查找冗余项的数量。然后分配第二个数组并在下一个循环中复制值。

这种方法的复杂性是2n=O(n)

于 2013-04-19T12:40:15.077 回答
-1

由于您不知道哪个项目是多余的,因此您需要遍历数组。我建议您在循环期间使用临时 List uniqueItemsList 添加项目。该列表将根据需要增长。

然后你可以得到一个包含这样代码的数组(用你的类型替换 String):

String uniqueItems[] = new String[uniqueItemsList.size()]; 
uniqueItems = uniqueItemsList.toArray(uniqueItems);
于 2013-04-19T12:46:26.737 回答