学习内容:
集合框架:
1.ArrayList:
只能存入引用类型,JDK1.5版本之后可以存入数值,是因为有自动装箱机制,数值转为引用类型
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Test { public static void main(String[] args) { ArrayList list = new ArrayList();//只能放入引用类型 list.add("abc"); list.add(1);//自动装箱 list.add(123); } }
2.Collection接口
Collection接口可以由其实现类向上转型实例化:
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Test { public static void main(String[] args) { Collection<String> coll = new ArrayList<String>(); coll.add("3号"); coll.add("1号"); } }
remove方法要注意的一点:
如果有list内多个相同值,会移除找到的第一个值
3.迭代器
迭代器Iterator可用来遍历集合
扫描二维码关注公众号,回复:
24366 查看本文章
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Test { public static void main(String[] args) { Collection<String> c = new ArrayList<String>(); c.add("P90"); c.add("rush"); c.add("B"); c.add("GO"); Iterator<String> it = c.iterator();//迭代器,也要添加泛型 System.out.println(it.hasNext());//是否有下一个值,返回布尔值 System.out.println(it.next());//获取对象 while(it.hasNext()) { String s = it.next(); System.out.println(s); } //for循环 for(Iterator<String> i = c.iterator();it.hasNext();) { System.out.println(it.next()); } //利用for循环,迭代器使用完毕自动回收 } }
4.泛型
(1)如果不添加泛型可能会使得对象转型报错:
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Test { public static void main(String[] args) { Collection co = new ArrayList(); co.add("123"); co.add(123); co.add(1.45); Iterator t = co.iterator(); while(t.hasNext()) { String ss = (String)t.next();//没有泛型,类型转换报错 ClassCastException System.out.println(ss.length()); } } }
(2)泛型通配符:
定义泛型通配符,可使集合存入任意类型值
public static void get2(Collection<?> coll) {//通配符 Iterator<?> it = coll.iterator(); while(it.hasNext()) { System.out.println(it.next()); } }
(3)泛型边界
import java.util.ArrayList; public class Test3 { public static void main(String[] args) { ArrayList<Chef> cf = new ArrayList<Chef>(); ArrayList<? extends Emp> list = cf;//? extends Emp 表示这是一个Emp泛型的子类泛型 Chef c = new Chef("1号",40); cf.add(c); Emp e = new Emp("a",30); //list.add(c);//但是,不能往里面放东西 因为list的泛型 有可能是Emp类的其他子类 ArrayList<? super Emp>liste = new ArrayList<Object>(); //? super Emp 表示 liste的泛型是Emp或者其父类泛型 liste.add(c);//也可以放子类 liste.add(e);//可以放Emp类 //但这样取出时有风险,如果集合内有Emp的其他子类,那例如Chef c = (Chef)liste.get(index);有可能报错 } }