如何在Java中具有具有动态数据类型的变量?
-
04-10-2019 - |
题
我需要一个 UserProfile
班级就是这样,一个用户配置文件。当然,此用户配置文件具有一些重要的用户数据,但还需要包含从用户朋友发送的消息列表。
我需要将这些消息保存在 LinkedList
, ArrayList
, HashMap
和 TreeMap
. 。但是一次只有一个,而不复制每个数据结构的消息。基本上,类似于动态变量类型,我可以在其中选择消息的数据类型。
在Java中,这是可能的吗?或我最好的方法是 像这样?我的意思是,有2个不同的类(对于用户配置文件),一个我将消息托管为 Map<K,V>
(然后我使用 HashMap
和 TreeMap
适当的地方)和我主持的另一堂课 List<E>
(然后我使用 LinkedList
和 ArrayList
适当的地方)。并可能使用超级班 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
如上所述,将对象添加到集合中不会复制它。