0

プログラムに 2 つの配列があります。1 つがいっぱいです (冗長なアイテムが含まれています)。すべてのアイテムを冗長性なしで 2 番目の空の配列にコピーしたいと考えています。私が抱えている唯一の問題は、「2番目の配列のサイズを宣言する方法は?」ということです。最初の配列の冗長項目がいくつあるかわからないためです。

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

元の配列よりも小さいサイズを使用ArrayListし、必要に応じてそこから配列を作成します。

于 2013-04-19T12:39:35.573 に答える
1

Arrays固定サイズです。この場合に使用する必要がありますArrayList

ただし、配列を使用する必要がある場合は、冗長な要素がまったく含まれていない可能性があるため、1 番目の配列のサイズと同じサイズの 2 番目の配列を割り当てる必要があります。

于 2013-04-19T12:38:40.767 に答える
0

だから問題は何ですか ?ソース配列の値をループして、冗長項目の数を見つけます。次に、2 番目の配列を割り当て、次のループで値をコピーします。

このアプローチの複雑さは2n=O(n)

于 2013-04-19T12:40:15.077 に答える
-1

冗長なアイテムがわからないため、配列をループする必要があります。一時的な List uniqueItemsList を使用して、ループ中にアイテムを追加することをお勧めします。リストは必要に応じて拡大します。

次に、次のようなコードで配列を取得できます (文字列を型に置き換えます)。

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