泛型

JDK1.5之后出现的泛型机制

泛型出现的原因

泛型出现的好处:

1.将运行时期的问题classcastexception转到了编译时期

2.避免了强制转换的麻烦

泛型的书写格式

自定义泛型类


<>:什么时候用?当操作的引用数据类型不确定的时候,就使用<>。将要操作的额引用数据类型转入即可

其实<>就是一个用于接收具体引用数据类型的参数范围

在程序中,只要用到了带有<>的类或者接口,就要传入具体的引用数据类型

泛型技术是给编译器使用的技术,用于编译时期,确保了类型的安全

运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除

为什么擦除呢?因为为了兼容运行的类加载器


泛型的补偿:在运行时,通过获取元素的类型进行转换动作,不用使用者再强制转换了

============================================================

泛型类:在jdk1.5后,使用泛型来接收类中要操作的引用数据类型

泛型类:什么时候用?当类中的操作的引用数据类型不确定的时候,就使用泛型来表示

=============================================================

泛型方法:

当方法静态时,不能访问类上定义的泛型,如果静态方法使用泛型,只能将泛型定义在方法上

必须放在返回值类型的前面

==============================================================

泛型接口:

package cn.itcast.p4.generic.define.demo;

public class GenericDefineDemo5 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		InterImpl in = new InterImpl();
		in.show("abc");
		
		InterImpl2<Integer> in2 = new InterImpl2<Integer>();
		in2.show(5);
	}
}

//泛型接口,将泛型定义在接口上。 
interface Inter<T>{
	public void show(T t);
}


class InterImpl2<Q> implements Inter<Q>{
	public void show(Q q){
		System.out.println("show :"+q);
	}
}




class InterImpl implements Inter<String>{
	public void show(String str){
		System.out.println("show :"+str);
	}
}

泛型的通配符:?   未知类型


可以对类型进行限定:

? extends E:接收E类型或者E的子类型对象,上限,一般在存储元素的时候用,因为这样取出都是按照上限类型来运算的,不会出现安全隐患

? super E:接收E类型或者E类型的父类型,下限,通常对集合中的元素进行取出操作时,可以使用下限

========================================================================

集合的一些技巧:

需要唯一吗?

需要:set   

         需要制定顺序:

                           需要:TreeSet

                          不需要:HashSet

                         但是想要一个和存储一致的顺序(有序):LinkedHashSet

不需要:List

         需要频繁增删吗?

                             需要:LinkedList

                           不需要:ArrayList

           

如何记录每一个容器的结构和所属体系呢?

看名字:

List:

       ArrayList

       LinkedList

Set:

       HashSet

       TreeSet

后缀名就是该集合所属的体系

前缀名就是该集合的数据结构

看到array:就要想到数组,就要想到查询快,有角标

看到link:就要想到链表,就要想到增删快,就要想到add   get  remove   first   last的方法

看到hash:就要想到hash表,就要想到唯一性,就要想到元素需要覆盖hashcode和equals方法

看到tree:就要想到二叉树,就要想到排序,就要想到comparable,comparator

而且通常这些常用的集合容器都是不同步的


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值