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