一、List
1、UML:统一建模语言
2、Colletion接口是List和Set的父接口,不是Map接口的父接口
3、.List特点:有序、对象可以重复
3、1 有序:元素添加的顺序与输出的顺序一致
3、2 对象可以重复(不唯一);
4、List删除
·
List lst=new ArrayList<>();
lst.add("zs");
lst.add("ls");
lst.add("ww");
lst.forEach(System.out::println);
//4.遍历方式(3种)
//4.1 for(下标)
System.out.println("=======for(下标)===========");
for (int i = 0; i < lst.size(); i++) {
System.out.println(lst.get(i));
}
//4.2 foreach
System.out.println("=======foreach============");
for (Object o : lst) {
System.out.println(o);
}
//4.3 迭代器iterator
System.out.println("======迭代器iterator=================");
//快捷键:ctrl+1
//获取迭代器
Iterator it = lst.iterator();
//循环遍历
while(it.hasNext()) {
//next():获取元素并移动下标
//hasNext():判断集合中的下一个元素是否存在,不取出元素,也不移动下标
System.out.println(it.next());
}
//5.删除(3种)
System.out.println("=======删除==============");
System.out.println("删除之前的集合大小:"+lst.size());
//5.1 for(正向删除)
//第一次 i=0 lst.size()=4;
//第一次 i=1 lst.size()=3;
//第一次 i=2 lst.size()=2;
/*int len=lst.size();
for (int i = 0; i < len; i++) {
lst.remove(0);
}*/
//5.2 for(逆向删除)
/*lst.size();
for (int i = lst.size()-1; i>=0; i--) {
lst.remove(i);
}*/
//5.3 迭代器(推荐)
/*Iterator it1 = lst.iterator();
while(it1.hasNext()) {
//先移动,再删除
it1.next();
it1.remove();
}*/
//清空
lst.clear();
System.out.println("删除之后的集合大小:"+lst.size());
二、List优化
核心概念:
1) 负载因子(扩容比例)=1.5
2) 初始化容量=10
3) 向下取整 floor ceil
公式:容器大小*1.5
public static void main(String[] args) {
List lst=new ArrayList<>(50);
for (int i = 0; i <50; i++) {
lst.add(i);
System.out.println(i);
genLen(lst);
}
}
public static void genLen(List lst){
try {
Field field =lst.getClass().getDeclaredField("elementData");
field.setAccessible(true);
Object[] obj=(Object[]) field.get(lst);
System.out.println("当前集合的大小:"+obj.length);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
三、 泛型:以类型作为参数的类叫做泛型
特点:
1)提高程序健壮性
2)简化代码
3)泛型的默认类型Object
泛型的默认值是Object
List<Integer> lst=new ArrayList<>();
lst.add(6);
lst.add(7);
lst.add(2);
lst.add(5);
Iterator it=lst.iterator();
while(it.hasNext()) {
Object val=it.next();
int num=Integer.parseInt(val.toString());
if(num%2==0) {
System.out.println(num);
}
}
四. 装箱、拆箱
值类型->引用类型 装箱
引用类型->值类型 拆箱
jdk1.5之后引入了自动装箱及自动拆箱功能
八大基础类型:int/short/long/byte/float/double/boolean/char(值类型)
int a=10;
Integer a1=new Integer(a);
System.out.println(a1);
//拆箱:引用类型-->值类型
int b=a1.intValue();
System.out.println(b);