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. 打印交换后的元素

 package com.yangzhihui.level02.test04;

 public class GenericMethodDemo {
public static void main(String[] args) {
String[] strArr = {"hello", "world", "java", "good", "idea"};
swap(strArr, 1, 3);
for(String str : strArr){
System.out.print(str + ",");
} System.out.println("=====================");
Integer[] intArr = {1, 2, 3, 4, 5, 6};
swap(intArr, 2, 5);
for(int i : intArr){
System.out.print(i + ",");
} } public static <T> void swap(T[] array, int index01, int index02){
T temp; //交换元素
temp = array[index01];
array[index01] = array[index02];
array[index02] = temp;
}
}

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

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

最新文章

  1. 使用命令 gradle uploadArchives 的异常: Unable to initialize POM pom-default.xml: Failed to validate POM for project
  2. 关于数组去重的几种方法-------javascript描述
  3. Magento显示多货币,Magento 多货币设置
  4. 【mysql创建用户|删除用户|修改用户权限|常用命令】
  5. java动态编译类文件并加载到内存中
  6. Linux基础:软件安装(rpm,yum,源代码)
  7. 全球最快的JS模板引擎
  8. Struts启动报空指针
  9. 读书笔记 effective c++ Item 12 拷贝对象的所有部分
  10. CnPack IDE 专家包(CnWizards)显示代引用单元列表
  11. Linux结束进程到底有多少种方法?
  12. 电信中兴F460光猫sendcmd命令
  13. Jmeter 常见错误
  14. spring静态代理和动态代理
  15. centos6安装配置zabbix3被控端
  16. Debian下安装docker
  17. 转发 C# Win32 API程序控制鼠标的操作
  18. 20155226 《网络对抗》exp6信息搜集与漏洞扫描
  19. nodepad++ 正则 替换
  20. HTML5新特性:范围样式

热门文章

  1. Java 标准IO高可用类
  2. P5123 [USACO18DEC]Cowpatibility(容斥)
  3. 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_类型转换
  4. P1147 连续自然数和(思维题)
  5. void类型指针的基本用法
  6. HDU 4352 区间的有多少个数字满足数字的每一位上的数组成的最长递增子序列为K(数位DP+LIS)
  7. js删除数组中的 &quot;NaN&quot;
  8. 浅谈dedecms模板引擎工作原理及其自定义标签
  9. 如何使用java代码进行视频格式的转换(FLV)
  10. Problem09 求完数