特点:元素有序,且可重复
遍历:下标,foreach,迭代器
简单数据结构,超出容量自动扩容,动态数组
内部实现是基于基础的对象数组的
随机访问快
不适合随机增加或删除
线程不安全
LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部
线程不安全
LinkedList可被用作堆栈(stack)【包括了push,pop方法】,队列(queue)或双向队列(deque)
以双向链表实现,链表无容量限制,允许元素为null,线程不安全
适合做随机的增加或删除
线程安全
但行性能慢,不建议使用
写时复制
线程安全
适合于读多,写少的场景
写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array
比Vector性能高
最终一致性
实现了List接口,使用方式与ArrayList类似
List<Integer> list=new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
list.add(3);
list.add(4);
for(int i=0;i<list.size();i++){
if(list.get(i)==3) list.remove(i);//当他删除之后 我们的另一个三就会挤上去 所以输出的是 [1,2,3,4]
}
可以删除 为啥?
下标变了
Set
无序,不重复
如果对List容器中的元素去重?上方有操作
foreach,迭代器
扩容:
HashSet
它存储唯一元素并允许空值
依据对象的hashcode来确定该元素是否存在
由HashMap支持
不保持插入顺序
非线程安全
性能参数:初始容量,负载因子
默认值: 初始容量16,负载因子0.75
示例:new HashSet<>(20, 0.5f);
是一个包含有序的且没有重复元素的集合
作用是提供有序的Set集合,自然排序或者根据提供的Comparator进行排序
TreeSet是基于TreeMap实现的
无序,键值对,键不能重复,值可以重复,
键重复则覆盖,没有继承Collection接口
扩容:初始容量16,负载因子0.75,扩容增量1倍
先获取所有键的Set集合,再遍历(通过键获取值)
取出保存所有Entry的Set,再遍历此Set即可
线程不安全,最常用,速度快
内部采用数组来存放数据
基本原理
Table数组中的的Node
流程图中绿色标出的部分为JDK8新增的处理逻辑,目的是在Table[i]中的Node节点数量大于8时,通过红黑树提升查找速度。
线程安全,不太常用
线程安全,比HashTable性能高
key值按一定的顺序排序
添加或获取元素时性能较HashMap慢
因为需求维护内部的红黑树,用于保证key值的顺序
继承HashMap
LinkedHashMap是有序的,且默认为插入顺序
当我们希望有顺序地去存储key-value时,就需要使用LinkedHashMap了
Map<String, String> linkedHashMap = new LinkedHashMap<>();
linkedHashMap.put("name1", "josan1");
linkedHashMap.put("name2", "josan2");
linkedHashMap.put("name3", "josan3");
Set<Entry<String, String>> set = linkedHashMap.entrySet();
Iterator<Entry<String, String>> iterator = set.iterator();
while(iterator.hasNext()) {
Entry entry = iterator.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
System.out.println("key:" + key + ",value:" + value);
}
java.lang.Comparable
java.util.Comparator
提供一组静态方法操作集合
提供一组静态方法操作数组
让程序员写出高效率、干净、简洁的代码
可以方便的对集合进行并行操作,便于使用多核资源
惰性求值
不是数据结构,不保存数据
不会修改原来的数据源,将操作后的数据保存到另一个对象中
map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 skip、 parallel、 sequential、 unordered
forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、 count、iterator
在一次聚合操作中,可以有多个Intermediate,但是有且只有一个Terminal