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.用于编写可应用于多种类型的代码,即所编写的代码可应用于许多许多的类 ...
随机推荐
- php 伪造HTTP_REFERER页面URL来源的三种方法
php获取当前页面的前一个页面URL地址,即当前页面是从哪个页面链接过来的,可以使用$_SERVER['HTTP_REFERER']; 但是$_SERVER['HTTP_REFERER']也是可以被伪 ...
- Codeforces 316C2 棋盘模型
Let's move from initial matrix to the bipartite graph. The matrix elements (i, j) for which i + j ar ...
- jq方法(end)
.end()方法: 使得结果集可以后退一步 $('div') .find('h3') .eq() .html('hello') .end()//退回到选中所有的h3元素的那一步 .eq()//选中第一 ...
- echarts图调用多个接口
html: <div id="sentimentMain1" style="width:960px;height:500px;margin:20px auto;&q ...
- TCP的粘包问题
什么是粘包 粘包指的是数据与数据之间没有明确的分界线,导致不能正确读取 应用程序无法直接操作硬件,应用程序想要发送数据则必须将数据交给操作系统,而操作系统需要同时为所有应用程序提供数据传输服务,也就意 ...
- centos7初始优化
第1章 优化 1.1 修改yum源 epel源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Cen ...
- ButterKnife 8.4注入失败
1,第一步:项目的gradle中增加 classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'buildscript { repositor ...
- linux安装php7
之前一直对linux研究的比较少,终于下定决心好好把linux玩一下 首先~我是安装了vm虚拟机,然后使用的是centos7的版本.因为vm不好复制粘贴,故使用了xshell连接了我的linux进行操 ...
- Object与String
Object转为String的几种形式 在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object.toString ...
- Spring---数据缓存(未完待续)
1.为什么需要数据缓存? 程序的瓶颈大都在数据库,而内存的速度是远远大于硬盘的,当我们需要重复读取相同数据时,一次又一次的请求数据库或者远程服务,导致大量的时间浪费在数据库或者 远程服务上,导致程序性 ...