泛型:jdk1.5后的新特性,用于解决安全问题,是一个安全机制。

好处:
1.将运行时的异常出现问题classcastException。转移到了编译时期。方便程序员调试解决问题,让运行事情问题减少,安全。
2.避免了强制转换
泛型格式:通过<>来定义要操作的引用数据类型。
在使用Java中,什么时候使用泛型呢?
通常在集合框架中很常见,只要见到<>就要定义泛型,其实<>就是用来接收类型的。
当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。
如同函数传参数一样。

Comparator<>是一个接口,也可以带泛型,表示指定类型。
//泛型类
什么时候定义泛型类呢?
当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展。现在定义泛型来完成扩展。

class Utils<QQ>{private QQ q;public void setObject(QQ q){this.q=q;}public QQ getObject(){return q;}
}class Tool{private Object obj;public void setObject(Object obj){this.obj=obj;}public Object getObject(){return obj;}}
class GenericDemo3{public static void main(String [] args){Utils<Worker> u=new Utils<Worker>();u.setObject(new Worker());Worker w=(Worker) u.getObject();/*Tool t=new Tool();t.setObject(new getWorker());Worker w=(Worker)t.getObject();*/}
}

/*

*/
泛型方法:

class Demo<T>{//操作对象一建立,对象就固定,这是泛型一个局限性。public void show(T t){System.out.println("show:"+t);}public void print(T t){System.out.println("print"+t);}}

泛型类定义的泛型,在整个类中有效,如果被方法使用。那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已结固定了。

class Demo{public <T> void show(T t){System.out.println("show:"+t);}public <Q> void print(Q q){//指定任意类型System.out.println("print"+q);}public static <W> void method(W t){//静态方法泛型,是在static方法System.out.println("method:"+t);}}
class GenericDemo4{public static void main(String [] args){/*Demo<Integer> d=new Demo<Integer>();d.show(new Integer(4));d.print(9)*//*Demo d=new Demo();d.show("haha");d.show("new Integer(4)");*/Demo<String> d=new Demo<Strring>();d.show(4);d.print(5);d.print("lishi");Demo.method("hahaha");}
}

泛型定义在接口上。

interface Inter<T>{void show(T t);
}
//这个是指定String类型的。
class InterImp1 implements Inter<String>{public void show(String t){System.out.println("show:"+t);}
}
//这个是让操作者自己去指定类型的
class GenericDemo5{public static void main(String[] args){InterImp1 <Integer>=new InterImp1 <Integer>();i.show(4);}
}
class GenericDemo5(){public static void main(){InterImp1 i=new InterImp1();i.show("haha");}
}

? 通配符,也可以理解为占位符
泛型的限定:(高级应用)
?extend E:可以接收E类型或者E的子类,上限
? super E:可以接收E类型或E的父类型。下限

class GenericDemo6{public static void main(String [] args){ArrayList<String> al=new ArrayList<String>();a1.add("abc1");a1.add("abc2");a1.add("abc3");ArrayList<Person> al=new ArrayList<Person>();a1.add(new Person("abc1"));a1.add(new Person("abc2"));a1.add(new Person("abc3"));/*ArrayList<Integer> all=new ArrayList<Integer>();all.add(4);all.add(7);all.add(1);printColl(all);*///泛型限定ArrayList<Student> all=new ArrayList<student>();all.add(new Student("abc--1"));all.add(new Student("abc--2"));all.add(new Student("abc3--"));print(all);}public static void printColl(ArrayList<? extends Person>){//? extends Person表示泛型限定。只能是继承person类及person本身的类。Iterator<? extends Person> it=al.iterator();while(it.hasNext()){System.out.println(it.next().getName());}
 }/*public static void printColl(ArrayList<?> al){//当类型不知道时,我们可以用通配符?来表示Iterator<?> it=al.iterator();while(it.hasNext()){System.out.println(it.next());//这里不能调用getlength().因为这是具体类中的方法,不能使用类型具体方法。但是可以使用toString()}}*/
}

泛型什么用呢?
答:指定具体类型,用<>,凡是<>里面的都能打印。但是只能某一个,
如果用通配符?表示能接收所有的类型

import java.util.*;
class GenericDemo7
{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 StuComp implements Comparator<Student>
{public int compare(Student s1,Student s2){return s1.getName().compareTo(s2.getName());}
}class WorkerComp implements Comparator<Worker>
{public int compare(Worker s1,Worker s2){return s1.getName().compareTo(s2.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);}
}

Java基础----Java---集合框架---泛型、泛型方法、静态方法泛型、泛型接口、泛型限定、泛型类相关推荐

