我需要一个UserProfile
类,就是那个用户个人资料。这个用户配置文件当然有一些重要的用户数据,但它也需要有用户朋友发送的消息列表。
我需要在LinkedList
,ArrayList
,HashMap
和TreeMap
中保存这些消息。但是每次只能有一个而不是为每个数据结构复制消息。基本上,像动态变量类型,我可以选择消息的数据类型。
这在某种程度上可以用Java吗?或者我最好的方法是like this?我的意思是,有两个不同的类(对于用户配置文件),一个我将消息作为Map<K,V>
托管(然后我在适当的地方使用HashMap
和TreeMap
)和另一个我在哪里的类托管他们List<E>
(然后我恰当地使用LinkedList
和ArrayList
。并且可能使用UserProfile
的超类,所以我不必为数据,年龄,地址等字段复制变量和方法......
有什么想法吗?
答案 0 :(得分: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
答案 1 :(得分: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
如上所述,将对象添加到集合中不会复制它。
答案 2 :(得分:0)
我最终使用了我在第一篇文章中描述的内容:
这在某种程度上可以用Java吗?要么 我最好的方法是这样的 这个?我的意思是,有两个不同的类 (对于用户个人资料),我在哪里 将消息作为Map托管(和 然后我用HashMap和TreeMap在哪里 适当的)和另一个班级 我将它们作为List托管(然后我使用 LinkedList和ArrayList在哪里 适当地)。并且可能使用了 UserProfile的超类,所以我 不必重复变量和 数据,年龄等领域的方法, 地址等......