Java基础

一、Collection接口

1、List接口 ,Set接口

2、ArrayLIst,LinkedList,Vector,Stack

3、HashSet,LinkedHashSet,TreeSet

二、Map接口

1、HashMap,LinkedHashMap,TreeMap;

三、Iterator 与 ListIterator

1、ListIterator有add()方法,可以向List中添加对象,而Iterator不能

2、ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

3、ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

4、都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。

集合特性:

1、是否允许空

2、是否允许重复数据

3、是否有序,有序的意思是读取数据的顺序和存放数据的顺序是否一致

4、是否线程安全

底层实现

ArrayList:动态数组(动态扩容),初始容量:10

LinkedList:循环双向链表

HashMap:初始容量:16

数组+链表(JDK1.8前)

HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry 对象。HashMap 底层采用一个 Entry[] 数组来保存所有的 key-value 对,当需要存储一个 Entry 对象时,会根据hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry时,也会根据hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Entry。

数组+链表+红黑树实现(JDK1.8中)

LinkedHashMap:

LinkedHashMap和HashMap的区别在于它们的基本数据结构上,看一下LinkedHashMap的 Entry 继承了 HashMap中的 Entry,并添加了 before,after 前置节点后后置节点 来实现链表;

并发集合

ConcurrentHashMap:锁分段技术

总结:

1、List中的数据可重复,Set中的数据不可重复;

2、Array,Linked,Tree,Stored前缀的都有序,否则无序;

3、带Hash的,都是通过hashcode值定位存储的;

4、带Linked的,都是通过链表维持顺序的;

5、Vector,HashTable 是线程同步的,其他是 非同步的;

参考资料:

java集合框架综述

Java集合

Java集合之ArrayList

Java集合之LinkedList

Java集合之HashMap

Java集合之LinkedHashMap

ConcurrentHashMap原理分析

原文地址:https://www.cnblogs.com/wangwangfei/p/13217249.html