javaAPI-集合框架(泛型)
来源:互联网 发布:淘宝有哪几种营销方式 编辑:程序博客网 时间:2024/05/20 01:12
泛型概述
泛型:JDK1.5版本以后出现的新特性。用于解决安全问题,是一个类型安全机制。
好处:
1.将运行时期出现的问题(ClassCastException)转移到了编译时期,方便于程序员解决问题,让运行时期问题减少,安全。
2.避免了强制转换的麻烦。
泛型格式:通过<>来定义要操作的引用数据类型。
在使用java提供的对象时,什么时候写泛型呢?
通常在集合框架中很常见。只要见到<>就要定义泛型。
泛型类
什么时候定义泛型类?
当类中要操作的引用数据类型不确定的时候。早期定义Object来完成扩展。现在定义泛型来完成扩展。
示例:
class Utils<T>{private T t;public void setObject(T t){this.t = t;}public T getObject(){return t;}}
泛型方法
泛型类定义的泛型在整个类中有效。如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。所以,为了让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上。
静态泛型方法
特殊之处,静态方法不可以访问类上定义的泛型。
如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
例:public static <T> void method(T t){}
泛型定义在接口上示例:
interface Inter<T>{void show(T t);}class InterImpl<T> implements Inter<T>{public void show(T t){System.out.println("show :"+t);}}class GenericDemo{public static void main(String[] args) {InterImpl<Integer> i = new InterImpl<Integer>();i.show(4);}}
类型不确定时怎么办?
当我们对象的类型不确定的时候,用<?>。如:public static void demo(ArrayList<?> al){}
<?>与<T>的区别
T:代表具体类型,传进来什么就是什么类型。
?:代表不确定类型,它是一个通配符,也可以理解为占位符。
用<?>好处:提高了扩展性。弊端:不能使用类型的特有方法。如:length();
泛型限定
泛型限定有两个限制 1.上限 我可以向上限定 2.下限 我可以向下限定
格式:
<? extends E>:可以接收E类型或者E的子类型。上限
<? super E>:可以接收E类型或者E的父类型。下限
<? super E>示例:
import java.util.*;class GenericDemo {public static void main(String[] args) {TreeSet<Student> ts = new TreeSet<Student>(new Comp());ts.add(new Student("abc03"));ts.add(new Student("abc02"));ts.add(new Student("abc06"));ts.add(new Student("abc01"));Iterator<Student> it = ts.iterator();while(it.hasNext()){System.out.println(it.next().getName());}TreeSet<Worker> ts1 = new TreeSet<Worker>(new Comp());ts1.add(new Worker("wabc--03"));ts1.add(new Worker("wabc--02"));ts1.add(new Worker("wabc--06"));ts1.add(new Worker("wabc--01"));Iterator<Worker> it1 = ts1.iterator();while(it1.hasNext()){System.out.println(it1.next().getName());}}}class Comp implements Comparator<Person>{public int compare(Person p1,Person p2){return p2.getName().compareTo(p1.getName());}}class Person{private String name;Person(String name){this.name = name;}public String getName(){return name;}public String toString(){return "person :"+name;}}class Student extends Person{Student(String name){super(name);}}class Worker extends Person{Worker(String name){super(name);}}
总结:
泛型的好处是避免了强转,把错误移到了编译时期,提高了安全性。
泛型除了可以定义在类上,还可以定义在方法上。
泛型限定是用于泛型扩展用的。如果不明确类型可以用<?>来占位。
- javaAPI-集合框架(泛型)
- JAVAAPI(字符串与集合框架)
- javaAPI-集合
- javaAPI 集合
- javaAPI:集合框架2(Map集合及其子集合)
- 黑马程序员——第五章 JavaAPI之集合框架
- 第十五天-JavaAPI(集合类、泛型、Map)
- 黑马程序员——012——JavaAPI④(集合框架(泛型)、泛型类、泛型方法、泛型限定)
- 集合框架 Queue---在JavaApi文档中是这样说BlockingQueue
- 黑马程序员——013——JavaAPI⑤(集合框架(Map)、Collections)
- javaAPI(Collection单列集合1)
- 黑马程序员——010——JavaAPI②(集合框架(List之ArrayList)、迭代器、枚举)
- 黑马程序员——011——JavaAPI③(集合框架(List之LinkedList)、(Set之HashSet)
- Java笔记4 JavaAPI<1>集合框
- javaAPI(Collection单列集合2)
- javaAPI(Map双列集合)
- JavaAPI
- JavaAPI
- 线段树(一)HDU1166
- [LeetCode 24] Swap Nodes in Pairs
- 静默(延伸)
- [LeetCode 35] Search Insert Position Solution
- [LeetCode 36] Valid Sudoku Solution
- javaAPI-集合框架(泛型)
- [Codeforces]Coder-Strike 2014 - Round 1
- shell程序之逐行读取一文件中的参数且使用此参数每次执行5分钟
- Coder-Strike 2014 - Round 1
- c++ 调用 python 实例 涉及 类 多参数 列表作为参数
- Mint linux中调整屏幕亮度的方法
- LA 4986 hdu3756 Dome of Circus 三分答案
- javaAPI-集合
- winXP(同时也适用于win7)系统使用打印机时“后台处理程序服务没有运行”时的解决办法