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

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

在Java中,这是可能的吗?或我最好的方法是 像这样?我的意思是,有2个不同的类(对于用户配置文件),一个我将消息托管为 Map<K,V> (然后我使用 HashMapTreeMap 适当的地方)和我主持的另一堂课 List<E> (然后我使用 LinkedListArrayList 适当的地方)。并可能使用超级班 UserProfile 因此,我不必复制数据,年龄,地址等等字段的变量和方法...

有什么想法吗?

有帮助吗?

解决方案 3

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

在Java中,这是可能的吗?还是我最好的方法是这样?我的意思是,有2个不同的类(对于用户配置文件),一个我托管消息作为映射(然后在适当的地方使用hashmap和treemap)和另一个类作为列表的类(然后我使用linkedlist和arraylist适当的地方)。并且可能使用超级课程对用户撰写,因此我不必复制数据,年龄,地址等字段的变量和方法...

其他提示

首先,您不会通过同时将消息添加到不同的集合中来复制消息 - 您只存储独特的 参考 到同一对象。 (好吧,除非消息表示为原始类型,否则 long...但是无论如何都无法将这些添加到收藏中。)

为什么您不能在同一用户撰写中所有这些收藏夹?这将使您可以通过键或索引访问消息,并以任何方式遍历它们。

一种 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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top