zoukankan      html  css  js  c++  java
  • Java容器类接口的选择

    我们知道Java容器类实际提供了四类接口:Map,List,Set和Queue,如下图所示,每种接口都有不止一个版本的实现,如果在实际编写程序时需要使用某种接口时该如何选择。

    • 从Oracle的Java Language Best Practices 中的说明可以看到建议不要在新程序中使用HashTable,Vector,Stack使用HashMap,ArrayList和LinkedList来替换。
    • ArrayList和LinkedList都实现了List接口,当ArrayList底层由数组实现,LinkedList由双向链表实现,因此在频繁使用插入删除操作时使用LinkedList,否则应该使用速度更快的ArrayList。
    • Set接口由HashSet,TreeSet和LinkedHashSet实现,HashSet最常用,速度最快,LinkedHashSet保持元素的插入顺序,TreeSet实现基于TreeMap,生成处于排序状态的Set。
    • List的ArrayList和LinkedList实现在并发编程时会产生所谓的Fail-Fast问题,此时需要使用CopyOnWriteArrayList来代替。
    • 除了IdentityHashMap,所有的Map实现的插入操作都会随着Map尺寸的变大而明显变慢,但是查找的代价要比插入的代价小得多,我们使用的查找操作也会更加频繁。
    • TreeMap比HashMap慢,TreeMap是一种创建有序列表的方式。
    • LinkedHashMap在执行插入操作时比HashMap慢一点,因为它维护散列数据结构的同时还要维护链表。
    • IdentityHashMap具有更好的性能,因为它使用==而不是equals()来比较元素。
    ------------------------------- 问道,修仙 -------------------------------
  • 相关阅读:
    透视校正插值
    投影矩阵推导
    编程思想-小即是美
    Win10使用小技巧
    TotalCommander 之 快捷键
    TotalCommander 之 配置
    TotalCommander 之 日常使用技巧
    上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。不笑不足以为道。
    《诫子书》
    青春不是年华,而是心境
  • 原文地址:https://www.cnblogs.com/elvalad/p/4116741.html
Copyright © 2011-2022 走看看