java集合系列1-总体概述

来源:互联网 发布:正定矩阵的性质 编辑:程序博客网 时间:2024/05/16 05:34

        java集合平时用的很多,但是其中有很多的神秘确不为我们所知,遂决心对其刨肠解肚,拨开每一个细胞。本来这个文章打算昨晚写的,鉴于早睡早起的理念,今早幸有小竹子童鞋喊我起床来写这篇文章,谢谢你,早起的感觉真好~~~

        网上也看了些文章,不只是在工作中,对于面试java集合也显得相当重要,了解底层的实现迫在眉睫。

        一、集合框架(Collections Framework)

        java 集合是java中使用最频繁最方便的类,作为容器可以存储任何类型的数据(集合中存储的是对象的引用,并非对象本身)。java集合包含多种数据结构,如:链表、队列、哈希表等。从类的继承结构来说, 可以分为两类,一是继承Collection接口,二是继承Map接口,包含哈希想过的集合类(我也一直没搞清楚这个哈希是个啥鬼嘞,后面一层层拨开你)。另外,当你事先不知道要存放数据的个数,或者你需要一种比数组下标存储机制更灵活的方法时,你就需要用到集合类。

        二、Collection和Map

        1. Collection

        


        图中的绿色的虚线代表实现,绿色实线代表接口之间的继承,蓝色实线代表类之间的继承。

        1.1 List 总结

  1. List的实现包含ArrayList、Vector及LinkedList
  2. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。例如:[ tom,1,c ];
  3. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];
  4. 所有的List中可以有null元素,例如[ tom,null,1 ];
  5. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作

        1.2 Set 总结

  1. Set 实现的基础是Map(HashMap);
  2. Set 中的元素是不能重复的,如果使用 add(Object obj) 方法添加已经存在的对象,则会覆盖前面的对象

        1.3 Queue 总结

         一般可以直接使用 LinkedList 完成,从上图看出,LinkedList 继承自 Deque,所以 LinkedList 具有双端队列的功能。PriorityQueue 的特点是为每个元素提供一个优先级,优先级高的元素会先出队列。      


        2  Map

        


        Map 类型的集合最大的优点在于查询效率高,理想情况下可以实现O(1)的时间复杂度。Map中最常用的实现类是Hashmap,LinkedHashMap与HashMap的区别在于前者能够保证插入集合的元素顺序与输出顺序一致。这两者与TreeMap的区别在于TreeMap是根据键值进行排序的,当然其底层的实现也有本质的区别,如HashMap底层是一个哈希表,而TreeMap的底层数据结构是一棵树

后面的文章将对这几个接口的实现类展开追杀,或许在后面文章完成时,会同时更新完善本文。

本来是早上写的,时间关系没写完,还是谢谢亲爱的小竹子童鞋