泛型集合
泛型集合不是指某种集合,而是指在集合的基础上增加了泛型。
泛型集合中,一旦传入了泛型参数“类A”;则只能向这个集合中添加类A或类A子类的对象,不能添加其他对象了。
从泛型集合中获取对象时,对象的类型是类A,而不是Object类型的对象了。
泛型List
例如:上面说到的两种List集合,都可以加入泛型
package collection.list.arrayList; import java.util.ArrayList; import java.util.List; /** * 演示泛型集合的使用 * @author 学霸联盟 - 赵灿 */ public class GenericListDemo { public static void main(String[] args) { //创建对象 Father f = new Father(); Son s = new Son(); /******************* 未使用泛型的集合 ********************/ //父类List的引用指向子类ArrayList的对象,多态的应用 List list = new ArrayList(); //将上面创建的两个对象加入到集合中 //任何对象都可加入 list.add(f); list.add(s); //想要使用对象中特有的成员时,必须强制类型转换 Father f1 = (Father) list.get(0); f1.work(); Son s1 = (Son) list.get(1); s1.play(); /******************* 使用了泛型的集合 ********************/ System.out.println("-----------------------------"); /* * 创建泛型集合对象,可以使用ArrayList,也可以使用LinkedList * 注意: * 1、泛型只能使用引用类型,不能使用基本数据类型 * 例如:List<int>是错误的 * 2、List<Father>和ArrayList<Father>存在继承关系 * 但是ArrayList<Father>和ArrayList<Son>是完全不同的两种类型 * 也不存在继承关系 * 例如:List<Father> fatherList = new ArrayList<Son>(); * ArrayList<Father> fatherList = new ArrayList<Son>(); * 都是错误的 */ List<Father> fatherList = new ArrayList<Father>(); List<Son> sonList = new ArrayList<Son>(); //使用泛型后,该fatherList集合只能存储Father类型 //除了Father以外的任何类型都不能添加到该集合中 fatherList.add(f); //使用泛型后,该sonList集合只能存储Son类型 sonList.add(s); //获取元素时无需强制类型转换 Father f2 = fatherList.get(0); f2.work(); Son s2 = sonList.get(0); s2.play(); } } class Father{ public void work(){ System.out.println("工作"); } } class Son extends Father{ public void play(){ System.out.println("玩耍"); } } 运行结果: 工作 玩耍 ----------------------------- 工作 玩耍
泛型Set
package collection.set.hashSet; import java.util.HashSet; import java.util.Set; /** * 演示泛型Set集合 * * @author 学霸联盟 - 赵灿 */ public class GenericSetDemo { public static void main(String[] args) { //创建HashSet对象 Set<String> set = new HashSet<String>(); //泛型规定只能加入String类型,所以此处不能加入其他类型的元素 set.add("张三"); set.add("李四"); set.add("张三"); //使用了泛型String类型,所以此处泛型集合set中取出的就是String类型 for(String str : set){ System.out.println(str); } } } 运行结果: 李四 张三
泛型Map
package map.hashMap; import java.util.HashMap; import java.util.Map; /** * 演示加入泛型后的Map集合 * * 当使用多个泛型,占位符中间使用英文格式的逗号隔开 * 例如:Map<K,V> * 使用时也是按照位置顺序对应传入 * 例如:Map<String,Integer> * 其Map类中所有的K都会被替换成String * 所有的V都会被替换成Integer * 当想集合中存储值是也要对应数据类型 * * @author 学霸联盟 - 赵灿 */ public class GenericMapDemo { public static void main(String[] args) { //创建泛型Map Map<String,Integer> map = new HashMap<String,Integer>(); /* * 由于创建对象map时使用了泛型 * 所以添加值时只能添加对应的数据类型值 */ map.put("张三", 18); map.put("李四", 26); map.put("王五", 23); /* * 根据key的值获取对应value的值 * 使用泛型后无需强制类型转换 */ int age = map.get("张三"); System.out.println("张三的年龄是:" + age); } } 运行结果:张三的年龄是:18
泛型集合总结
语法格式:集合类名A<类名B>
作用:集合A中只能存储类型B的数据
声明并创建对象:List<String> list = new ArrayList<String>()
注意:1、集合<父类> 和 集合<子类> 是不兼容的两种类型
2、集合<父类> 的对象中,可以存储子类对象;反之,则不能通过
3、加入泛型集合中的元素类型,只能是泛型规定的类型或其子类
4、从泛型集合中取出元素的类型,就是泛型规定的类型
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-08-26 05:41:49