Java中集合框架,Collection接口、Set接口、List接口、Map接口,已常常用的它们的实现类,简单的JDK源码分析底层实现

(一)集合框架:程序员

  Java语言的设计者对经常使用的数据结构和算法作了一些规范(接口)和实现(实现接口的类)。全部抽象出来的数据结构和操做(算法)统称为集合框架。算法

  程序员在具体应用的时候,没必要考虑数据结构和算法实现细节,只须要用这些类建立一些对象,而后直接应用就能够了,这样就大大提升了编程效率。编程

 

(二)集合框架包含的内容:数组

 

 

 (三)集合框架的接口(规范)数据结构

   Collection接口:存储一组不惟一,无序的对象框架

   List接口:存储一组不惟一,有序的对象数据结构和算法

   Set接口:存储一组惟一,无序的对象工具

   Map接口:存储一组键值对象,提升键(key)到值(value)的映射spa

 (四)各类接口的实现类:设计

  List接口的2个经常使用实现类:ArrayList和LinkedList

    ArrayList类:在它的底层代码中,实际是有一个Object型数组,经过一些方法实现数组的扩容,数组自己长度是在定义的时候就不能改变,JDK的源码底层就是经过新建立一个数组,长度比原来的长,把以前原数组的每一个元素复制过来,而后把新数组的首地址赋值给了原数组的引用,就这样实现了可变长度数组;因此ArrayList的特色就是:遍历和随机访问的速度快,插入对象和删除对象的效率就低,由于底层的实现是经过数组来实现

    LinkedList类:底层经过结点来实现的,它有2个Node结点属性,一个根结点first,一个尾结点last。添加的元素是保存在Node结点属性中item,看下面JDK源码,而后经过Node还有2个属性next和prev分别指向后一个保存元素的结点和指向前一个保存元素的结点;就这样造成一条逻辑上的一条链,它们在堆内存中内存是不连续的;因此LinkedList类的特色:访问元素的效率不高,可是插入和删除元素的效率高,由于经过结点改变指向就能够实现了。

    Map的实现类我就只讲一个HashMap,TreeMap就不讲了,就是添加进去的时候,有必定的顺序,不过根本不重要,能够借助工具类Collections类方法来实现对集合元素的排序。

   HashMap底层就是经过结点数组(数组+结点)来实现的,为何put()方法存key和value的时候,key不能重复,重复的话value会覆盖原先的value,key值在底层是经过它的hashCode来保证惟一性

       一样的来说解一下HashSet,给你们看看一个它的JDK源码,map是HashMap类型,把数据存储到map的key中,因此说HashSet存储的元素是不能重复的

      

PRESENT是个常量

   关于集合就只讲这些,大体了解底层的实现原理就能够了,方便理解和记忆。

相关文章
相关标签/搜索