JAVASE23天从入门到精通_Day13

数据结构
数据结构 : 数据存储方式  隶属算法学科
不同的数据结构带来了 不同的存储方式,存储效率....
队列和栈结构

在这里插入图片描述

数组和链表结构

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

ArrayList
ArrayList<E> : 完美的底层为数组结构的List集合实现
	是最常用的 元素可重复,元素有索引,元素存取有序的单列集合!
    
创建对象:
	ArrayList<E> 集合名 = new ArrayList<E>();

增删改查四类功能::  
		boolean add(E e)  : 添加元素,永远返回true
		void add(int index, E element) : 在指定索引位置插入元素
	删: 
		 boolean remove(Object o) : 根据传入的元素删除集合中指定元素,返回删除是否成功
		 E remove(int index)  : 根据传入的索引删除指定元素,把被删除的元素返回
 		 void clear()  : 清空集合中的所有元素
 	改:  
		E set(int index, E element) : 修改指定索引位置上的元素,返回被修改的元素
 	查: 
		E get(int index)  : 获取指定索引位置上的元素
 		boolean contains(Object o) : 查询传入的元素是否包含于集合中
 		boolean isEmpty() : 查询集合中是否为空 -> 没有元素返回true
 	    int size() : 获取集合元素的个数和集合的长度
 	    
 	    int indexOf(Object o) : 查询传入元素第一次出现在集合的索引位置,没找到返回-1
 		int lastIndexOf(Object o) : 查询传入元素最后一次出现在集合的索引位置,没找到返回-1
            
遍历:
	1. 转数组
	2. 普通迭代器
	3. 增强for
	4. 列表迭代器
	5. 普通for
ArrayList集合add方法源码分析
结论:
	1. 当创建一个ArrayList集合对象时,在内存中会创建一个长度为0的数组;
	2. 当往集合中添加第一个元素的时候,会把集合底层的长度为0的数组替换成长度为10的数组
	3. 当添加第11个元素的时候,会在内存中重新创建一个长度为15的数组作为集合的底层容器
	4. 当集合底层数组的长度为n,添加第n+1个元素时,底层数组都会扩容至原底层数组长度的1.5倍 
		源码 : n + (n >>1)
            
面试题 : 当往ArrayList集合中添加第1024个元素,请问集合底层数组的长度是多少??   1234         

在这里插入图片描述

LinkedList
LinkedList<E> : 底层数据结构是 链表结构的 list 集合实现
	链表结构 : 无索引,查询慢,增删快
	LinkedList<E> : 有索引,增删快
	
LinkedList 实现了 List<E>	接口中所有的抽象方法;

LinkedList<E> 中新增的一些关于头尾操作的方法:
	void addFirst(E e)  
    void addLast(E e) 
    E removeFirst()  
    E removeLast()    
    E getFirst()  
    E getLast()      
        
LinkedList<E> 底层是双向链表        
Vector
Vector<E> : Java最早的单列集合 ->1.2版本开始并入到集合体系,ArrayList取代;
	Vector<E>: 底层也是数组结构
	
Vector<E> 是同步的 -> 在多线程场景下是安全的.
       非多线程场景 : ArrayList
       多线程场景 : Vector
Set
Set<E> :  元素无索引,元素唯一,元素存取无序的单列集合的根节点
	1. 长度可变
	2. 只能存对象
	3. 元素无索引
	4. 元素不可以重复
	5. 元素存取无序
	
创建对象:
	Set<E> 集合名 = new 具体实现类<E>();
		//Set<E> 集合名 = new HashSet<E>();
		//Set<E> 集合名 = new TreeSet<E>();

增删改查四类功能:: boolean add(E e)  : 往集合中添加元素,返回添加是否成功
	删 : boolean remove(Object obj) : 按照传入的元素值删除元素
		void clear() : 清空
	改 : 没有set方法,因为没有索引
    查 : 没有get方法,因为没有索引
    	boolean contains(Object o) 
 		boolean isEmpty()  
        int size()  
        
遍历 :
	1. 转数组 : Object[] toArray()  
	2. 普通迭代器 :Iterator<E> iterator() 
	3. 增强for
哈希表结构
哈希表 : hashtable

在这里插入图片描述

HashSet
HashSet<E> 底层数据结构是hash表的set集合实现

hash表结构带来了: 元素唯一,元素存取无序

创建对象:
	HashSet<E> 集合名 = new HashSet<E>();

增删改查四类功能:: boolean add(E e)  : 往集合中添加元素,返回添加是否成功
	删 : boolean remove(Object obj) : 按照传入的元素值删除元素
		void clear() : 清空
	改 : 没有set方法,因为没有索引
    查 : 没有get方法,因为没有索引
    	boolean contains(Object o) 
 		boolean isEmpty()  
        int size()  
        
遍历 :
	1. 转数组 : Object[] toArray()  
	2. 普通迭代器 :Iterator<E> iterator() 
	3. 增强for
HashSet集合存储自定义元素去重原理
    结论:
        1. 如果你没有重写元素的hashCode和equals方法,那么HashSet集合会按照元素的地址值进行去重
        2. 如果你想按照对象的属性值去重,请在对象所在的类中重写hashCode和equals方法

HashSet集合存储自定义元素去重原理

    结论:
        1. 如果你没有重写元素的hashCode和equals方法,那么HashSet集合会按照元素的地址值进行去重
        2. 如果你想按照对象的属性值去重,请在对象所在的类中重写hashCode和equals方法
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值