1.集合框架
collection
Arraylist
首先Arraylist
底层是一个数组,jdk7的时候在创建的时候默认创建一个底层长度为10的数组
jdk8的时候在创建的时候默认长度为0
在第一次添加数据的时候才会将数组长度变成10
底层扩容是每次会创建一个新的数组长度为原来的1.5倍
然后将原来的数据在通过数组拷贝到新数组中
linklist:
底层是一个链表:就是由一个个节点组成的 每个节点都有三个变量,分别用来存储前一个节点的位置,和后一个节点的位置,还有保存数据,因此linkedlist的添加和修改比Arraylist快,但是也要分情况,如果添加的位置或修改的位置在最后边Arraylist速度快。linkedlist其实某些程度上尽量不要使用,原因是lineklist它的内存占用比arraylist高
HashSet
底层 数组+链表
特点 无序不可重复,它的无序表现为在存储的时候的无序,在存储的时候他会先判断是否有相同的hashcode,在jdk7中,如果有相同的hashcode 但是equals不同他会将这个新的元素插入到原来元素的上方
jdk8中,会将新元素链接到原来元素的下方。
TreeSet
底层其实是一个二叉树,通过Compner接口实现自然排序
HashMap
在jdk7之前 每次创建一个hashmap的时候底层会创建一个长度为16的 数组
底层是数组+链表,每次扩容为原来的2倍
jdk8的时候,每次创建的默认容量是0
在第一次添加元素的时候才会将默认容量变为16
每次扩容为原来2倍
默认加载因子是0,。75
每次添加数据都会先判断hashcode 然后判断equals
LinkedHashMap
hashMap的子类
Collections工具类 中的方法: