Collection、泛型

目录

一、集合

1.集合的介绍&集合和数组的区别

2.集合框架的介绍

二.集合的通用遍历方式--迭代器

1.集合迭代器的介绍和使用

1.获取集合的迭代器对象

2.遍历集合

2.迭代器的原理(画图)

3.增强for循环

三.泛型

1.什么是泛型

2.泛型的好处

3.泛型的定义和使用

4.泛型统配符

5.泛型的上下限:受限泛型


一、集合

1.集合的介绍&集合和数组的区别

集合:是Java中一种容器,专门保存多个数据

数组:是Java中一种容器,专门保存多个数据

集合 优于 数组:

a.数组长度是固定的 ,而集合长度是可变的

b.集合可以保存多种类型,数组只能保存同一种数据类型

int[] nums = new int[10];

ArrayList<Object> arr = new ArrayList<Object>();

arr.add("java");arr.add(10);

2.集合框架的介绍

JDK1.0 Java中只有Vector类

JDK1.5 由于集合类很多,共性向上(父类)抽取,形成一个集合框架

3.Collection中的通用方法

增: public boolean add(E e);

删: public boolean remove(E e);

改: 无

查: 无

其他:

public void clear();//清空集合

public int size();//获取集合的长度(元素的个数)

 

public boolean isEmpty();//判断集合是否为空(没有元素)

public boolean contains(元素);//判断集合是否包含指定元素

public Object[] toArray();//把集合转成数组

 

二.集合的通用遍历方式--迭代器

1.集合迭代器的介绍和使用

迭代器就是用来帮助我们遍历任何一个Collection的实现类的

使用标准代码:

1.获取集合的迭代器对象

Iterator<集合的泛型> it = 集合对象.iterator();

2.遍历集合

while(it.hasNext()){

集合的泛型 对象名 = it.next();

sout(对象名);

}

2.迭代器的原理(画图)

3.增强for循环

语法糖:

代码上书写更简单,底层原理不变

数组的定义语法糖:

int[] nums = new int[]{1,2,3,4,5};

int[] nums = {1,2,3,4,5};

增强for循环就是迭代器的语法糖:

格式:

for(数据类型 变量名 : 数组/集合){

sout(变量名)

}

缺陷: 只能用于普通的集合遍历,不能修改集合中元素,不能获取集合元素的索引

 

三.泛型

1.什么是泛型

ArrayList<Integer> nums = new ArrayList<Integer>();

ArrayList<String> nums = new ArrayList<String>();

泛型: 是一种不确定的类型

格式: <E> <K,V>

2.泛型的好处

a.不使用泛型

i.需要手动强制类型转换

ii.编译时不报错,运行时直接崩溃(类型转换异常)

b.使用泛型

i.不需要手动强制类型转换

ii.运行时异常 转移到编译时, 变成了编译失败

在JDK1.5之后,Java是强烈建议使用泛型

3.泛型的定义和使用

i.泛型类: 泛型用在了类上

格式:

public class 类名<E>{}

在类中就是使用E这个泛型

private E a;

public void setA(E a){

this.a = a;

}

public E getA(){

return this.a;

}

}

使用:

类名<Integer> 对象名 = new 类名<Integer>();

类名<Double> 对象名 = new 类名<Double>();

类名<String> 对象名 = new 类名<String>();

 

ii.泛型方法: 泛型用在了方法上

格式:

public <T> void show(T s){

}

使用:

对象名.show(实际参数);

泛型T代表 实际参数的具体类型

 

iii.泛型接口 : 泛型用在了接口上

格式:

public interface 接口名<E>{

public abstract void show(E a);

}

使用:

  • a.实现类 在实现接口时,直接确定接口中泛型的具体类型

格式:

public class 类名 implements 接口名<String>{

public void show(String a){

}

}

  • b.实现类 在实现接口时,不去确定泛型,而是继续沿用泛型

格式:

public class 类名<E> implements 接口名<E>{

public void show(E a){

 

}

}

此时这个类就是一个泛型类,用法和泛型类就一样

 

4.泛型统配符

泛型通配符: ?

什么作用:

当实际参数的泛型有多种时,形式参数的泛型就没法确定

比如:

Collection<Integer> list1 = new ArrayList<Integer>();
Collection<String> list2 = new ArrayList<String>();
Collection<Double> list3 = new ArrayList<Double>();

方法:

public static void printArrayList(Collection<?> c) {}

那么我们使用泛型通配符去接收不同的泛型

printArrayList(list1);
printArrayList(list2);
printArrayList(list3);

 

5.泛型的上下限:受限泛型

上限: <? extends Animal>: 代表 泛型必须是Animal 或者 Animal 的子类

 

下限: <? super Dog>: 代表 泛型必须是Dog 或者Dog的父类

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值