0

我需要有一个UserProfile类,就是这样,一个用户配置文件。这个用户配置文件当然有一些重要的用户数据,但它还需要有用户朋友发送的消息列表。

我需要将这些消息保存在LinkedListArrayList和. 但一次只有一个,并且不会为每个数据结构复制消息。基本上,类似于动态变量类型,我可以在其中选择消息的数据类型。HashMapTreeMap

这在Java中是否可能?或者我最好的方法是这样的?我的意思是,有 2 个不同的类(用于用户配置文件),一个是我托管消息的类Map<K,V>(然后我在适当的地方使用HashMapTreeMap,另一个是我托管它们的类List<E>(然后我在适当LinkedListArrayList地方使用)。并且可能使用超类,UserProfile所以我不必为数据、年龄、地址等字段复制变量和方法......

有什么想法吗?

4

3 回答 3

1

首先,您不会通过同时将消息添加到不同的集合来复制消息 - 您只存储对同一对象的不同引用。(好吧,除非消息被表示为像long...这样的原始类型,但无论如何这些都不能添加到集合中。)

为什么不能在同一个 UserProfile 中拥有所有这些集合?这将允许您通过键或索引访问消息,并以您喜欢的任何方式遍历它们。

LinkedHashMap对您来说也可能是一个有趣的选项,因为它保证了迭代顺序,因此在某种程度上它在迭代方面的行为类似于 List,同时仍然是一个 Map。归根结底,它归结为您希望如何访问给定用户的消息,您没有详细说明。

更新: @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
于 2010-05-21T12:45:46.257 回答
0

如果这是一个大学项目,那么我怀疑你要做的是:

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

如上所述,将对象添加到集合不会复制它。

于 2010-05-21T14:42:02.043 回答
0

我最终使用了我在第一篇文章中描述的内容:

这在Java中是否可能?或者我最好的方法是这样的?我的意思是,有 2 个不同的类(用于用户配置文件),一个将消息托管为 Map(然后我在适当的情况下使用 HashMap 和 TreeMap),另一个类将它们托管为 List(然后我使用 LinkedList 和 ArrayList在适当的地方)。并且可能为 UserProfile 使用一个超类,这样我就不必为数据、年龄、地址等字段复制变量和方法......

于 2010-05-24T17:10:02.220 回答