1、集合概述
1.1、什么是集合?有什么用?
数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它类型的数据。
集合为什么说在开发中使用较多?
集合是一个容器,是一个载体,可以一次容纳多个对象。
在实际开发中,假设连接数据库,数据库当中有10条记录,
那么假设把这10条记录查询出来,在java程序中会将10条
数据封装成10个java对象,然后将10个java对象放到某一个
集合当中,将集合传到前端,然后遍历集合,将一个数据一个
数据展现出来。
1.2、集合不能直接存储基本数据类型,另外集合也不能直接存储java对象,
集合当中存储的都是java对象的内存地址。(或者说集合中存储的是引用。)
list.add(100); //自动装箱Integer
注意:
集合在java中本身是一个容器,是一个对象。
集合中任何时候存储的都是“引用”。
1.3、在java中每一个不同的集合,底层会对应不同的数据结构。往不同的集合中
存储元素,等于将数据放到了不同的数据结构当中。什么是数据结构?数据存储的
结构就是数据结构。不同的数据结构,数据存储方式不同。例如:
数组、二叉树、链表、哈希表...
以上这些都是常见的数据结构。
你往集合c1中放数据,可能是放到数组上了。
你往集合c2中放数据,可能是放到二叉树上了。
.....
你使用不同的集合等同于使用了不同的数据结构。
new ArrayList(); 创建一个集合,底层是数组。
new LinkedList(); 创建一个集合对象,底层是链表。
new TreeSet(); 创建一个集合对象,底层是二叉树。
.....
1.4、集合在java JDK中哪个包下?
java.util.*;
所有的集合类和集合接口都在java.util包下。
1.5、在java中集合分为两大类:
一类是单个方式存储元素:
单个方式存储元素,这一类集合中超级父接口:java.util.Collection;
一类是以键值对儿的方式存储元素
以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map;
List集合存储元素特点有序可重复,存储的元素有下标-
有序实际上是说存进去是这个顺序,取出来还是这个顺序。这星的顺序不是说按照大小排序.
有序是因为Lst集合都有下标下标从0开始。以1递增。
1.3.1 List接口概述
ArrayList集合底层采用了数组这种数据结构
ArrayList集合是非线程安全的
1、ArrayList集合初始化咨量是10
2. ArrayList集合底层是objectl类型的数组Object[]
3、扩容到原来的1.5倍.
4、建议含定一个预估计的初始化容量。减少数组的扩容次数,这是Arraylist集合比较重要的优化策略
.5、数组的忧点:
检索效率比较高
随机增删元素的效率比较低
向数组末尾添加元素。效率还是很高的.
为什么ArrayList查询速度快?(ArrayList底层是基于数组实现,可以根据元素下标进行查询,查询方式为(数组首地址+元素长度*下标,基于这个位置读取相应的字节数就可以了),如果数组存的是对象,怎么根据下标定位元素所在位置?(对象数组每个元素存放的是对象的引用,而引用类型如果开启指针压缩占用4字节,不开启则占用8字节,所以对象数组同样适用上面的公式)
ArrayList:查询数据比较快,添加和删除数据比较慢(基于可变数组)
LinkedList集合底层采用了双向链表数据结构
2、对于链表数据结构来说,随机增删效率高。检索效率较低.
3、链表中的元素在空间存储上,内存地址不连续
vector集合底层
采用了数组这种数据结构
vector集合是线程安全的.
vector所有的方法都有synchroniad共犍亭修饰所以线程安全,但是效率较低,现在保证级程安全有别的方案。所以 vector使用较少了.,
Vector:
Vector初始化容量是10.
扩容为原容量的2倍。
底层是数组。
Vector底层是线程安全的。
怎么得到一个线程安全的List?:
Collections.synchronizedList(list);
Stack是继承Vector实现了一个栈,栈结构是后进先出,目前已经被LinkedList取代
问题引出?
当我们从集合中找出某个元素并删除的时候可能出现一种并发修改异常问题。
哪些遍历存在问题?
迭代器遍历集合且直接用集合删除元素的时候可能出现。
增强for循环遍历集合且直接用集合删除元素的时候可能出现。
哪种遍历且删除元素不出问题
使用for循环遍历并删除元素不会存在这个问题。
迭代器遍历集合但是用迭代器自己的删除方法操作可以解决
迭代器迭代元素的过程中不能使用集合对象的remove方法删除元素,
要使用迭代器Iterator的remove方法来删除元素,防止出现异常:
ConcurrentModificationException
1.6 Collections工具类
Collections位于java.util包中,提供了一系列实用的方法,如:对集合排序,对集合中的内容查找等
LinkedList真的比ArrayList添加元素快?
https://blog.csdn.net/JustinQin/article/details/119994874