Java集合大体结构和常用方法

集合

1.1 集合的意义
集合的特点:
	1. 支持所有数据类型的情况下,保持数据类型一致化要求
	2. 方法众多,工具方便
	3. 数组容量问题有多种解决方式,可以适应多种条件
	4. 有多种存储模型,可以根据当前数据的操作需要选择合适的方式
1.2 集合的基本结构
interface Collection<E> Java中所有接口的总接口
	1. interface List<E> 
	特征:
		有序: 添加顺序和存储顺序一致
		可重复: 在List集合允许出现相同元素
		1.1 class ArrayList<E>  可变长数组
			底层数据存储的方式是数组形式没提供对应操作方法. 增删慢,查询快
		1.2 class LikedList<E>  双向链表结构
			底层存储数据的结果是双向链表. 增删快,查询慢
		1.3 class Vector<E>     线程安全的可变长数组
			是ArrayList线程安全版,效率低于ArrayList,线程安全性高
	2. interface Set<E> 
	特征: 
	无序: Set存储元素顺序和添加顺序不一致
	不可重复: 数据不可重复,具有唯一性
		2.1 class HashSet<E>
			底层是哈希表结构,利用每一个单元格的唯一编号,可以快速存储和查询操作
			类似于Excel表格,每一个单元格个位置都有唯一编号,我们期望每个单元格中,有且只有一个数据
		2.2 class TreeSet<E>
			底层数据采用树形结构存储,并且是一个平衡二叉树.数据存储需要有对应的比较方式
1.3Collection<E>接口
1.3.1 ArrayList(可变长数组)
ArrayList底层存储数据是一个Object类型数组,可以支持任意类型,但通过泛型约束,在添加操作数据的过程中,约束对应的数据类型,
从而满足数据类型一致化要求.
ArrayList有两种构造方法:
	ArrayList();
	采用无参构造方法创建ArrayList对象,底层数组的初始化容量为10,采用的是当前ArrayList中规定的常量
	private static final int DEFAULT_CAPACITY = 10;
	ArrayList(int initCapacity);
	根据用户提供的数组容量,在合法范围以内使用
	ArrayList完成可变长操作依赖于底层的grom方法,在需要进行底层数组扩容的情况下,新数组容量是原数组容量的1.5倍左右
	
增删慢:涉及数据空间移动和数据空间扩容问题
查询快:按照数组下标方式通过地址,直到目标
1.3.2 LinkedList(双向链表)
LinkedList特征分析:
	增删快:
	元素直接通过引用相互连接,通过引用赋值操作,可以完成增删功能
	查询慢:
	所有的元素都需要通过上一个元素,或者下一个元素才可以得到
1.4 Set
1.4.1 HashSet
HashSet存储过程:
	1. 首先调用当前添加元素的hasCode方法,计算出当前元素一个存储数据【单元格】位置
	2. 如果当前单元格位置没有对应元素,直接存入(标准情况)
	如果两个元素hashCode一致,HashSet计算安排的位置也是相同的,如果当前单元格有其他元素,会执行equals方法进行判断比较
1.4.2TreeSet
所有节点都需要进行比较后才可以放入且不允许出现相同元素,添加的元素要求存在自然顺序(整数,小数)
存在比较方式,需要告知编译器当前元素的比较规则
1.5 Map双边队列
键值对数据模式,理解方便阅读性强
interface Map<K, V>
	K 约束双边队列键对应数据类型 V 约束双边队列值对应数据类型
--| class HashMap<K, V>
	底层采用哈希结构,用于存储的校验数据是K
--| class TreeMap<K, V>
	底层采用二叉树结构,用于比较判断的数据是K

2 常用方法

2.1 Collection<E>接口常用方法:
增:
	add(E e); 添加用户指定数据类型到当前Collection集合中
	addAll(Collection<? extends E> c); 添加参数集合到当前集合中,要求参数集合中保存的数据类型是E类型本身或其子类对象

