zoukankan      html  css  js  c++  java
  • JDK源码阅读-------自学笔记(十九)(容器概念初探和泛型概念)

    简介

    数组存在的优势和劣质

    优势

    • 数组是线性序列,从效率和类型检查的角度讲,数组是最好的

    劣势

    • 不灵活,数组的大小是预先定义好的,不会随意改变

    引入容器

    • 容器这个概念就是装东西的介质,可以理解为能装东西的都是容器
    • 比如之前的数组,就是一种容器
    • 英文collection,翻译为容器,也有意为集合的值得都是这个接口

    Collection介绍

    • 其下有两个子接口Set和List
    • Set 没有顺序,不可重复
    • List 有顺序可以重复

    接口常用实现类

    • Set实现HashSet(底层哈希实现)
    • List实现ArrayList(底层数组实现)和LinkedList(底层链表实现)

    Map

    • 常用HashMap(底层哈希)

    泛型概念引入

    • 泛型是JDK1.5以后增加的,它可以帮助我们建立类型安全的集合
    • 泛型的本质,就是"数据类型的参数化",就相当于给对象加了一个参数,调用的时候需要传入实参
    • 泛型是靠编译器进行处理的

    泛型实战

    • 建立一个简单的泛型
    建议一个简单的容器
    调用容器
    存在问题
    • 同类型数据无法共同存储
    • 每次需要不断转型
    问题解决 ----------- 使用泛型
    • 泛型常用<T,E,V>表示名称.
    改写容器
     1 class FormalCollection<E>{
     2 
     3 Object[] objects;
     4 
     5 
     6 FormalCollection(){
     7     objects=new Object[5];
     8 }
     9 
    10 public E getObjects(int index) {
    11     return (E)objects[index];
    12 }
    13 
    14 public void setObjects(E object,int index) {
    15     objects[index] = object;
    16 }
    17 }
    View Code
    调用容器
     1 FormalCollection<String> formalCollectionString = new FormalCollection<>();
     2 
     3     formalCollectionString.setObjects("zhangsan",0);
     4     formalCollectionString.setObjects("lisi",1);
     5     formalCollectionString.setObjects("wanger",2);
     6     formalCollectionString.setObjects("longwu",3);
     7 
     8     FormalCollection<Integer> formalCollectionInteger = new FormalCollection<>();
     9 
    10     formalCollectionInteger.setObjects(25,0);
    11     formalCollectionInteger.setObjects(26,1);
    12     formalCollectionInteger.setObjects(27,2);
    13     formalCollectionInteger.setObjects(28,3);
    14 
    15 
    16     FormalCollection<Double> formalCollectionDouble = new FormalCollection<>();
    17 
    18     formalCollectionDouble.setObjects(12500.00,0);
    19     formalCollectionDouble.setObjects(12600.00,1);
    20     formalCollectionDouble.setObjects(12700.00,2);
    21     formalCollectionDouble.setObjects(42800.00,3);
    22 
    23 
    24     System.out.println("姓名"+"			"+"年龄"+"			"+"薪资");
    25 
    26     System.out.println(formalCollectionString.getObjects(0)+"	"+formalCollectionInteger.getObjects(0)+"			"+formalCollectionDouble.getObjects(0));
    27     System.out.println(formalCollectionString.getObjects(1)+"		"+formalCollectionInteger.getObjects(1)+"			"+formalCollectionDouble.getObjects(1));
    28     System.out.println(formalCollectionString.getObjects(2)+"		"+formalCollectionInteger.getObjects(2)+"			"+formalCollectionDouble.getObjects(2));
    View Code
    结果展示

    容器中使用泛型

    通过阅读源码,发现Collection、List、Set、Map、Iterator接口都定义了泛型

    Collection简介

    • Collection 表示一组对象,它是集中、收集的意思。Collection接口的两个子接口是List、Set接口
    • 由于List、Set是Collection的子接口,意味着所有List、Set的实现类都有上面的方法。

    Collection接口中定义的方法

    • boolean add(E e); 增加元素到容器中
    • boolean remove(Object o); 从容器中移除元素
    • boolean contains(Object o); 容器中是否包含该元素
    • int size(); 容器中元素的数量
    • boolean isEmpty(); 容器是否为空
    • void clear();清楚容器中所有元素
    • Iterator<E> iterator(); 获取迭代器,用于遍历所有元素
    • boolean containsAll(Collection<?> c);本容器是否包含C容器中的所有元素
    • boolean addAll(Collection<? extends E> c); 将容器C中所有元素增加到本容器
    • boolean removeAll(Collection<?> c); 移除本容器和容器C中都包含的元素
    • boolean retainAll(Collection<?> c); 取本容器和容器C中都包含的元素,移除非交集元素
    • Object[] toArray();转化成Object数组

    例子详情见ArrayList

  • 相关阅读:
    【队列】队列的分类和实现
    【JSP】EL表达式语言
    【JSP】JSP的介绍和基本原理
    【JSP】JSP Action动作标签
    【Servlet】关于RequestDispatcher的原理
    【JSP】JSP指令
    【JSP】JSP中的Java脚本
    【算法】表达式求值--逆波兰算法介绍
    C语言指针详解
    移动架构-MVVM框架
  • 原文地址:https://www.cnblogs.com/liuyangfirst/p/12927432.html
Copyright © 2011-2022 走看看