Conllection接口:存储无序且不唯一的一组对象
List与Set:都是继承于Conllection接口
List:存储有序但不唯一的一组对象
Set:存储无序但唯一的一组对象
普通for循环和增强for循环,效果都一样
但是如果需要用到下标,就必须使用普通for循环
如果不需要用到下标,可以优先考虑用增强for循环
泛型:在创建集合框架对象的时候,就指定该集合框架只存储某一类型
List中的remove方法
如果remove是按照指定对象进行删除时,只删除集合中第一个匹配的元素,不会把所有该对象都删除
ArrayList中的remove方法必须传参
LinkedList中的remove方法可以不传参,当不传参时,默认删除集合中的第一个元素
ArrayList和LinkedList的区别
存储方式:
ArrayList实现了长度可变的数组,在内存中分配连续的空间。
LinkedList采用链表存储方式。
适用场合:
ArrayList遍历元素和随机访问元素的效率比较高,插入、删除、修改操作频繁时性能低下。
因为ArrayList中存储的地址是连续的,所以遍历比较高,在插入删除修改的时候,也需要通过下标一个一个的遍历才能执行这些操作
比如:插入的时候,插入到第三个位置,那么第三个位置的元素开始一直到最后一个元素都要通过遍历的方式一个一个的向后移动一个位置
删除的时候,比如删除第三个位置,那么第四个位置的元素开始一直到最后一个元素都要向前移动一个位置
查询的时候,直接根据索引位置无脑向后找就是了
LinkedList插入、删除、修改元素时效率较高,查找效率较低。
查询效率比较低,是因为他的元素存储地址不是连续的,每找到一个元素,就要去看下一个元素是谁以及指向的下一个地址在哪,相当于每次不仅要找两个数据,并且因为地址不连续,所以有空间转移的时间损耗
插入删除的效率比较高,是因为插入和删除的时候随时随地可以断开链接,然后重新设置两个位置中的指针。
Map集合————以键值对(key-value)的方式存储一组数据/对象
Map集合使用泛型时,根据要存储的key和value是什么类型,进行分别泛型
比如key是String,value也是String: Map<String,String>
比如key是String,value也是Student类型: Map<String,Student>
比如key是String,value也是Object类型: Map<String,Object>
比如key是Integer,value也是Object类型: Map<Integer,Object>
遍历map集合,建议使用lamada表达式的方式
studentMap.forEach(
(k, v) -> {
System.out.println(k + "\t" + v.getStuName());
});
Collections集合操作工具类
Collections.sort(list);对list中的对象进行排序,通常是按照对象的某个属性进行排序
使用该方法时,必须保证list中的对象实现了Comparable接口并重写了compareTo的方法,否则无法排序且会报错
lamada表达式排序:
//倒序
Collections.sort(studentList, (first, second) -> second.getStuNo()-first.getStuNo());
//正序
Collections.sort(studentList, (first, second) -> first.getStuNo()-second.getStuNo());