删:
	remove(Object obj); 删除当前集合中用户指定的对象,对象类型是Object类型,不限制用户输入的数据
	removeAll(Collection <?> c); 在当前调用方法的集合对象中,删除参数集合和当前集合的交集.参数集合中保存的数据类型不限制
	retainAll(Collection<?> c); 在当前方法的集合对象中,保留参数集合和当前集合的交集,参数集合中保存的数据类型不限制
	clear(); 删除集合中所有元素.清空集合

查:
	int size(); 当前集合中有效元素个数
	boolean isEmpty(); 判断当前集合是否为空
	boolean contains(Obiect obj); 判断当前集合中是否包含指定元素
	boolean containsAll(Colection<?> c); 判断当前参数集合是否是当前结合的子集合
	Obiect[] toArray(); 返回当前集合中所有元素的Object类型数组
2.2 List集合常用方法
增:
	add(E e); 添加当前集合要求元素,到当前集合的末尾
	addAll(Collection<? extends E> c); 添加另一个集合到当前集合末尾,要求参数集合中的存储元素是当前集合存储元素本身或者其他子类对象
	add(int index, E e); 在当前集合指定下标位置,添加集合要求数据类型元素
    addAll(int index, E e); 在当前集合指定下标位置,添加另一个集合对象,要求参数集合中的存储元素是当前集合存储元素本身或者其他子类集合
    
删:
	remove(Object obj); 删除当前指定集合中的指定元素
	removeAll(Collection<?> c); 在当前集合中,删除当前集合和参数集合的交集
	retainAll(Collection<?> c); 在当前集合中,保留当前集合和参数集合的交集
	clear(); 清空整个集合
	E remove(int index); 删除当前集合中指定下标的元素,返回值类型是被删除的元素
	
改:
	E set(int index, E e); 使用指定元素,替换指定下标元素,返回值是被替换的元素
	
查:
	int size(); 当前集合中有效元素个数
	boolean isEmpty(); 当前集合是否为空
	boolean contains(Object obj); 判断当前集合中是否包含对应指定元素
	Boolean ContainsAll(Collection<?> c); 判断当前参数集合是否是当前集合的子集合
	Object[] 同Array(); 返回当前集合中所有元素的Object类型数组
	E get(int index); 获取指定下标元素
	int indexOf(Object obj); 找出指定元素在List集合中第一次出现的下标位置
	int lastIndexOf(Object obj); 找出指定元素在List集合中最后一次出现的下标位置
	List<E> subList(int beginIndex, int endIndex); 截取子List集合,要求从beginIndex开始,到endIndex,要头不要尾.
2.2.1 LinkedList特征方法
addFirst(E e); 添加指定元素到链表开始位置
addLast(E e); 添加指定元素到链表结束位置
E getFirst(); 获取链表开始位置元素
E getLast(); 获取链表结束位置元素
E removeFirst(); 删除链表开始位置元素
E removeLast(); 删除链表结束位置元素

堆栈
	addList(E e); E getLast(); E removerLast();
	
队列
	addList(E e); E getFirst(); E removerFirst();
2.3 Map方法
增:
	put(K k, V v); 添加当前Map双边队列约束的K和V到当前双边队列
	putAll(Map<? extends K, ? extends v> map); 添加另一个双边队列,要求参数Map中,K和V 分别对应Map对应K类型V类型或其子类
删:
	V remover(Object k); 根据K删除对应键值对
改:
	put(K k, V v); 如果K存在,使用当前V替换原数据
查:
	boolean containsKey(Object key); 判断指定K是否存在
	boolean containsValue(Object Value); 判断指定V是否存在
	Set<K> keySet(); 返回当前Map中所有Key对应的Set集合
	Collection<V> values(); 返回当前Map中所有Value的Collection集合
	V get(Object k); 根据指定K获取对应V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值