0

Set 内のオブジェクトを拡張する別のオブジェクトの配列 (Object[]) で Set を埋めるにはどうすればよいですか。

このオブジェクトの配列を取得し、これを配列内のオブジェクトを拡張するオブジェクトのセットにキャストします。次のようにします。

    Object[] a = new Object[1];
    a[0] = new SomeObject();
    Set<SomeObject> aSet = new HashSet<SomeObject>(a);

そのように配列を Set にキャストできない場合、配列を List にキャストすることは可能ですか?

注:これを次のようなループ方法で達成したい場合:

Object[] a = new Object[1];
a[0] = new SomeObject("Something");
Set<SomeObject> aSet = new HashSet<SomeObject>();

for(int i = 0; i < a.length; i++){
aSet.add((SomeObject)a[i])  
}

しかし、私はループの方法でそれをしたくありません。
編集: はい...すべてのオブジェクトが java.lang.Object クラスを拡張することを知っています。

4

4 に答える 4

4

OPの最近のコメントに応えて:

どういうわけか、このリストをセットにキャストできないため、メソッドにリストを配列にキャストさせ、その配列を返します

その場合、これを簡単に行うことができます:

List<SomeObject> list = ...
Set<SomeObject> set = new HashSet<SomeObject>(list);

重要なこと: このコードはキャストとはまったく関係ありません! 実際に何が起こるかというと、Listof オブジェクトがあり、新しい を作成してSet、リストからすべての要素をそこにコピーするということです。この操作によって元のリストが変更されることはありません。

私のコメントを繰り返しますが、Java でのキャストの意味を明らかに誤解しています。オブジェクトのキャストは、プリミティブ値のキャストとはまったく異なる方法で機能します。この件に関する記事を読んでください: http://www.volantec.biz/castingObjects.htm

于 2012-06-01T09:51:33.690 に答える
2

まず、UserObject で何をしたいかを決定します。すべてをUserObject配列内に保持するか、コレクションの下に保持するか。

2回保存することは、私にとって意味が少なく、メモリを消費するだけです。

編集:

この場合、以下のものを使用します。

Set<T> mySet = new HashSet<T>(Arrays.asList(someArray)); 
于 2012-06-01T09:36:37.963 に答える
2

次のように宣言Object[] a = new Object[1]; します。SomeObject[] a = new SomeObject[1];

以下のコードを使用します。

SomeObject[] a = new SomeObject[1]
a[0] = new SomeObject();
Set<UserObject> aSet = new HashSet<UserObject>(Arrays.<UserObject> asList(a));
于 2012-06-01T09:36:41.390 に答える
1
Object[] a = new Object[3];
a[0] = new String("SAMIR1");
a[1] = new String("SAMIR2");
a[2] = new String("SAMIR3");
Set<Object> aSet = new HashSet<Object>(Arrays.<Object> asList(a));
System.out.println(aSet);
于 2012-06-01T09:35:54.407 に答える