集合第一天
集合
(集合就是一个容器,存储对象的)
一个数据 变量
多个同类型数据 数组
多个不同类型数据 对象
多个对象 对象数组/集合
集合中存储的时对象的地址值 切记
一 集合的体系特点
Collection 元素有的有序,有的无序,有的唯一,有的可重复
list 列表 元素有序,可重复
包含:ArrayList 数组结构 (查询多)
Vector 数组结构
LinkedList 链表结构(增删多)
set 不保证元素的插入顺序,和迭代顺序一致,元素唯一
包含:Hashset 哈希表结构
TressSet 二叉树结构
二 Collection集合的常用API
java.util
Collection 层次结构中的根接口
集合是容器 ,容器都可以 增删改查(集合发现自己容量不足时,集合会自己增加容量)
注意:
1.集合中只能存储对象
2.集合中的Collection remove 以及 indexof lastIndexof 通过对象的equals函数进行查找
1.增
boolean add(E e)
2.删
void clear() 删除所有元素
boolean remove(Objict o) 删除指定元素
判断 : boolean contains(Objict o ) 容器中是否包含指定元素
boolean isEmpty() 是空容器么?
3.改查
Iterator<E> iterator()
next 指针会动
hasNext 指针不动
Collection <String> a = new ArrayList<>();
a.add("1");
a.add("2");
a.add("3");
a.add("4");
a.add("5");
(先用hasNext 判断下个元素是否存在 ,存在循环继续 ,并用next拿出元素)
for (Iterator<String> iterator = a.iterator();iterator.hasNext();){
Object c = iterator.next();
System.out.print(" c = " + c);
获取结合中元素的个数
int size()
减少理论空间,让理论容量和实际容量相等
trimToSize()
内部迭代
default Stream parallelStream ()并行流
default Stream stream()串行流
default boolean removeIf()
default Spliterator soliterator()
Stream
1.获取Stream对象
2.中间操作
3.终止操作
forEach 为每一个元素执行一个操作的流
Consumer :消费型接口
Predicate :语言型接口
数组的弊端
1.一旦声明 类型确定
2.一旦声明, 长度确定
泛型
1.5JDK 开始支持 格式:<要存储的数据类型> 7.0之后jvm 可以进行类型推断
优点:1.将运行时异常 转换为编译时错误
2.可以避免类型转换
集合 数组
Object[] toArray()
返回包含此 collection 中所有元素的数组。
<T> T[]
toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。
三 集合的三种遍历方式
1.集合特有的遍历 Iterator
Collection <String> a = new ArrayList<>();
a.add("1");
a.add("2");
a.add("3");
a.add("4");
a.add("5");
(先用hasNext 判断下个元素是否存在 ,存在循环继续 ,并用next拿出元素)
for (Iterator<String> iterator = a.iterator();iterator.hasNext();){
Object c = iterator.next();
System.out.print(" c = " + c);
2.增强for
(既可以遍历集合 也可以遍历数组)
Collection <String> a = new ArrayList<>();
a.add("1");
a.add("2");
a.add("3");
a.add("4");
a.add("5");
for (String b :a){
System.out.print(" b = " + b);
}
3.Lamabda
collection.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
四 常见数据结构
1.栈结构 先进后出 后进先出
2.排列结构 先进先出 后进后出
3.数组结构 查询速度快 (地址值 和索引值定位)查任意数据
删除效率低 将原始数据删除,后面每个数据前移
增加元素效率低 添加位置后,每个元素后移
4.链表结构 在内存中不连续储蓄,每个元素节点包含下个元素的地址
【数据 地址】
查询慢 每一次查询都需要从头开始
增删那一刻比较快 但是找还是慢 (增删头尾 特别快)
分为 单向链表
双向链表
5.二叉树 结构
父节点
左子节点 右子节点
二叉查找树 提升检索性能 对半查找
增删改查 都快
6.平衡二叉树 (数据分布均匀)任意节点的左右两个子树的高度差不超过1,任意节点的左右子树都是一个平衡树
java 通过左旋或则右旋 来保证平衡
7.红黑树 (提高数据增删改查性能)红黑规则来 保证平衡
根据红黑规则 实现了自平衡的排序二叉树
五 List 集合的常用API(有序可重复)
List集合特点 Collection的子接口
1.有序 2.可重复 3.有索引
List特有的遍历方式 普通for循环可用
增加 add (int index ,E element
删 remove(int index)获取并删除
get (int index) 根据索引值获取对应的元素
List 1. 有序 2.可重复 3.有索引
ArrayList :数组结构 (此实现不是同步的,线程不安全)效率较高
当容量不足的时候,按自身的50%扩容
10 --> 15 --> 22 --> 33
void trimToSize(); 将ArrayList的实例和理论相等
Vector:数组结构 线程安全
当容量不足的时候,按自身的100%扩容
10 --> 20 --> 40 --> 80 --> 160
LinkedList:链表结构 线程不安全
set :不保证元素的插入和迭代顺序一致,元素唯一,不能重复
HashSet :哈希表结构 线程不安全
TreeSet: 二叉树结构 线程不安全
浙公网安备 33010602011771号