JAVA Class15

学习内容:

集合框架:

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);有可能报错
    }
}

 

猜你喜欢

转载自www.cnblogs.com/whwjava/p/8855358.html