java知识点回顾(9):Collection、泛型

本文介绍了Java集合框架中的关键概念,包括集合与数组的区别、Collection接口的常用方法、Iterator接口的遍历和增强for循环,以及泛型的定义和使用。重点讲解了如何通过Iterator进行迭代操作和使用泛型提高API的灵活性。

1 Collection集合

1.1集合概述

集合:集合是java中提供的⼀种容器,可以用来存储多个数据。

集合和数组既然都是容器,它们有啥区别呢?

1.数组的长度是固定的。集合的长度是可变的。

2.数组中存储的是同一类型的元素,可以存储基本数据类型值。

3.集合存储的都是对象。而且对象的类型可以不⼀致。

一般在开发中当对象多的时候,使用集合进行存储。

1.2集合框架

这边贴一张知乎老哥的图,总结的很全面。

集合本身是一个工具,它存放在 java.util 包中。在 Collection 接口定义着单列集合框架中最最共性

的内容。

1.3 Collection 常用功能

Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的⼀些方法,这些方法可用于操作所有的单列集合。方法如下:

public boolean add(E e) :把给定的对象添加到当前集合中。

public void clear() :清空集合中所有的元素。

public boolean remove(E e) :把给定的对象在当前集合中删除。

public boolean contains(E e) :判断当前集合中是否包含给定的对象。

public boolean isEmpty() :判断当前集合是否为空。

public int size() :返回集合中元素的个数。

public Object[] toArray() :把集合中的元素,存储到数组中。

2 Iterator迭代器

2.1 Iterator接口

在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了⼀个接口 java.util.Iterator。Iterator 接口也是Java集合中的⼀员,但它与 Collection、Map 接口有所不同, Collection 接口与 Map 接口主要用于存储元素,而 Iterator 主要用于迭代访问(即遍历) Collection 中的元素,因此 Iterator 对象也被称为迭代器

下面介绍⼀下获取迭代器的方法:

public Iterator iterator() :获取集合对应的迭代器,用来遍历集合中的元素。

下面介绍⼀下迭代的概念:

迭代:即Collection集合元素的通用获取⽅式。在取元素之前先要判断集合中有没有元素,如果有, 就把这个元素取出来,继续在判断,如果还有就再取出出来。⼀直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

Iterator接口的常用方法如下:

public E next() :返回迭代的下⼀个元素。

public boolean hasNext() :如果仍有元素可以迭代,则返回 true。

案例:

public class IteratorDemo {
     public static void main(String[] args) {
         // 使⽤多态⽅式 创建对象
         Collection<String> coll = new ArrayList<String>();
         
         // 添加元素到集合
         coll.add("串串星⼈");
         coll.add("吐槽星⼈");
         coll.add("汪星⼈");
         // 遍历
         // 使⽤迭代器 遍历 每个集合对象都有⾃⼰的迭代器
         Iterator<String> it = coll.iterator();
         // 泛型指的是 迭代出 元素的数据类型
         while (it.hasNext()) { // 判断是否有迭代元素
             String s = it.next(); // 获取迭代出的元素
             System.out.println(s);
         }
     }
}

注意:在进行集合元素取出时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会发发生 java.util.NoSuchElementException 没有集合元素的错误。

2.2 增强for

增强for循环(也称for each循环),是JDK1.5以后出来的⼀个高级for循环,专门用来遍历数组和集合的。 它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

格式:

for (元素的数据类型 变量 : Collection集合or数组) {

        //写操作代码

}

3 泛型

3.1 泛型概述

Collection虽然可以存储各种对象,但实际上通常Collection只存储同⼀类型对象。例如都是存储字符串对象。因此在JDK5之后,新增了泛型(Generic)语法,让你在设计API时可以指定类或方法支持泛型,这样我们使用API的时候也变得更为简洁,并得到了编译时期的语法检查。

泛型:本质是参数化类型,可以在类或方法中预知地使用未知的类型。

3.2 泛型的定义与使用

定义和使用含有泛型的类

定义格式:

修饰符 class 类名 <代表泛型的变量> { }

例如,API中的ArrayList集合:

class ArrayList {

        public boolean add(E e){ }

        public E get(int index){ }

        ....

}  

使用泛型: 即什么时候确定泛型。

含有泛型的方法

定义格式:

修饰符 返回值类型 方法名(参数){ }

含有泛型的接口

定义格式:

修饰符 interface接口名 { }

3.3 泛型通配符

当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符表示。但是⼀旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。

通配符高级使用 -- 受限泛型

之前设置泛型的时候,实际上是可以任意设置的,只要是类就可以设置。但是在JAVA的泛型中可以指定一个泛型的上限和下限。

泛型的上限:

格式:类型名称 <? extends 类 > 对象名称

意义:只能接收该类型及其子类

泛型的下限:

格式: 类型名称 <? super 类 > 对象名称

意义: 只能接收该类型及其父类型

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值