Javaに動的なデータ型を持つ変数を持つ方法は?
-
04-10-2019 - |
質問
私は持っている必要があります UserProfile
それはまさにそれであるというクラス、ユーザープロファイル。このユーザープロファイルにはもちろん、いくつかの重要なユーザーデータがありますが、ユーザーフレンドから送信されたメッセージのリストも必要です。
これらのメッセージを保存する必要があります LinkedList
, ArrayList
, HashMap
と TreeMap
. 。ただし、一度に1つだけで、各データ構造のメッセージを複製しません。基本的に、メッセージのデータ型を選択できる動的変数タイプのようなもの。
これは、どういうわけかJavaで可能ですか?または私の最善のアプローチは何かです このような?つまり、2つの異なるクラス(ユーザープロファイル用)があります。1つはメッセージをホストしています。 Map<K,V>
(そして、私は使用します HashMap
と TreeMap
適切にどこで)そして私がそれらをホストする別のクラス List<E>
(そして、私は使用します LinkedList
と ArrayList
適切に)。おそらくスーパークラスを使用します UserProfile
したがって、データ、年齢、住所などのフィールドの変数とメソッドを複製する必要はありません...
何かご意見は?
解決 3
私は最初の投稿で説明したことを使用することになりました:
これは、どういうわけかJavaで可能ですか?それとも私の最善のアプローチはこのようなものですか?つまり、2つの異なるクラス(ユーザープロファイル用)、1つはメッセージをマップとしてホストする(そして適切にHashmapとTreemapを使用します)、別のクラスがリストとしてホストする(そしてLinkedListとArrayListを使用する別のクラスがあります。適切に)。そして、おそらくユーザープロファイルにスーパークラスを使用するので、データ、年齢、住所などのフィールドの変数とメソッドを複製する必要はありません...
他のヒント
まず第一に、あなたはそれを異なるコレクションに同時に追加することでメッセージを複製していません - あなたは明確な保存のみを保存します 参照 同じオブジェクトに。 (まあ、メッセージが次のようなプリミティブタイプとして表されない限り long
...しかし、これらはとにかくコレクションに追加することはできません。)
これらすべてのコレクションを同じユーザープロファイル内に持っていないのはなぜですか?これにより、キーまたはインデックスでメッセージにアクセスし、好きな方法で繰り返すことができます。
a LinkedHashmap また、イテレーションの順序を保証するため、興味深いオプションである可能性があるため、マップでありながら、反復に関するリストと同様に動作します。最終的には、特定のユーザーのメッセージにアクセスする方法に要約されますが、詳細は説明していません。
アップデート: @snake、Javaコレクションのオブジェクトへの参照のみを保存できます。原始 long
したがって、値は直接保存することはできません。 Long
最初にオブジェクト。 Java5であるため、この変換はオートボクシングのために暗黙的である可能性があるため、コードに表示されないことに注意してください。
List<Long> list = new ArrayList<Long>();
list.add(1L); // the primitive value is boxed into a Long object,
// which is then added to the list
long value = list.get(0); // the value of the Long object in the list is outboxed
// and assigned to the primitive variable
これが大学のプロジェクトである場合、私はあなたがしていることはこれだと思います:
Collection mycoll;
mycoll = new ArrayList();
for (Message m:message) {
// do stuff and measure the performance
}
// do other stuff and measure the performance
mycoll = new LinkedList();
// do the same stuff as a above and measure the performance again
mycoll = new HashMap();
//... and so on
上記のように、コレクションにオブジェクトを追加することはそれを複製しません。