集合之泛型

集合之泛型

未使用泛型

以下代码没有使用泛型:

package com.javalearn.generic;

import com.sun.org.apache.bcel.internal.generic.INSTANCEOF;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TestForgeneric {
    public static void main(String[] args) {
        List myList = new ArrayList();
        Animal a = new Animal();
        myList.add(a);
        Iterator it = myList.iterator();
        while (it.hasNext()) {
            Object obj = it.next();  //obj无法调用move方法,必须向下转型
            if (obj instanceof Animal) {
                Animal a2 = (Animal) obj;  // 转型
                a2.move();
            }
        }
    }
}

class Animal {
    public void move() {
        System.out.println("动物在动");
    }
}

输出结果:

动物在动

使用泛型

下面使用泛型改进上面的代码:

package com.javalearn.generic;

import com.sun.org.apache.bcel.internal.generic.INSTANCEOF;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TestForgeneric {
    public static void main(String[] args) {
        List<Animal> myList = new ArrayList<Animal>();  // 只能存Animal,new后面的Animal可省略
        Animal a = new Animal();
        myList.add(a);
        Iterator<Animal> it = myList.iterator();
        while (it.hasNext()) {
            Animal obj = it.next();  // 使用泛型后每次都返回Animal类型
            obj.move();
        }
    }
}

class Animal {
    public void move() {
        System.out.println("动物在动");
    }
}

输出结果:

动物在动

自定义泛型

以下代码使用自定义泛型:

package com.javalearn.diygeneric;

public class TestFordiyGenric {
    public static void main(String[] args) {
        People<String> p = new People<>();  // String为实际的atype,若定义了泛型但不使用泛型则默认为Object
        p.write("一堆字");
    }
}

class People<atype> {  // atype为自定义泛型,只是一个符号,随便写,一般写E和T
    public void write(atype o) {  // 规定此方法只能传atype这一种类型的参数
        System.out.println("写了:"+o);
    }
}

输出结果:

写了:一堆字

增强for循环

有了泛型,便于使用增强for循环遍历集合:

package com.javalearn.foreach;

import java.util.ArrayList;
import java.util.List;

public class TestForEach {
    public static void main(String[] args) {
        List<String> strList = new ArrayList<>();
        strList.add("good");
        strList.add("bad");
        for (String s:strList) {  // 元素:集合
            System.out.println(s);
        }
    }
}

输出结果:

good
bad
上一篇:02 Spark架构与运行流程


下一篇:60. 排列序列