Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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_Performance_Collections - Fatal编程技术网

从Java集合中访问元素的速度更快

从Java集合中访问元素的速度更快,java,performance,collections,Java,Performance,Collections,我试图了解在访问Java集合中的元素时,哪一个更快,比如ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等等 从这个问题:,我知道ArrayList将O(1)和TreeMap作为O(logn) 其中:显示ArryList为O(n),HashMap为O(1),TreeMap为O(logn) 其中:表示排序数组比未排序数组快。由于树映射中的元素已排序,那么我可以假设所有已排序的集合都比未排序的集合快吗 请帮助我了解在访问list、set、map

我试图了解在访问Java集合中的元素时,哪一个更快,比如ArrayList、LinkedList、HashSet、TreeSet、HashMap、TreeMap等等

从这个问题:,我知道ArrayList将O(1)和TreeMap作为O(logn)

其中:显示ArryList为O(n),HashMap为O(1),TreeMap为O(logn)

其中:表示排序数组比未排序数组快。由于树映射中的元素已排序,那么我可以假设所有已排序的集合都比未排序的集合快吗


请帮助我了解在访问list、set、map等实现的java集合中的元素时使用哪种方法更快。

这取决于您是希望以基于索引的方式访问元素(对于list),还是查看集合中是否存在对象

如果您希望访问基于索引的元素,那么arraylist会更快,因为它实现了RandomAccess标记接口,并且由数组内部支持

集合由Map在内部支持,所以Map和Set的性能是相同的(Set使用一个伪对象作为键值对中的值)

许多程序员没有注意到的问题是,当Key对象的散列函数良好时,Hashset或HashMap的性能最好,即它为不同的对象生成不同的值(尽管这不是严格的要求)

注意:-如果散列函数不好,它会在内部降级为LinkedList,性能降级为O(n)


我个人的偏好是使用EnumMap或EnumSet。它只是使用Enum值来实现其功能,程序员不必担心Enum的hashcode/equals函数。对于其他情况,使用HashSet或HashMap(如果不必对其进行排序)

每种集合类型都适用于特定场景。没有最快或最好的收藏

  • 如果您需要使用索引快速访问元素,
    ArrayList
    是您的答案
  • 如果需要使用键快速访问元素,请使用
    HashMap
  • 如果需要快速添加和删除元素,请使用
    LinkedList
    (但它的索引访问性能非常差)

等等。

每个集合的javadoc解释了集合中每个操作的复杂性。阅读它。你可以假设你想要的任何东西,但这并不意味着它是真的。在这个特定实例中,排序数组比未排序数组快并不意味着在所有使用模式中,所有排序的集合都比所有未排序的集合快。如果有一个数据结构总是优于所有其他数据结构,Java API将只实现该数据结构。它提供了多种数据结构,因为不同的数据结构针对不同的目的进行了优化。如果有多个集合满足您的功能要求,并且访问性能很重要,请使用每个适当的集合为您的程序计时。