Java API for Javaコレクションフレームワーク、HashSetにtoArray()メソッドが見つかりませんでした。抽象クラスSetにtoArray()メソッドがあります。
class Ideone {
public static void main (String[] args) throws Java.lang.Exception {
Set x = new HashSet();
x.add(4);
//ArrayList<Integer> y = x.toArray(); this does not work !
int[] y = x.toArray();//this does not work!
System.out.println(x.toArray());//this gives some weird stuff printed : Ljava.lang.Object;@106d69c
}
}
ToArray()が指定されていない場合、ハッシュセットを配列に変換するにはどうすればよいですか?
もちろん、HashSet
はtoArray
を実装します。このメソッドを指定するSet
インターフェイスを実装するため、これを実装する必要があります。実際の実装は、AbstractCollection
のスーパークラスであるAbstractSet
のスーパークラスであるHashSet
にあります。
まず、生の型を使用しないでください。
つかいます :
_Set<Integer> x = new HashSet<>();
x.add(4);
_
次に、配列に変換します。
_Integer[] arr = x.toArray(new Integer[x.size()]);
_
x.toArray()
を使用すると、_Object[]
_が得られます。
HashSet
のジェネリックを必ず宣言してください
Set<Integer> x = new HashSet<>();
そして、それを次のような配列に変換します。
int[] y = new int[x.size()];
int c = 0;
for(int x : x) y[c++] = x;
最初の行
ArrayList y = x.toArray();これは動作しません !
まず、Set x = new HashSet();
すなわちrawタイプを使用しました。コンパイラは、整数オブジェクトを含むことを知りませんが、左側の上の行では、実際には配列である整数の配列リストになると言っています
2行目
int [] y = x.toArray(); //これは機能しません!
左側の上の行では、実際にはオブジェクトの配列である整数の配列になると言っています
これは動作します
Object[] y = x.toArray();
しかし、これは正しい方法ではありません。生のタイプは使用しないでください
Set<Integer> x = new HashSet<>();
Integer[] intArray= x.toArray(new Integer[x.size()]);
System.out.println(x.toArray()); //これにより、奇妙なものが印刷されます:Ljava.lang.Object; @ 106d69c
その印刷 toString 配列オブジェクトの表現。だから、あなたはそれをLjava.lang.Object;@106d69c
各要素を印刷する場合は、要素を繰り返し処理してから印刷します。
もともと単純な配列ではなくArrayListを作成したかったようです。だから、これを試してみてください!
class Ideone
{
public static void main (String[] args) throws Java.lang.Exception
{
Set x = new HashSet();
x.add(4);
ArrayList<Integer> y = ArrayList<Integer>(x);
System.out.println(y);
}
}
ループを反復処理して、値を配列に格納できます。
int[] answer = new int[set1.size()];
int i = 0;
for (int num : set1) {
answer[i++] = num;
}
TreeSet
、ArrayList
およびArray
を使用して小さなマップをソートするJDK 7の比較:
long start = System.currentTimeMillis();
for(int i=0; i<10000000; i++){
TreeSet a = new TreeSet(payloads.keySet());
}
System.out.println("TreeSet: " + (System.currentTimeMillis()-start) + " ms.");
start = System.currentTimeMillis();
for(int i=0; i<10000000; i++){
ArrayList a = new ArrayList(payloads.keySet());
Collections.sort(a);
}
System.out.println("ArrayList: " + (System.currentTimeMillis()-start) + " ms.");
start = System.currentTimeMillis();
for(int i=0; i<10000000; i++){
String[] a = payloads.keySet().toArray(new String[payloads.size()]);
Arrays.sort(a);
}
System.out.println("Array: " + (System.currentTimeMillis()-start) + " ms.");
利回り:
ツリーセット:1527ミリ秒。
ArrayList:943ミリ秒。
配列:485ミリ秒。