Java常用集合框架

Collection接口下的集合

1. Collection集合结构图

2. Collection接口

      Collection接口中有一个重要的方法:iterator(),返回一个Iterator(迭代器),用与遍历集合中的元素。使用迭代器可以将集合中的元素完成遍历

3. List接口

      List接口是一个有序可重复的集合,有序也就是存进去是什么顺序,取出来还是什么顺序,也就是基于线性结构。实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

  • LinkedList:底层是双向链表实现,查询速度较慢,增删速度快,同时LinkedList也实现了Deque接口,也就是说也可以当作队列使用
  • ArrayList:底层是数组实现,因为数组有索引的存在所以查询速度较快,但是由于增删涉及到整个数组的移动所以速度较慢。
  • Vector:与ArrayList类似
  • Stack:Stack继承自Vector,底层是栈数据结构,Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push(压栈)和pop(弹栈) 方法,还有peek方法得到栈顶的元素,empty方法测试栈是否为空,search方法检测一个元素在栈中的位置。Stack刚创建后是空栈。

4. Set接口

      Set接口是一个不可重复的接口,如果把两个相同的元素添加到同一Set集合,则添加操作失败,新元素不会被加入,add()方法返回false。

  • HashSet:HashSet是Set集合最常用的实现类,HashSet是按照哈希算法来存储元素的。HashSet中存储的元素是无序的,即存进去的顺序和取出来的顺序可能会不同。HashSet存储原理:当向HashSet集合存储一个元素时,HashSet会调用该对象的hashCode()方法得到其hashCode值,然后根据hashCode值决定该对象的存储位置。HashSet集合判断两个元素相等的标准是(1)两个对象通过equals()方法比较返回true;(2)两个对象的hashCode()方法返回值相等。因此,如果(1)和(2)有一个不满足条件,则认为这两个对象不相等,可以添加成功。如果两个对象的hashCode()方法返回值相等,但是两个对象通过equals()方法比较返回false,HashSet会以链式结构保存对象。
  • TreeSet:TreeSet是SortedSet接口的实现类,TreeSet可以保证元素处于排序状态,它采用二叉树的数据结构来存储集合元素。TreeSet通过Iterator进行遍历采用的是中序遍历的方式。

Map接口下的集合

1. Map集合结构图

2. Map接口

      Map接口以Map<Key,Value>键值对的形式保存具有映射关系的数据。因此Map中会存储两组值,一组值保存到了Map中的Key部分,一组值保存到了Map中的Value部分,Key和Value可以存储任意引用数据类型的数据。key的值不可以重复,可以为null,如果添加key-value对时Map中已经有重复的key,则新添加的value会覆盖该key原来对应的value。

  • HashMap:底层是哈希表(数组+单向链表)数据结构,HashMap会根据Key的hashCode值存储数据,通过哈希算法计算出内存地址放入相应数组的索引中,如果hashCode值相同则会放入同一数组的索引中,再调用equals方法,如果得到的值为true,则会覆盖原来的Value值,如果结果为false则会在链表的尾结点出增加一个结点存储数据。HashMap是非线程安全的。HashMap中数组的默认初始化容量为16,当数组中元素到达初始容量的75%时会进行数组的扩容,扩容为初始容量的2倍。Java8 对 HashMap 进行了一些修改,大的不同就是利用了红黑树,所以其由(数组+链表+红黑树)组成,在Java8中,当链表中的元素超过了8个后会将链表的数据结构转化为红黑树数据结构,从而降低查找的时间复杂度为O(logN),当链表中的元素降为6以下时会将红黑树的数据结构再次转变为单向链表的数据结构。

  • Hashtable:Hashtable和HashMap的关系类似于Arraylist和Vetory的关系,Hashtable的底层也是哈希表,与HashMap类似,但是Hashtable是线程安全的。HashMap中的Key和Value允许出现null值,但是Hashtable的Key和Value中不允许出现null值,否则会出现空指针异常。

  • TreeMap:TreeMap是SortedMap的实现类,底层是红黑树的数据结构,每个key-value对作为红黑树的一个节点。TreeMap存储key-value对时,需要根据key对节点进行排序。

posted @ 2020-07-27 22:08  zuzuzu_code  阅读(139)  评论(0)    收藏  举报