ArrayList集合的底层原理
1. 当创建ArrayList集合的时候,代码底层会创建一个长度为0的数组
ArrayList<E> list = new ArrayList<>();
2. 当往ArrayList集合对象中添加第一个元素的时候,底层的数组会重新创建,新创建的数组长度是10
list.add(e对象); //第一次添加元素
3. 往ArrayList集合中添加第11个元素的时候,底层的数组会重新创建,新创建的数组长度是15
list.add(e对象); //第十一次添加元素
规律: 每当集合底层数组容量不够的时候,创建的新数组长度为老数组长度的1.5倍
// newLength = oldLength + (oldLength >> 1)
往ArrayList添加第1024个元素的时候,请问底层数组的长度是多少? 1234
ArrayList集合的底层源码分析
数据结构
代码的本质 : 数据结构 + 算法;
集合的本质 : 数据结构 + 数组;
栈和队列
数组和链表
数组
单向链表结构
双向链表结构
Set集合
Set<E> 是接口;
1. 长度可变
2. 只能存引用数据类型(存基本数据类型要存包装类)
3. 元素无索引
4. 元素不可以重复
5. 元素存取无序
创建容器
Set<E> 集合名 = new 实现类<E>();
增删改查
增: boolean add(E e) : 往集合中添加元素,返回元素是否添加成功
删:
boolean remove(Object o) : 按照传入元素值删除集合中的元素,返回删除是否成功
void clear():清空集合中所有的元素
改: 没有索引所以没有set方法
查: 没有索引所以没有get方法
boolean contains(Object o) : 是否包含
boolean isEmpty() : 是否为空集合
int size() : 查询 集合中元素的个数和集合的长度
遍历:
1. 转数组 : 来自于Collection
Object[] toArray();
2. 普通迭代器 : 来自于Collection
Iterator<E> iterator();
3. 增强for
HashSet集合
HashSet<E>集合 : 底层数据结构是Hash表的Set集合实现!!
创建容器
HashSet<E> 集合名 = new HashSet<E>();
增删改查
增: boolean add(E e) : 往集合中添加元素,返回元素是否添加成功
删:
boolean remove(Object o) : 按照传入元素值删除集合中的元素,返回删除是否成功
void clear():清空集合中所有的元素
改: 没有索引所以没有set方法
查: 没有索引所以没有get方法
boolean contains(Object o) : 是否包含
boolean isEmpty() : 是否为空集合
int size() : 查询 集合中元素的个数和集合的长度
遍历:
1. 转数组 : 来自于Collection
Object[] toArray();
2. 普通迭代器 : 来自于Collection
Iterator<E> iterator();
3. 增强for
哈希表
HashSet集合去重原理
HashSet<E>集合去重原理 :
按照对象的hashCode()方法和equals()方法的编写逻辑进行去重
默认情况 : 类中没有重写hashCode()方法和equals()方法,此类对象存储到HashSet集合中按照元素的地址值去重
如果说想按照对象的属性值进行去重 : 请自动重写hashCode()方法和equals()方法