Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用具有动态数据类型的变量?_Java_Inheritance_Dynamic Variables - Fatal编程技术网

如何在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个),然后从那里开始工作。