I学霸官方免费教程三十四:Java集合框架之泛型集合

泛型集合

泛型集合不是指某种集合,而是指在集合的基础上增加了泛型。

泛型集合中,一旦传入了泛型参数“类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

I学霸官方免费教程三十四:Java集合框架之泛型集合的相关文章

I学霸官方免费教程三十:Java集合框架之List集合

集合框架 在数组的使用过程中可以看到,想要向数组中插入元素和删除元素非常麻烦,而且数组的长度是无法改变的.java为我们提供了批量存储数据更加方便的容器,就是集合. 集合和数组的作用一样,都是为了使用一个变量来存储一批数据的:但集合使用起来更加方便,而且集合的长度是可以变化的. List接口 List集合可以存储有序的,可重复的数据: 常用的子类是ArrayList和LinkedList两个类 ArrayList类 这是一个底层由数组实现的集合类,是对数组进行了封装. 实例: package c

I学霸官方免费教程三十:Java基础教程之泛型

泛型 先给大家举个例子:如现在有一家工厂,可以生产手机,也可以生产电脑.以后还可能生产其他产品.如果给某个工厂加上了泛型,就规定了这个工厂只能生产手机或电脑,不能再生产其他产品了. 实例: package generic; /**  * 产品枚举Product  * @author 学霸联盟 - 赵灿  */ public enum Product { 手机,电脑 } package generic; /**  * 手机类Phone  * @author 学霸联盟 - 赵灿  */ public

I学霸官方免费教程三十二:Java集合框架之Set集合

Set接口 Set集合是无序的.元素不可重复的结合常用集合类有HashSet和TreeSet HashSet类常用的两种List集合各有各的优点,那么有没有同时具备这两种List集合的优点的集合呢?答案是肯定的,就是Set集合. 实例: package collection.set.hashSet; import java.util.HashSet; import java.util.Iterator; /**  * 演示HashSet  * @author 学霸联盟 - 赵灿  */ publ

I学霸官方免费教程三十一:Java集合框架之List集合

集合框架 在数组的使用过程中可以看到,想要向数组中插入元素和删除元素非常麻烦,而且数组的长度是无法改变的.java为我们提供了批量存储数据更加方便的容器,就是集合.集合和数组的作用一样,都是为了使用一个变量来存储一批数据的:但集合使用起来更加方便,而且集合的长度是可以变化的. List接口 List集合可以存储有序的,可重复的数据:常用的子类是ArrayList和LinkedList两个类 ArrayList类 这是一个底层由数组实现的集合类,是对数组进行了封装. 实例: package col

I学霸官方免费教程三十三:Java集合框架之Map集合

Map接口 Map集合采用键值对(key-value)的方式存储数据,其中键不可以重复.值可以重复. 常用类有HashMap.TreeMap和Properties HashMap类 假如,现在我有一个集合,集合中存储着一批WiFi的名称和密码,现在要求通过名称快速找到密码.这样的需求使用List集合实现起来非常困难,Java为我们提供了另一种形式的集合,可以很好的解决这样的问题.就是Map集合. 实例: package map.hashMap; import java.util.HashMap;

I学霸官方免费教程三十六:Java数据结构之双向链表结构

数据结构之双向链表 例如:现有双向链表TwoWayLinked中存储着1,2,3,4四个元素,那么集合对象中会有4个节点A.B.C.D,由上述结构可以知道,节点A中存储着元素1和节点B:节点B中存储着元素2和节点A和节点C,节点C中存储着元素3和节点B和节点D,节点D中存储着元素4和节点C.如果现在要在元素2和3中间插入一个元素5: 过程如下: 1.创建节点E,E中存储元素5 2.将E中的上一个节点赋值为节点B 3.将B中的下一个节点修改为节点E 4.将E中的下一个节点赋值为节点C 5.将C中的

I学霸官方免费教程二十四:Java常用类之随机数 Math类和Random类

咱先了解即可 Math类:数学类,包括abs()求绝对值,sin()正弦函数,cos()余弦函数等等Random类:获取各种数据类型的随机数 实例: import java.util.Random; /**  * 演示获取随机数  * @author 学霸联盟 - 赵灿  */ public class MathDemo { public static void main(String[] args) { //创建Random对象 Random random = new Random(); //

I学霸官方免费教程三十五:Java集合框架之Collection接口和Collections类

Collection接口 Collection接口是List和Set接口的父接口,其中主要定义了一些集合基本操作的方法,包括与Iterator之间的关系List  extends  CollectionArrayList  implements  ListLinkedList  implements  ListVector  implements  ListSet  extends  CollectionHashSet  implements  SetSortedSet  extends  Se

I学霸官方免费教程三十八 :Java基础教程之异常

异常 程序中不正常的情况分为两大类:错误(Error)和异常(Exception) 错误(Error):程序本身无法对这种不正常的情况进行处理,将会导致程序崩溃:例如:内存耗尽错误,JVM崩溃错误等异常(Exception):程序可以特殊的代码,对不正常的情况进行捕获和处理,程序可以继续运行:例如:除零异常,空指针异常,数组下标越界异常 捕获异常 语法格式1: try{  //可能出现异常的代码   }catch(异常类 变量名){ //出现异常后的处理代码 //printStackTrace(