1. 集合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()
: 把集合中的元素,存储到数组中。
2.Iterator迭代器
boolean hasNext()
如果仍有元素可以迭代,则返回 true。
判断集合中还有没有下一个元素,有就返回true,没有就返回false
E next()
返回迭代的下一个元素。
取出集合中的下一个元素
迭代器的使用步骤(重点):
1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
3.使用Iterator接口中的方法next取出集合中的下一个元素
Collection<String> coll = new ArrayList<>();
//多态 接口 实现类对象
Iterator<String> it = coll.iterator();
while(it.hasNext()){
String e = it.next();
System.out.println(e);
}
for(Iterator<String> it2 = coll.iterator();it2.hasNext(); ){
String e = it2.next();
System.out.println(e);
}
增强for循环
底层使用的也是迭代器,使用for循环的格式,简化了迭代器的书写
for(元素的数据类型 变量 : Collection集合or数组){
//写操作代码
}
3.泛型
E e: Element 元素
T t : Type 类型
E: 未知数据类型
类型变量E(也可以是其他任意字母),用尖括号<>括起,放在类名的后面。使用多个类型变量时用逗号分隔,如<T, U, S>。
类型变量在整个类定义中用于指定方法的返回类型以及字段和局部变量的类型。
在创建对象时确定泛型类型。
3.1使用泛型
好处:
1.避免了类型转换的麻烦,存储的是什么类型,取出的就是什么类型
2.把运行期异常(代码运行之后会抛出的异常),提升到了编译期(写代码的时候会报错)
弊端:
泛型是什么类型,只能存储什么类型的数据
3.2不使用泛型
好处:
集合不使用泛型,默认的类型就是Object类型,可以存储任意类型的数据
弊端:
不安全,会引发异常
3.3定义含有泛型的类:
pubic class ArrayList<E>{
public boolean add(E e){ }
public E get(int index){ }
...
}
3.4使用含有泛型的类
ArrayList<String> list = new ArrayList<String>();
3.5定义含有泛型的方法 :泛型定义在方法的修饰符和返回值类型之间
格式:
修饰符 <泛型> 返回值类型 方法名(参数列表(使用泛型)){
方法体;
}
public static <S> void method02(S s){
System.out.println(s);
}
3.6含有泛型的接口
修饰符 interface接口名<代表泛型的变量> { }
1、定义类时确定泛型的类型
public interface Iterator<E>
public final class Scanner implements Iterator<String>
2、始终不确定泛型的类型,直到创建对象时,确定泛型的类型
public interface GenericInterface<I>{}
public class GenericInterfaceImpl2<I> implements GenericInterface<I>{}
GenericInterfaceImpl2<Integer> gi2 = new GenericInterfaceImpl2<>();
3.7泛型通配符
泛型的通配符:
?:代表任意的数据类型
使用方式:
不能创建对象使用,只能作为方法的参数使用
注意: 泛型没有继承概念的
public static void printArray(ArrayList<?> list){
Iterator<?> it = list.iterator();
while(it.hasNext()){
Object o = it.next();
System.out.println(o);
}
}
通配符高级使用----受限泛型:
泛型的上限限定: ? extends E 代表使用的泛型只能是E类型的子类/本身
类型名称 <? extends 类 > 对象名称
泛型的下限限定: ? super E 代表使用的泛型只能是E类型的父类/本身
类型名称 <? super 类 > 对象名称
类与类之间的继承关系
Integer extends Number extends Object
String extends Object
3.8示例:斗地主
1.准备牌:循环嵌套遍历两个数组/集合,组装52张牌
2.洗牌:Collections.shufftle(List<?> list)
shuffle 静态方法,直接类调用
3.发牌:定义四个集合,存储3个玩家的牌和底牌
4.看牌:打印集合