首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >选择Java集合实现的经验法则?

选择Java集合实现的经验法则?
EN

Stack Overflow用户
提问于 2008-09-07 21:46:15
回答 11查看 23.2K关注 0票数 61

有没有人有一个好的经验法则,可以在不同的Java Collection接口实现之间进行选择,比如List、Map或Set?

例如,通常我为什么或在什么情况下更喜欢使用向量、ArrayList、Hashtable或HashMap?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-09-07 14:03:49

我总是在案例的基础上根据用例做出这些决定,例如:

  • 我需要保留排序吗?
  • 我是否会有空键/值?Dups?
  • 是否会被多线程访问
  • 我是否需要键/值对
  • 我是否需要随机访问?

然后我用一个简单的拿出了我方便的第5版Java,并比较了大约20个选项。它在第五章中有一些很好的小表格来帮助人们找出什么是合适的。

好吧,也许如果我即兴知道一个简单的ArrayList或HashSet就可以做到这一点,我就不会全部去查了。;)但是,如果关于我的延迟使用有任何一点复杂的东西,你可以打赌我在书中。顺便说一句,我认为Vector应该是“老式的”--我已经很多年没有用过了。

票数 16
EN

Stack Overflow用户

发布于 2013-07-02 16:19:11

我真的很喜欢这篇来自Sergiy Kovalchuk的blog entry的小抄

更详细的是Alexander Zagniotov的流程图,但不幸的是它是离线的。但是,Wayback Machine有a copy of the blog

摘自博客中关于评论中提出的问题的摘录:“本小抄不包括很少使用的类,如WeakHashMap、LinkedList等,因为它们是为非常具体或奇异的任务而设计的,在99%的情况下不应该选择它们。”

票数 95
EN

Stack Overflow用户

发布于 2008-09-07 14:17:46

我假设你从上面的答案中知道List,Set和Map之间的区别。为什么你会在他们的实现类之间做出选择是另一回事。例如:

列表

  1. ArrayList的检索速度很快,但插入速度很慢。对于读取大量数据但不会大量插入/删除的实现来说,这是很好的。它将数据保存在一个连续的内存块中,所以每次需要扩展时,它都会复制整个array.
  2. LinkedList,检索速度很慢,但插入速度很快。这对于插入/删除了很多东西但读起来不多的实现来说是很好的。它不会将整个数组保存在一个连续的内存块中。

集:

  1. HashSet不保证迭代的顺序,因此是最快的集合。它有很高的开销,而且比ArrayList慢,所以你不应该使用它,除非当它的散列速度变得很快时,有大量的数据。factor.
  2. TreeSet保持了数据的有序性,因此比HashSet慢。

映射: HashMap和TreeMap的性能和行为与Set实现是平行的。

不应使用Vector和Hashtable。它们是同步实现,在发布新的Collection hierarchy之前,因此速度很慢。如果需要同步,请使用Collections.synchronizedCollection()。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档