如何在Java中使用具有动态数据类型的变量?
我需要一个如何在Java中使用具有动态数据类型的变量?,java,inheritance,dynamic-variables,Java,Inheritance,Dynamic Variables,我需要一个UserProfile类,它就是这样,一个用户配置文件。当然,此用户配置文件包含一些重要的用户数据,但它还需要包含用户朋友发送的消息列表 我需要将这些消息保存在LinkedList、ArrayList、HashMap和TreeMap中。但一次只能复制一条消息,并且不能为每个数据结构复制消息。基本上,类似于动态变量类型,我可以为消息选择数据类型 这在Java中可能吗?或者我最好的方法是什么?我的意思是,有两个不同的类(对于用户配置文件),一个是作为Map承载消息的类(然后在适当的情况下使
UserProfile
类,它就是这样,一个用户配置文件。当然,此用户配置文件包含一些重要的用户数据,但它还需要包含用户朋友发送的消息列表
我需要将这些消息保存在LinkedList
、ArrayList
、HashMap
和TreeMap
中。但一次只能复制一条消息,并且不能为每个数据结构复制消息。基本上,类似于动态变量类型,我可以为消息选择数据类型
这在Java中可能吗?或者我最好的方法是什么?我的意思是,有两个不同的类(对于用户配置文件),一个是作为Map
承载消息的类(然后在适当的情况下使用HashMap
和TreeMap
),另一个是作为List
承载消息的类(然后在适当的情况下使用LinkedList
和ArrayList
)。并且可能会为用户配置文件使用一个超类,这样我就不必为数据、年龄、地址等字段复制变量和方法
有什么想法吗?首先,您不能通过同时将消息添加到不同的集合来复制消息-您只存储对同一对象的不同引用。(好吧,除非消息被表示为像long
…这样的基本类型,但无论如何都不能将它们添加到集合中。)
为什么不能将所有这些集合放在同一个UserProfile中?这将允许您通过键或索引访问消息,并以您喜欢的任何方式对其进行迭代
A对您来说可能也是一个有趣的选项,因为它保证了迭代顺序,所以在某种程度上,它的行为类似于关于迭代的列表,同时仍然是一个映射。最终,它归结为您希望如何访问给定用户的消息,您没有详细说明
更新:@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
List List=new ArrayList();
列表。添加(1L);//原语值被装箱到一个长对象中,
//然后将其添加到列表中
long value=list.get(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
如上所述,向集合添加对象不会复制它。我最终使用了我在第一篇文章中描述的内容:
这在Java中可能吗?或
我最好的方法是
这我是说,我们有两个不同的班
(对于用户配置文件),其中
将消息作为映射(和)宿主
然后我使用HashMap和TreeMap
适当地)和另一个类
我将它们作为列表宿主(然后使用
LinkedList和ArrayList,其中
适当地)。而且可能会使用
UserProfile的超类,所以我
不必重复变量和
数据、年龄等字段的方法,
地址等
你需要将它们存储在不同的数据结构中有什么原因吗?是的,请阅读我下面对Péter Török的回答的评论。为什么你不能创建一个长的列表?我不能做你说的任何事情,因为这不是我的选择,这是这个大学项目对我的要求。我需要这些(确切地说是我提到的那些)不同的数据结构,因为这样做的目的是测量每一个数据结构的性能。我可以很容易地为每个类创建一个不同的类,但如果可能的话,我想避免这种情况。我所说的“复制”是指让用户配置文件类有4个私有变量(每个数据结构一个),我只想有一个(对于Map
和List
),然后从那里开始工作。@Nazgulled,hmmm。。。你需要衡量的绩效到底是什么?不同的集合实现?那么,为什么您需要整个用户配置文件(而不仅仅是将100万个项目放入、访问、删除等不同的集合并测量执行时间)?恐怕我还是不了解全部情况……你不需要知道全部情况,也不需要知道你提出的问题,因为我没有答案。我在做我被要求做的事。。。其思想不是测量集合本身,而是使用用户配置文件测量集合。这就是我必须做的。我需要为用户配置文件创建一个类,并且消息必须在该类中。我所说的“复制”是指让用户配置文件类有4个私有变量(每个数据结构一个),我只想有一个(对于Map和List,最多2个),然后从那里开始工作。