1.List的集合特点:有序和不唯一
1.1有序
List集合数据存进去的顺序和取出来的顺序一致
List list=new ArrayList<>(); list.add("zs"); list.add("ls"); list.add("ww"); list.add("hh"); list.add("mm"); list.forEach(System.out::println);
1.2不唯一
List集合数据允许添加重复数据
List lis=new ArrayList<>(); lis.add("zs"); lis.add("ls"); lis.add("ww"); lis.add("hh"); lis.add("mm"); lis.add("mm"); lis.forEach(System.out::println);
输入了两个mm,但是并没有重叠在一起,而是显示出来了,所以数据可以重复
2.List集合的三种遍历方法
for,foreach,迭代器三种方式
2.1for
List list=new ArrayList(); list.add("zs"); list.add("ls"); list.add("ww"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); }
2.2 foreach
List list = new ArrayList<>(); list.add("zs"); list.add("ls"); list.add("ww"); for (Object str : list) { System.out.println(str); }
2.3 迭代器
List list = new ArrayList<>(); list.add("zs"); list.add("ls"); list.add("ww"); Iterator iterator = list.iterator(); //hasNext 只判断是否存在,不会下移 //next 会往下执行 while (iterator.hasNext()){ System.out.println(iterator.next()); }
三种遍历运行的效果都是像这样的
3.List集合的三种删除方法
for的正向删除和for的逆向删除及迭代器删除 这三种方式
3.1 for的正向删除
List list=new ArrayList(); list.add("zs"); list.add("ls"); list.add("ww"); list.add("hh"); System.out.println("删除前的大小:"+list.size()); int size = list.size(); for (int i = 0; i < size; i++) { list.remove(0); } System.out.println("删除后的大小:"+list.size());
3.2 for的逆向删除
List list=new ArrayList(); list.add("zs"); list.add("ls"); list.add("ww"); list.add("hh"); System.out.println("删除前的大小:"+list.size()); int size = list.size()-1; for (int i = size; i >=0; i--) { list.remove(0); } System.out.println("删除后的大小:"+list.size());
3.3 迭代器删除
List list=new ArrayList(); list.add("zs"); list.add("ls"); list.add("ww"); list.add("hh"); list.forEach(System.out::println); System.out.println("删除前的大小:"+list.size()); Iterator iterator = list.iterator(); while(iterator.hasNext()){//hasNext只会是判断是否存在,不会移动下标 iterator.next();//next会移动下标 iterator.remove();//然后再删除 } System.out.println("删除后的大小:"+list.size());
这是迭代器的删除运行方式
这是正向删除和逆向删除的运行方式
4.List集合的优化
初始化大小:10 负载因子:1.5 向下取整 10*1.5=15 15*1.5=22.5=22 22*1.5=33 ...
List list=new ArrayList(50);
for (int i = 0; i < 50; i++) {
list.add(i);
System.out.println(i);
getLen(list);
}
public static void getLen(List list){
//获取类对象
Class listClass = list.getClass();
try {
//获取类对象中的属性
Field field = listClass.getDeclaredField("elementData");
//设置权限
field.setAccessible(true);
//获取属性的值
Object[] object =(Object[])field.get(list);
System.out.println("List集合的大小为:"+object.length);
} catch (Exception e) {
e.printStackTrace();
}
}
List集合优化目的在于利用合理的存储空间存下所有元素数据,不多不少,不造成空间浪费。
5.List集合的泛型
泛型:以类型作为参数的类就是泛型
泛型要在jdk>=1.5
List<Integer> list=new ArrayList<>();
list.add(2);
list.add(3);
list.add(4);
list.add(5);
Iterator iterator = list.iterator();
while (iterator.hasNext()){
// //移动并取出
// Object next = iterator.next();
// //类型转换
// int i = Integer.parseInt(next.toString());
int i=(int)iterator.next();
//判断是否是偶数
if(i%2==0){
System.out.println(i);
}
}
6.装拆箱
装箱:值类型到引用类型
拆箱:引用类型到值类型
//装拆箱 // //装箱 int a=10; Integer b=new Integer(a); // // //拆箱 Integer c=new Integer(10); int d=c.intValue();
欧克啦