• 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()来比较元素。
    ------------------------------- 问道,修仙 -------------------------------
  • 相关阅读:
    植物大战僵尸游戏内存地址
    Win7如何取消用户登陆界面
    Adobe PS CS6安装详解
    MVC 支持同名路由,不同命名空间
    Session阻塞 读写锁引发的小问题
    GZipStream 压缩和解压
    IIS 工作原理之非托管代码旅程(一)
    Http协议(一)
    Css学习笔记 (一)
    Linq二 LinqToSql
  • 原文地址:https://www.cnblogs.com/elvalad/p/4116741.html
Copyright © 2020-2023  润新知