背景:

当元素存入集合时,集合会将元素转换为Object类型存储,当取出时也是按照Object取出的,所以用get方法取出时,我们会进行强制类型转换,并且通过代码也可以看出来,我们放入其他类型时,如字符串,编译器不会报错,但是运行程序时会抛出类型错误异常,这样给开发带来很多不方便,用泛型就解决了这个麻烦。

  1.在集合中不使用泛型

     public void test1(){List list = new ArrayList();list.add(89);list.add(87);list.add(67);//1.没有使用泛型,任何Object及其子类的对象都可以添加进来list.add(new String("AA"));for(int i = 0;i < list.size();i++){//2.强转为int型时,可能报ClassCastException的异常int score = (Integer)list.get(i);System.out.println(score);}}

2.在集合中使用了泛型

    public void test2(){List<Integer> list = new ArrayList<Integer>();list.add(78);list.add(83);
//       for(int i = 0;i < list.size();i++){
//          int score = list.get(i);
//          System.out.println(score);
//      }Iterator<Integer> it = list.iterator();while(it.hasNext()){System.out.println(it.next());}}
   public void test3(){Map<String,Integer> map = new HashMap<>();map.put("AA", 78);map.put("BB", 87);map.put("DD", 98);Set<Map.Entry<String,Integer>> set = map.entrySet();for(Map.Entry<String,Integer> o : set){System.out.println(o.getKey() + "--->" + o.getValue());}}

  3.自定义泛型类:应用

public class DAO<T> {public void add(T t){//....}public T get(int index){return null;}public List<T> getForList(int index){return null;}public void delete(int index){}
}
   public class CustomerDAO extends DAO<Customer>{}public class TestCustomerDAO {public static void main(String[] args) {CustomerDAO c = new CustomerDAO();c.add(new Customer());c.get(0);}}

【注意点】

1.对象实例化时不指定泛型,默认为:Object。
   2.泛型不同的引用不能相互赋值。
   3.加入集合中的对象类型必须与指定的泛型类型一致。
   4.静态方法中不能使用类的泛型。
   5.如果泛型类是一个接口或抽象类,则不可创建泛型类的对象。
   6.不能在catch中使用泛型
   7.从泛型类派生子类,泛型类型需具体化

4.泛型与继承的关系

A类是B类的子类,G是带泛型声明的类或接口。那么G<A>不是G<B>的子类!

5.通配符:?


  A类是B类的子类,G是带泛型声明的类或接口。则G<?> 是G<A>、G<B>的父类!
   ①以List<?>为例,能读取其中的数据。因为不管存储的是什么类型的元素,其一定是Object类的或其子类的。
   ①以List<?>为例,不可以向其中写入数据。因为没有指明可以存放到其中的元素的类型!唯一例外的是:null

将运行期间出现的ClassCastEx侧petion,转移到了编译时期。便于解决问题,减少出错的几率。避免了强制换换的麻烦。

步步扎进Java-泛型与集合相关推荐

  1. (10)Java泛型-Map集合-集合框架工具类-可变参数-静态导入

    -- 部分1.5新特性Java泛型-Map集合-集合框架工具类 泛型 概述: JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制. 对于泛型可以这样理解: 没有使用泛型时,只要是对 ...

  2. java 泛型和集合_Java集合和泛型

    集合 常用的集合有ArrayList,TreeSet,HashMap,HashSet. ArrayList 最常用的集合,每次插入都在后面追加元素. TreeSet 以有序状态保持并可防止重复.当你需 ...

  3. java泛型视频教程_Java泛型快速教程

    java泛型视频教程 泛型是Java SE 5.0引入的一种Java功能,在其发布几年后,我发誓那里的每个Java程序员不仅会听说过,而且已经使用过. 关于Java泛型,有很多免费和商业资源,而我使用 ...

  4. java泛型实验报告,java实验报告异常集合类和泛型

    java实验报告异常集合类和泛型 成绩: 面向对象原理与 Java 实践课程实验报告实验 3:异常.集合类和泛型姓 名 _ ___ 班 级 _ ___ 学 号 _ ___ 实验地点 _ ___ 实验时 ...

  5. JAVA day15 Collection(集合)、Iterator迭代器、泛型<E>

    1.Collection(集合) 集合:集合是java中提供的⼀种容器,可以⽤来存储多个数据. 集合与数组的区别: 数组的长度是固定的,集合的长度是可变的. 数组中存储的是同⼀类型的元素,可以存储基本 ...

  6. Java实用教程笔记 泛型与集合框架

    泛型与集合框架 Generics 链表 LinkedList < E >泛型类 接口回调 常用方法 LinkedList< E >泛型类实现Link< E >泛型接 ...

  7. java 泛型 t_Kotlin(2) 泛型与集合

    前言 以一个java老鸟的角度,如何去看 kotlin.Java源代码应该如何用Kotlin重构.如何正确学习kotlin并且应用到实际开发中.本文将会探究. 本文分两大块,重难点和潜规则. 重难点: ...

  8. java创建集合有的不用泛型_为什么在Java泛型右手边的集合类型没有任何影响?...

    使用Java的Generics功能我创建了一个List对象,在左侧我使用的是原始类型List,在右侧我使用的是泛型类型ArrayList. List myList=new ArrayList(); 我 ...

  9. 【Java】Collection集合和泛型

    学习目标:会存取,掌握特性 学习方式:学习顶层接口/抽象类的共性方法,使用底层的子类创建对象使用 1 集合框架 集合类的继承体系: Collection接口: ·············1) List ...

最新文章

  1. 计算机网络实验socket编程,计算机网络实验 socket编程
  2. udev与devfs文件系统
  3. SAP传输停止错误:Test call of transport control program (tp) ended with return code 0208!
  4. 程序员合同日期不到想辞职_程序员被迫辞职,临走把新员工办公桌擦遍,老板:交5万罚款...
  5. Keil C51,内存与指针
  6. JSON 序列化 与 反序列化
  7. Keepalived实现mysql高可用
  8. 低代码开发,未来已来
  9. atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模
  10. 追“根”溯源:植物根际的微生物生态
  11. 根据显示屏分辨率调试html 样式
  12. 洪泰智造工场腾讯云创业加速营全球招募
  13. 组建Ad Hoc模式无线局域网
  14. 好佳居软装十大品牌 掌握新中式软装风格
  15. e.hash oldCap == 0 详细解读
  16. autoware官方入门教使用
  17. php excel给excel批量插入图片
  18. 图片 bbox 翻转
  19. 使用卷积神经网络(CupCnn)训练人脸检测模型
  20. 静态HTML网页设计作品—绿色古典旅游景区(6页) HTML+CSS+JavaScript 学生DW网页设计作业成品

热门文章

  1. week9任务管理器和牌数大小的确定
  2. DELL Inspiron M4010笔记本拆机除尘图解
  3. python找零钱问题_动态规划法(二)找零钱问题
  4. java jdbc连接sql server2014
  5. 2020年计算机专业大学生笔记本电脑推荐,大学生笔记本买什么好 2020年最佳配置高颜值的笔记本电脑排行推荐...
  6. Thinking in BigData(一)前序
  7. 关于更新pip后pycharm工程中设置还是显示老版本的解决办法
  8. 同岗不同命,软件测试的薪资跨度到底有多大?
  9. async和await以及promise的区别
  10. 利用Chrom浏览器实现滚动截屏,不用下载插件,超级简单!