day002-List类泛型

Posted gzyzhui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了day002-List类泛型相关的知识,希望对你有一定的参考价值。

1. 集合
集合是容器,可以存储任意类型的数据,集合的长度可变。

1.1 集合和数组的比较

1.2 集合分类
单列集合:每次存储时,存储一个元素(Collection),包括:list、set
双列集合:每次存储时,存储两个元素(Map)
1.3 Collection

是所有单列集合的父类
1.4 单列集合的继承体系
Collection
List
ArrayList
LinkedList
Vector
Set
HashSet
LinkedHashSet

2. Iterator迭代器
迭代说的就是遍历。
一个用来遍历集合的对象
可以遍历所有的单列集合
如何获得迭代器,集合对象调用iterator()方法。

2.1 常用方法
boolean hasNext() //判断有没有下一个元素,不移动迭代索引位置
E next() //返回下一个元素,并向前移动一位的迭代索引位置

2.2 迭代的好处
如果集合是不带索引的,那么就不能用普通的for循环遍历,这时就可以用
迭代器遍历。
屏蔽了众多集合的内部实现,提供了统一的遍历方式。
所有的单列集合都可以使用迭代器。双列集合不能使用迭代器。

3.增强for
内部的实现就是一个Iterator
注意点:
1、在迭代遍历、增强for遍历时,不要进行集合的增删操作

4. 泛型
什么是泛型? 就是数据类型参数化。
泛型可以使用在方法上,类上,接口上。
泛型变量可以理解为一种数据类型的占位符。
泛型变量也可以理解为使一种数据类型的变量,必须先定义变量才能使用。
泛型在集合中的使用
a)在创建集合对象时明确指定集合要存储的数据类型
b)如果没有集合存储的数据类型,则默认是Object

泛型在集合使用的好处
a)将运行时错误转换为编译时错误,增强了集合的安全性
b)避免数据类型强制转换的麻烦
泛型在集合中使用的注意事项
在指定数据类型时,在jdk 1.7 必须在等号两边都指定。

4.1 泛型方法概念
在定义方法时定义了泛型变量的方法则成为泛型方法。

泛型方法的定义格式
修饰符 <泛型变量> 返回值类型 方法名(参数类别){...}

泛型变量的命名规则:一般使用大写字符。
常用的的泛型变量有:T(Type), K(Key), V(Value), E(Element)
泛型方法的使用:
泛型变量的具体数据类型由调用方法时的参数决定。
4.2 泛型类
在定义类时定义了泛型变量的类
4.2.1 泛型类的定义格式
class 类名<代表泛型的变量>{...}
4.2.2 泛型类的注意事项具体数据类型由创建对象时的参数决定。如果没有指定数据类型,默认是Object。
4.2.3 静态方法不能使用类上定义的泛型变量,如果静态方法要使用泛型变量就必须自己定义泛型变量

4.3 泛型接口
在定义接口时定义了泛型变量的接口
4.3.1 泛型接口的定义格式
修饰符 interface 接口名<代表泛型的变量>{...}
4.3.2实现方式:
a)实现接口的同时指定泛型变量的具体数据类型(不够灵活)
b)实现接口时不指定泛型变量具体数据类型,将实现类定义为泛型类,在创建实现类对象
指定泛型变量的具体数据类型。

4.4 泛型例子

  4.4.1 描述
    编写一个泛形方法名称为swap,实现指定位置数组元素的交换.数组和要交换的索引作为方法参数
  4.4.2. 操作步骤描述
    1. 编写一个泛形方法,数组是任意类型,并传入2个要交换位置的索引
    2. 使用第三方变量的方式交换数组中的元素
    3. 定义一个String数组,调用swap方法,交换指定索引的元素
    4. 打印交换后的元素
    5. 定义一个Integer数组,调用swap方法,交换指定索引的元素
    6. 打印交换后的元素

技术分享图片
 1 package com.yangzhihui.level02.test04;
 2 
 3 public class GenericMethodDemo {
 4     public static void main(String[] args) {
 5         String[] strArr = {"hello", "world", "java", "good", "idea"};
 6         swap(strArr, 1, 3);
 7         for(String str : strArr){
 8             System.out.print(str +  ",");
 9         }
10 
11         System.out.println("=====================");
12         Integer[] intArr = {1, 2, 3, 4, 5, 6};
13         swap(intArr, 2, 5);
14         for(int i : intArr){
15             System.out.print(i + ",");
16         }
17 
18     }
19 
20     public static <T> void swap(T[] array, int index01, int index02){
21         T temp;
22 
23         //交换元素
24         temp  = array[index01];
25         array[index01] = array[index02];
26         array[index02] = temp;
27     }
28 }
View Code

 

5. 泛型上下限
?: 泛型通配符,可以匹配任意数据类型
5.1 泛型的上限
格式:<? exteands 类>
意义:只能接受该类型及其子类

5.2 泛型的下限
格式:<? super 类>
意义:只能接受该类型及其父类

 









































































以上是关于day002-List类泛型的主要内容,如果未能解决你的问题,请参考以下文章

java泛型——泛型类泛型方法泛型接口

反射获取泛型类泛型方法

unity的C#学习——泛型的创建与继承泛型集合类泛型中的约束和反射

Java泛型:泛型类泛型接口和泛型方法

Java泛型:泛型类泛型接口和泛型方法

类泛型方法定义[重复]