9.1 泛型

#####################################基本概念#####################################

数组就是一种容器,可以在其中放置对象或基本类型数据
数组的优势:是一种非常简单的线性序列,可以快速地访问数组元素,效率高。如果从效率和类型检查的角度讲,数组是最好的;
数组的劣势:不灵活,容量需要事先定义好,不能随着需求的变化而扩容。
所以我们需要功能更加强大的容器!请看下图
在这里插入图片描述
首先我们可以看到,这里面有几个接口,第一个接口叫Collection,容器在英文中就是Collection,或者翻译为集合
Map是存放键值对的,它的实现就是HashMap;

#######################################泛型#######################################

泛型是JDK1.5以后增加的,它可以帮助我们建立类型安全的集合;
在这里插入图片描述
一个容器里面可以放多种肉,但是取出很麻烦,取出来还得判断是什么肉,傻傻分不清~~
那么,正规的厨房怎么做呢?
在这里插入图片描述
正规的厨房会在旁边贴上一个标签,表明里面全是羊肉,泛型就是起这样的作用,相当于就是给容器贴上一个标签;
泛型的本质就是数据类型的参数化,我们可以把泛型理解为数据类型的一个占位符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型;
下面来测试一下泛型,下面是没有加泛型的 ??简单程序??

public class TestGeneric {
	public static void main(String[] args) {
		MyCollection mc=new MyCollection();
		mc.set("韩一狗", 0);
		mc.set(9999, 1);
		Integer a=(Integer)mc.get(1);
		String b=(String)mc.get(0);
	}
}

class MyCollection{
	Object[] objs=new Object[5];
	public void set(Object obj,int index)
	{
		objs[index]=obj;
	}
	public Object get(int index)
	{
		return objs[index];
	}
}

泛型一般定义是三个字符,在类的后面加 <T OR E OR V>,下面是添加泛型之后的代码

public class TestGeneric {
	public static void main(String[] args) {
		MyCollection<String> mc=new MyCollection<String>();  //String相当于实参
		
		mc.set("韩一狗", 0);
		mc.set("9999", 1);
		
		String b=mc.get(0);
	}
}

class MyCollection<E>{  //E相当于形参
	Object[] objs=new Object[5];
	public void set(E e,int index)
	{
		objs[index]=e;
	}
	
	public E get(int index)
	{
		return (E)objs[index];  //强转一下
	}
}

也就是说,泛型就是类型,加了泛型之后相当于把类型检查做到编译器这里,提前做了,使得程序更加稳定,可读性更强,以后会经常看到!!!E代表后期传的类型,仅此而已。
9.1.2 容器中使用泛型
List属于java.util里面,打开List的源码:

public interface List<E> extends Collection<E> {
}

里面加了泛型,同时其实现类ArrayList里面也添加了泛型;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值