容器和泛型

心不动则不痛 提交于 2020-02-11 12:42:17

容器概念

容器(Collection):用来装其它对象的对象,比如数组。
数组优势:是一种简单的线性序列,效率高。数组劣势:不灵活,容量需要事先定义好。
容器的内容
容器的内容
Map:存储键值对)

泛型概念

泛型(Generics)是JDK1.5以后增加的,它可以帮助我们建立类型安全的集合。泛型的本质是“数据类型的参数化”。我们可以把“泛型”理解为数据类型的一个占位符(形式参数),即告诉编译器,在调入泛型是必须传入实际类型。
如果不用泛型,功能实现的代码如下:

/**
 * 测试没有泛型的情况,注意内部是Object对象
 */
public class TestGeneric {
	public static void main(String[] args) {
		MyCollection mc=new MyCollection();
		mc.set("jack", 0);
		mc.set(123, 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,E,V>。代码如下:

/**
 * 测试泛型
 */
public class TestGeneric {
	public static void main(String[] args) {
		MyCollection<String> mc=new MyCollection<>();  //这里的<E>相当于实参
		mc.set("Jack", 0);
	
		String b=mc.get(0);								//不需要强制转换了
	
	}
}

class MyCollection<E>{					    			//这里的<E>相当于形参
	Object[] objs=new Object[5];
	
	public void set(E obj,int index) {
		objs[index]=obj;
	}
	
	public E get(int index) {
		return (E)objs[index];       
	}
}

容器中使用泛型

示例:泛型类的在集合中的使用:

public class Test {
	public static void main(String[] args) {
		//以下代码中List、Set、Map、Iterator都是与容器相关的接口
		List<String> list=new ArrayList<String>();
		Set<Man> mans=new HashSet<Man>();
		Map<Integer,Man> maps=new HashMap<Integer,Man>();
		Iterator<Man> iterator=mans.iterator();
	}
}

通过阅读源码,我们发现Collection、List、Set、Map、Iterator接口都定义了泛型,如下所示:

public interface List<E> extends Collection<E>{
-------------------------------------------------
public interface Set<E> extends Collection<E>{
-------------------------------------------------
public interface Map<K,V>{
-------------------------------------------------
public interface Collection<E> extends Iterable<E>{
-------------------------------------------------
public interface Iterator<E>{

因此,我们在使用这些接口及其实现类时,都要使用泛型。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!