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. 打印交换后的元素
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 类>
意义:只能接受该类型及其父类
day002-List类、泛型的更多相关文章
- C#:iterator 迭代器/partial class 分布类/泛型
C#:iterator 迭代器/partial class 分布类/泛型 iterator 迭代器 写个最简单的迭代,(迭代一个字符串数组): 1.实现接口中的方法: 1 using System; ...
- C#工具:反射帮助类 泛型反射帮助类
反射帮助类 using System; using System.Reflection; using System.Data; using System.Drawing; using System.R ...
- [工具类]泛型集合转换为DataTable
写在前面 在实际项目中,用到了将集合转换为DataTable,就试着封装了一个方法,记录一下. 代码 using System; using System.Collections.Generic; u ...
- java_类泛型承继方法
package ming; class Apple3<T>{ private T info; public Apple3(){} public Apple3(T info){ this.i ...
- java_类泛型基本实例
package ming; public class Apple2<T> { public T info; public Apple2(T info) { this.info = info ...
- 黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API
---------- android培训.java培训.期待与您交流! ---------- 一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制 ...
- Java基础---泛型、集合框架工具类:collections和Arrays
第一讲 泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类 ...
- java内部类、接口、集合框架、泛型、工具类、实现类
.t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.内部类 1.成员内部类. (1)成员内部类的实例化: 外部类名.内部类 ...
- Java泛型
什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个 ...
- 黑马----JAVA泛型基础
黑马程序员:Java培训.Android培训.iOS培训..Net培训 JAVA范型-基础 一.泛型的概念 1.实现了参数化类型 2.用于编写可应用于多种类型的代码,即所编写的代码可应用于许多许多的类 ...
随机推荐
- c# mvc会话过期设置
configuration 元素(常规设置架构) system.web 元素(ASP.NET 设置架构) sessionState 元素(ASP.NET 设置架构) <session ...
- day_06 再谈编码
1. 小数据池(常量池) 1.id() 通过id()查询一个变量在内存中的地址 2.is和== 1.is 判断左右两端内存地址是否一致,如果返回值是TRUE,则可以判断这两个变量值是同一对象 2.== ...
- thinkPHP5.0获取器获取原始数据
如果你定义了获取器的情况下,希望获取数据表中的原始数据,可以使用:$cate = Cate::get(1);// 通过获取器获取字段echo $cate->type;// 获取原始字段数据ech ...
- 关于element-ui表格样式设置的方法cell-class-name
关于element-ui表格使用的一些方法 最近在用Vue.js和elment-ui做一个后台管理项目,不得不说element功能非常强大,提供了许多组件,基本可以满足一些基础的开发了.因为我做的后台 ...
- hdfs namenode/datanode工作机制
一. namenode工作机制 1. 客户端上传文件时,namenode先检查有没有同名的文件,如果有,则直接返回错误信息.如果没有,则根据要上传文件的大小以及block的大小,算出需要分成几个blo ...
- RTT设备驱动之看门狗
看门狗的喂狗一般放在空闲任务钩子函数里面. rt_thread_idle_sethook(idle_hook); static void idle_hook(void) { /* 在空闲线程的回调函数 ...
- Trees on the level UVA - 122 (二叉树的层次遍历)
题目链接:https://vjudge.net/problem/UVA-122 题目大意:输入一颗二叉树,你的任务是按从上到下,从左到右的顺序输出各个结点的值.每个结点都按照从根节点到它的移动序列给出 ...
- 为什么CPU缓存会分为一级缓存L1、L2、L3?有什么意义?
https://baijiahao.baidu.com/s?id=1598811284058671259&wfr=spider&for=pc 简介:CPU缓存是CPU一个重要的组成部分 ...
- Java基础04-数据的输入
1.为什么要有数据的输入? 实现人机进行交互 2.什么是数据的输入? 利用扫描仪Scanner进行数据输入 3.怎么使用扫描仪Scanner? (1)放在类声明之前,引入扫描仪 import java ...
- [转]JS判断访问设备、客户端操作系统类型
本文转自:http://www.cnblogs.com/duanguyuan/p/3534470.html 先给出一个实例:判断windows.linux.android 复制以下代码另存为html文 ...