单列集合 Collection
> 💡 Tips:Collection 代表单列集合,每个元素(数据)只包含一个值; > > 应对不同的业务场景需要,衍生很多实现类; > >  >Collection集合的常见方法
遍历集合的方法
1. 迭代器遍历; 2. 增强for循环遍历; 3. lambda表达式遍历;List系列集合:有序、可重复,有索引
ArrayList:基于数组,查询快,增删慢
LinkedList:基于双链表,查询慢,增删快
Set:不重复、无索引
哈希值
HashSet:基于哈希表:数组+链表+红黑树;增删改查都较快
LinkedHashSet:基于哈希表:数组+双链表+红黑树;有序、不重复、无索引;
TreeSet:不重复、无索引、可排序(默认升序,可降序,利用红黑树实现)
集合的并发修改异常:
遍历删除集合的数据会出现bug,会漏删数据;增强for循环、 lambda表达式forEach都无法避免,只能使用迭代器Iterator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class ExcepctionListTest01 {
public static void main(String[] args) {
List<String> ls = new ArrayList<>();
ls.add("白骨精");
ls.add("孙悟空");
ls.add("李玉刚");
ls.add("李四");
ls.add("李二牛");
ls.add("李世民");
ls.add("小李子");
ls.add("李元霸");
ls.add("唐三藏");
ls.add("白骨精");
System.out.println(ls);
for (String l : ls) {
System.out.println(l);
}
System.out.println("---------------");
// 需求:找出集合中全部带李的名字,并从集合中删除;
for (String l : ls) {
if(l.contains("李")){
continue;
}
System.out.println(l);
}
// 遍历集合的数据会出现bug,会漏删数据;
// System.out.println("---------------");
// Iterator<String> it= ls.iterator();
//
// while (it.hasNext()){
// String name =it.next();
// if(name.contains("李")){
// ls.remove(name);
// }
// System.out.println(ls);
// }
// System.out.println("============");
// for (int i = 0; i < ls.size(); i++) {
// String name = ls.get(i);
// if(name.contains("李")){
// ls.remove(name);
System.out.println(ls);
// i--;
// }
// }
// for (String l : ls) {
// System.out.println(l);
// }
System.out.println("==========");
Iterator<String> it = ls.iterator();
while (it.hasNext()){
String name = it.next();
if(name.contains("李")){
it.remove();
}
}
for (String l : ls) {
System.out.println(l);
}
}
}
可变参数:test(int...nums)
Collections
双列集合Map(key:value)键值对(key不能重复)
Map集合的遍历方式
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapTest03 {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("one",1);
map.put("two",2