1. 当创建ArrayList集合的时候,代码底层会创建一个长度为0的数组 ArrayListArrayList集合的底层源码分析 数据结构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
代码的本质 : 数据结构 + 算法; 集合的本质 : 数据结构 + 数组;栈和队列 数组和链表 数组 单向链表结构 双向链表结构 Set集合
SetHashSet集合是接口; 1. 长度可变 2. 只能存引用数据类型(存基本数据类型要存包装类) 3. 元素无索引 4. 元素不可以重复 5. 元素存取无序 创建容器 Set 集合名 = new 实现类 (); 增删改查 增: 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 iterator(); 3. 增强for
HashSet哈希表 HashSet集合去重原理集合 : 底层数据结构是Hash表的Set集合实现!! 创建容器 HashSet 集合名 = new HashSet (); 增删改查 增: 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 iterator(); 3. 增强for
HashSet集合去重原理 : 按照对象的hashCode()方法和equals()方法的编写逻辑进行去重 默认情况 : 类中没有重写hashCode()方法和equals()方法,此类对象存储到HashSet集合中按照元素的地址值去重 如果说想按照对象的属性值进行去重 : 请自动重写hashCode()方法和equals()方法



