Day_14 ArrayList集合的底层原理

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()方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值