Collection
Collection接口
java.util.Collection
接口
所有单列集合的最顶层的接口,里面定义了所有单列集合共性的方法
任意的单列集合都可以使用Collection
接口中的方法
共性的方法:
- 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(): 把集合中的元素,存储到数组中。
1 | package com.tipdm.Demo01; |
1 | [] |
Iterator接口
java.util.Iterator
接口:迭代器(对集合进行遍历)
有两个常用的方法
1 | boolean hasNext() 如果仍有元素可以迭代,则返回 true。 |
判断集合中还有没有下一个元素,有就返回true,没有就返回false
1 | E next() 返回迭代的下一个元素。 |
取出集合中的下一个元素
Iterator迭代器,是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊
Collection接口中有一个方法,叫iterator(),这个方法返回的就算迭代器的实现类对象
Iterator
迭代器的使用步骤(重点):
使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
使用Iterator()接口中的方法hasNext判断还有没有下一个元素
使用Iterator()接口中的next方法取出集合中的下一个元素
1 | package com.tipdm.Demo01; |
1 | [姚明, 科比, 麦迪, 詹姆斯, 艾弗森] |
增强for循环
增强for循环:底层使用的也是迭代器,使用for循环的格式,简化了迭代器的书写
是JDK1.5之后出现的新特性
1 | public interface Collection<E>extends Iterable<E> |
实现这个接口允许对象成为 “foreach” 语句的目标。内部就是使用的迭代器
增强for循环:用来遍历集合和数组
格式:
1 | for(集合/数组的数据类型 变量名:集合名/数组名){ |
1 | package com.tipdm.Demo01; |
1 | 1 |
泛型
泛型:是一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型。
为什么要使用泛型
1 | E e:Element 元素 |
1 | * ArrayList集合在定义的时候,不知道集合中都会存储什么类型的数据,所以类型使用泛型 |
1 | package com.tipdm.Demo02; |
1 | abc |
泛型的定义与使用
定义一个含有泛型的类,模拟ArrayList集合
1 | package com.tipdm.Demo02; |
调用
1 | package com.tipdm.Demo02; |
1 | 字符串 |
含有泛型的方法
定义含有泛型的方法:泛型定义在方法的修饰符和返回值类型之间
格式:
1 | 修饰符 <泛型> 返回值类型 方法名(参数列表(使用泛型)){ |
含有泛型的方法,在调用方法的时候确定泛型的数据类型
传递什么类型的参数,泛型就是什么类型
1 | package com.tipdm.Demo02; |
调用
1 | package com.tipdm.Demo02; |
1 | 10 |
含有泛型的接口
定义
1 | package com.tipdm.Demo02; |
第一种方式:定义接口的实现类,实现接口,指定接口的泛型
1 | package com.tipdm.Demo02; |
第二种使用方式:接口使用什么泛型,实现类就使用什么泛型,类跟着接口走
1 | package com.tipdm.Demo02; |
主函数调用
1 | package com.tipdm.Demo02; |
1 | 字符串 |
泛型的通配符<?>
泛型的通配符:<?>
代表任意的数据类型
使用方式:
不能创建对象使用
只能作为方法的参数使用
1 | package com.tipdm.Demo02; |
1 | 1 |
泛型的上下限限定
泛型的上限限定:? extends E
代表使用的泛型只能是E类型的子类/本身
泛型的下限限定:? super E
代表使用的泛型只能说E类型的父类/本身
1 | package com.tipdm.Demo02; |
案例:斗地主发牌
案例分析
斗地主综合案例:
- 准备:54张牌,存储到一个集合中
1 | 特殊牌:大王、小王 |
- 洗牌
1 | 使用集合工具类 Collections的方法 |
- 发牌
1 | 要求一人17张牌,剩余3张作为底牌,一人一张轮流发牌:集合的索引 %3 |
- 看牌
直接打印集合,遍历存储玩家和底牌的集合
31.2 案例实现
1 | package com.tipdm.Demo02; |
1 | 刘德华:[方块4, 黑桃A, 梅花6, 红桃2, 红桃A, 梅花A, 梅花3, 梅花K, 方块3, 红桃J, 方块Q, 黑桃6, 方块6, 方块7, 黑桃2, 红桃4, 黑桃8] |