zoukankan      html  css  js  c++  java
  • Java集合总结

     

    今天又复习Java的集合类,相比之前的学习,又有了许多收获,而且时记到脑子里边了,或者是要坚持写博客的缘故把。

    进入正题,首先是要搞清Collection和Collections,Collection是List,set和Queue接口的父接口,而Collections是一个操作集合的工具类。

    集合体系知识如下:

    首先说Set集合:Set集合类似于一个蜜罐,可以把多个对象丢进去,而Set不能够记住添加元素的顺序。Set集合与Collection基本相同,没有提供额外的方法,也可以说Set就是Collection。如果add()相同的元素,会返回flase,添加失败。

    HashSet:HashSet按照Hash算法来存储结合中的元素,因此具有良好的存取和查找的性能。简单的说,HashMap的底层实现是“基于拉链法的散列表”。详细分析请参考深入解析HashMap、HashTable

    LinkedHashSet:使用连表来维护元素,因为需要维护元素的插入顺序,所以性能略低,低于HashSet。

    TreeSet:采用红黑树的数据结构来存储集合元素,并且支持两种排序方法,自然排序和定制排序。注意:使用TreeSet时,保证添加的对象全都实现了Comparable接口,否则会添加失败,并且抛出ClassCastExecption异常。简单一句话,如果想要TreeSet正常运行,只能添加同一种类型的对象。

    EnumSet:为枚举类设计的集合类。内部以向量的形式存储,存储形式非常紧凑,所有Enumset在对象占用内存小,而且效率高。

    各Set实现类性能分析:HashSet性能总是高于TreeSet,如果想要保持排序的set,采用TreeSet。LinkedHashSet对于普通的插入删除来说比HashSet略微慢一点,但是有了连表,遍历LinkedHashSet会更快,EnumSet是Set实现类中性能最好的,但是只能保存同一类型的元素。并且所有的set实现类都是线程不安全的。

    -------------------------------------分割线-----------------------------------------------------

    现在我们再来说这个List和Queue

    ArrayList和Vector (包括之后的ArrayDeque)都是基于数组来实现的,封装了一个动态的,允许在分配Object[]数组。并且这个ArrayList和Vector的,Object[]数组的大小为10(ArrayDeque大小为16).

    对于Vcetor,这是一个比较古老的的集合,产生于jdk1.0,那时候java还没有集合,方法名都很长。之后也做过一些更新,方法名简短了。而ArrayList一开始就作为List的主要实现类。所以比Vector优异一些,以后开发过程过可以采用。在这就是ArrayList是线程不安全的,但是可以使用Collections工具类,把ArrayList变成,线程安全的。

    --

    Queue集合,用于模拟队列的“先进先出的结构”,而且PriorityQueue实现类是一个比较标准的实现类,之所以说是比较标准的,是因为元素并不是按照添加的顺序来排序的,而是按照队列元素大小进行排序的。

    Deque接口是Queue的子接口,他代表了一个双端队列,Deque接口的典型实现类:ArrayDeque,是基于数组来实现的,底层数组长度为16

    再来说说这个LinkedList,既可以当成队列,也可以当成栈来用。

    最后分析一下性能:对于常用类ArrayList(基于数组)和LinkedList(基于线性表),初学者可以不必理会性能差劣,只知道LinkedList不仅提供了List功能,还提供了双端队列,栈的功能。

    抛弃插入删除性能,总体来来说ArrayList的性能优异与LinkedList,因为大多数可以考虑使用ArrayList.对于ArrayList,Vector,and LinkedList的遍历,因为ArrayList和Vector是基于数组实现的,应该使用随机访问方法get去访问,对于LinkedList应该采用迭代器。

     =======================

    关于Map在map的所有子接口和实现类中,最常用的就是HashMap和TreeMap,换句话来说Map 和Set有着异曲同工之妙,详解可以看API,java源码就是先是实现了HaspMap TreeMap等集合,然后通过包装一个所有value都有null的Map集合实现了Set的集合类。

    用的话首先选择HaspMap,如果想要保持排序,则用TreeMap

    参考资料:李刚大叔的《疯狂Java讲义》---

    文章主要是自己学习的笔记,难免有些语句表达的不正确甚至是错误的,欢迎大家指出,一定虚心改正。

  • 相关阅读:
    root用户Linux 环境变量的配置解决(-bash: jps: command not found)有关问题
    Linux Crontab内环境变量与Shell环境变量的关系及解决问题的办法
    RocketMQ os.sh 系统优化(CentOS)
    Spring Boot修改内置Tomcat端口号
    SpringBoot多跨域请求的支持(JSONP)
    [译]Spring Boot 构建一个RESTful Web服务
    delphi怎样把子窗体显示在pagecontrol的tabsheet
    delphi从TRichEdit获得RTF格式文本(PC版本)
    数据类型表(DELPHI、C++)
    对程序进行注释
  • 原文地址:https://www.cnblogs.com/imjamin/p/8780240.html
Copyright © 2011-2022 走看看