13、Collection、泛型
扩展: equals()方法的源代码
Person p1
= new Person("张三", 23);
Person p2
= new Person("李四", 24);
boolean b
= p1
.equals(p2
);
@Override
public boolean equals(Object o
) {
if (this == o
) {
return true;
}
if (o
== null
) {
return false;
}
if (this.getClass() != o
.getClass()) {
return false;
}
Person person
= (Person
) o
;
return this.age
== person
.age
&&
Objects
.equals(this.name
, person
.name
);
}
一. Collection集合(重点)
1. 单列集合的继承体系
[外链图片转存失败(img-jUZXnTSK-1564728938424)(assets/1564645350899.png)]
2. Collection中的常用功能
add
public boolean add(E e
) : 把给定的对象添加到当前集合中。
remove
public boolean remove(E e
) : 把给定的对象在当前集合中删除。
clear
public void clear() :清空集合中所有的元素。
isEmpty
public boolean isEmpty() : 判断当前集合是否为空
(长度为
0)。
contains
public boolean contains(E e
) : 判断当前集合中是否包含给定的对象。
size
public int size() : 获取集合的长度
(集合中元素的个数
)
二. 迭代器
迭代器: 用来遍历集合
1. 迭代器的使用
iterator
Iterator
<E> iterator(): 获取集合对应的迭代器对象
迭代器Iterator中的功能
hasNext
boolean hasNext(): 判断是否有下一个元素
next E
next() : 获取下一个元素
2. 遍历集合
Collection
<String> c
= new ArrayList<>();
c
.add("C罗");
c
.add("梅西");
c
.add("武磊");
Iterator
<String> it
= c
.iterator();
while (it
.hasNext()) {
System
.out
.println(it
.next());
}
自定义对象
Collection
<Person> c
= new ArrayList<>();
c
.add(new Person("张三", 23));
c
.add(new Person("李四", 24));
c
.add(new Person("王五", 25));
c
.add(new Person("赵六", 26));
Iterator
<Person> it
= c
.iterator();
while (it
.hasNext()) {
Person p
= it
.next();
System
.out
.println(p
.getName() + "---" + p
.getAge());
}
3. 增强for(重点)
用来遍历容器, 底层是迭代器
for (容器中元素的数据类型 变量名
: 容器
) {
使用变量
;
}
容器
.for -> enter
三. 泛型(了解)
泛型这一部分, 要求大家掌握的: 能够使用泛型定义集合.
ArrayList
<String> list
= new ArrayList<>();
1. 了解泛型的好处
将问题从运行时期, 提前到编译时期.省去了强转的麻烦
2. 了解泛型类, 方法, 接口
泛型类
泛型类在创建对象时, 确定泛型的具体数据类型 泛型方法
泛型方法在方法的调用时, 确定泛型的具体数据类型 泛型接口
类实现泛型接口时, 直接确定泛型的具体数据类型类实现泛型接口时, 不确定具体类型, 等到创建该类对象的时候, 再确定泛型的具体数据类型
扩展泛型方法的面试题
需求: 创建用来打印集合的方法(可以打印所有数据类型的集合)
3. 了解泛型的边界
泛型的通配符
? : 代表所有类型
泛型的边界
固定泛型的上边界
<? extends E> : 传入的泛型可以是E
, 也可以是E的子类
固定泛型的下边界
<? super E
> : 传入的泛型可以是E
, 也可以是E的父类
四. 斗地主
public class Demo {
public static void main(String
[] args
) {
ArrayList
<String> list
= new ArrayList<>();
String
[] colors
= {"♥", "♠", "♣", "♦"};
String
[] numbers
= {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
for (String color
: colors
) {
for (String number
: numbers
) {
String poker
= color
+ number
;
list
.add(poker
);
}
}
list
.add("♙");
list
.add("♛");
Collections
.shuffle(list
);
ArrayList
<String> me
= new ArrayList<>();
ArrayList
<String> gaoOO
= new ArrayList<>();
ArrayList
<String> zhuYin
= new ArrayList<>();
ArrayList
<String> left
= new ArrayList<>();
for (int i
= 0; i
< list
.size(); i
++) {
if (i
>= list
.size() - 3) {
left
.add(list
.get(i
));
}else if (i
% 3 == 0) {
me
.add(list
.get(i
));
}else if (i
% 3 == 1) {
gaoOO
.add(list
.get(i
));
}else {
zhuYin
.add(list
.get(i
));
}
}
System
.out
.println("底牌: " + left
);
System
.out
.println("我: " + me
);
System
.out
.println("圆圆: " + gaoOO
);
System
.out
.println("紫霞: " + zhuYin
);
}
}