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("姓名"+"\t\t\t"+"年龄"+"\t\t\t"+"薪资");
25 
26     System.out.println(formalCollectionString.getObjects(0)+"\t"+formalCollectionInteger.getObjects(0)+"\t\t\t"+formalCollectionDouble.getObjects(0));
27     System.out.println(formalCollectionString.getObjects(1)+"\t\t"+formalCollectionInteger.getObjects(1)+"\t\t\t"+formalCollectionDouble.getObjects(1));
28     System.out.println(formalCollectionString.getObjects(2)+"\t\t"+formalCollectionInteger.getObjects(2)+"\t\t\t"+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

posted @ 2020-05-21 00:15  北极的大企鹅  阅读(182)  评论(0编辑  收藏  举报
阅读 - 79万