  1. Thinking in java基础之集合框架

    Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...

  2. java把map值放入vector_Thinking in java基础之集合框架

    Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...

  3. Java基础(集合框架——Collection、List、Set、泛型)

    为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多 个对象的操作,就对对象进行存储,集合就是存储对象常用的一 种方式. 数组和集合类同是容器,有何不同? 数组虽然也可以存储 ...

  4. 7.Java基础之集合框架+JDK8新特性

    1.集合概述 1.1 为什么学集合 思考:数组有什么缺点? 长度一旦定义,不能改变!定义大了,浪费空间:小了,可能不够 ---->动态的数组 对于增删,需要移动位置 ->有人帮我们做这个事 ...

  5. java基础_集合框架

    集合:例如 偶数.水仙花数.奇数,班集体 都属于集合 还有{"111","sss",aaa"}也是集合 集合框架JCF(java collection ...

  6. java基础复习-集合框架(1)

    java集合概述 Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素:另一个是 Map 接口,主要用于存放键值对.对于Collection ...

  7. Java基础_集合框架1

    一.集合框架(体系概述) 为什么会出现集合框架(集合类)? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合框架 ...

  8. 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet

    一.集合的特点 二.继承结构图 三.List集合 1.特点     2.ArrayList类     3.LinkedList类     4.两者的对比     5.集合的遍历 四.Set集合 1.特 ...

  9. Java SE day14_集合框架4

    Java SE day14_集合框架4 Map集合的特点: Map集合的功能概述 ==HashMap中嵌套HashMap== 1:Hashtable和HashMap的区别? Collections集合 ...

  10. java中的集合框架_JAVA中的集合框架(上)List

    第一节 JAVA中的集合框架概述 集合的概念,现实生活中:很多事物凑在一起就是一个集合:数学中的集合:具有相同属性事物的总体:JAVA中的集合:是一种工具类,就像是容器,储存任意数量的具有共同属性的对 ...

最新文章

  1. 5.jsp中动态include与静态include的区别
  2. linux安装mysql5.7.18_Linux 安装MySQL5.7.18
  3. 计算机网络实验报告哈工大_哈工大计算机网络实验报告.doc
  4. 九、多表模型创建,一对一,一对多,基于对像的多表模型等
  5. 数据库连接池性能比对(hikari druid c3p0 dbcp jdbc)
  6. 网络编程-TCP/IP协议栈-UDP/HTTP协议
  7. 四个人过桥的题目_云南的几种“勾魂”特产,舌尖上的美味,让人回味无穷,你吃过吗...
  8. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 22丨平均售价【难度中等】​
  9. delphi xe http 收不到反馈消息_好消息!浦东这个小区3幢多层住宅都要加装电梯啦→...
  10. 山峰和山谷(信息学奥赛一本通-T1454)
  11. thinkphp连接oracle
  12. 在asp.net中使用线程
  13. 图像处理---《在图片上打印文字 FreeType库》
  14. Python 最抢手、Java 最流行、Go 最有前途,7000 位程序员揭秘 2019 软件开发现状...
  15. 原生JS实现Ajax下载文件
  16. python 将txt文件转换为excel_Python学习笔记-Txt文件转Excel文件
  17. HBase常用命令使用
  18. FL Studio20.9.1新版新功能介绍详解
  19. mysql5.7导出数据提示–secure-file-priv选项问题的解决方法
  20. 道不投不足与谋:(,决定放弃原来的博客空间,不再更新

热门文章

  1. Java自然语言处理NLP工具包
  2. Maven打jar发布包的常用配置
  3. 目录_视觉SLAM十四讲_0
  4. 噩耗!吴孟达去世,终年68岁!
  5. 给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度
  6. 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
  7. 在一个字符串中找到第一个只出现一次的字符,并返回它的位置
  8. leetcode之逆波兰表达式
  9. python爬取淘宝网页信息
  10. Junit第一次使用