Java 存储与处理时间
我有一个Java 存储与处理时间,java,performance,algorithm,Java,Performance,Algorithm,我有一个列表(javaLinkedList)。每个对象都有一个键和一个值属性 客户端1需要完整的列表 客户端2将传递一个键并期望返回一个值 客户端3将传递一个值并期望返回一个键 问题是,既然Java集合使用指向实际对象的指针而不是存储对象,那么是否值得再存储两个映射 Map为客户端2提供服务。(javaHashMap) Map为客户端3提供服务。(javaHashMap) 这将节省遍历整个列表(list)和查找匹配键或值所需的处理时间。拥有两个映射将更容易编码,并且考虑到可读性优势,额外映射的内
列表
(javaLinkedList
)。每个对象都有一个键和一个值属性
客户端1需要完整的列表
客户端2将传递一个键并期望返回一个值
客户端3将传递一个值并期望返回一个键
问题是,既然Java集合使用指向实际对象的指针而不是存储对象,那么是否值得再存储两个映射
Map
为客户端2提供服务。(javaHashMap
)
Map
为客户端3提供服务。(javaHashMap
)
这将节省遍历整个列表(
list
)和查找匹配键或值所需的处理时间。拥有两个映射将更容易编码,并且考虑到可读性优势,额外映射的内存开销可以忽略不计。您是对的,因为它们是对象,所以您不必复制内容,只需复制数据结构
如果表中没有存储
MyObject
的键/值对,则可以使用,并消除MyObject
的原始列表和开销。这意味着客户端1的迭代顺序并不重要。我认为这篇文章可能会对你有所帮助
两个映射到MyObject不会给您太多空间,因为每个映射上都会创建条目对象和条目数组。你最好Map和Map
。如果该键值是可以使用的简单类型,即高性能、内存优化的数据结构
另外,我建议你永远不要使用LinkedList你说的是数十个、数百个还是数千个
MyObject
实例?除了Steve说的:你将执行多少次搜索,在哪种情况下?如果您在将20 GB保存到磁盘之前先保存1秒钟,或者在用户每天打开一次表单时保存50毫秒…您可能不需要任何优化。。。此外,您还可以考虑使用HasSeT代替LyKeDList.100个对象。这些对象是客户端经常查找的一种主数据。“百”非常小,多久查找一次?10个客户端每秒一次?1000个客户端每秒1000次?您还应该测量它是否是瓶颈(并尝试使用另一个数据结构而不是链表,例如HashSet
)。哦,顺便说一句,如果它在服务器启动时加载一次,那么客户端也可以在启动时从LinkedList
构建自己的HashMap
(每个客户端存储它需要的内容,而不是原始列表)。我应该补充的是,列表是恒定的,不会更改,它在服务器启动时加载。