类集:
类集的产生解决数组长度固定问题,所以说,他就是一个动态数组
集合类下保存数据的接口有Collection和Map,今天主要回顾Collection
Collection:
首先来说一说Collection和Collections
Collection:集合类的单个对象保存的顶层父接口
Collections:集合类的工具类,其中提供了一系列静态方法,包括有排序、反转等操作
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
Collections.addAll(list,1,3,5,6,8,9);
list.forEach(System.out::print);
System.out.println();
//取得Stream对象
Stream<Integer> stream = list.stream();
//数据过滤,统计集合中所有能被2整除的元素的个数
System.out.println(stream.filter(e -> e % 2 == 0).count());
Stream<Integer> stream1 = list.stream();
System.out.println(stream1.max(Integer::compareTo).get());
}
下面详细介绍Collection,首先先看一下Collection接口的继承关系:
Collection下的接口:List、Set,一般使用List接口较多
Collection接口提供的核心方法:
add(T t):向类集中添加元素
iterator():取得类集的迭代器
List:
List是Collection的子接口,具备了Collection的所有方法,还扩展了两个重要方法(List独有)
public E get(int index)//根据索引下标取得保存的数据
public E set(int index,E element)//根据索引下标更新数据,返回修改前的值
List接口有三个重要子类:ArrayList、Vector、LinkedList。这三个子类在使用时没有任何区别。
ArrayList、Vector、LinkedList关系和区别
相同点:都是List接口下的子类
不同点:
1.LinkedList底层是链表实现,ArrayList、Vector底层是数组实现
因为Linkedlist底层链表,所以从初始化、扩容、遍历上说下ArrayList、Vector的不同:
2.ArrayList采用懒加载策略,在构造方法阶段并不初始化对象数组,在第一次 添加元素时才初始化对象数组,大小为10.
Vector在无参构造执行后将对象数组大小初始化为10
ArrayList扩容时,新数组大小变为原数组的1.5倍
Vector扩容时,新数组大小变为原数组的2倍
Vector应用较老的迭代器Enumeration, ArrayList不支持
3.性能方面:
ArrayList采用异步处理,线程不安全,效率较高
Vector采用sychronized同步方法,线程安全,但性能很低(读读互斥)
LinkedList采用异步处理,线程不安全,频繁在任意位置进行插入与删除使用LinkeList