擴(kuò)展: equals()方法的源代碼 // 主方法
Person p1 = new Person("張三", 23);
Person p2 = new Person("李四", 24);
boolean b = p1.equals(p2);
// =====================================================================
@Override
public boolean equals(Object o) { // Object o = new Person("李四", 24);
// this: p1
// o : p2
// 比較地址值是否相同
// 如果地址值相同, 直接返回true
if (this == o) {
return true;
}
// equals方法能夠調(diào)用成功說明p1一定不為null
// 如果p2為null, 直接返回false
if (o == null) {
return false;
}
// getClass() : 獲取字節(jié)碼文件對(duì)象, 一個(gè)類的字節(jié)碼文件對(duì)象是唯一的
// 如果p1和p2的字節(jié)碼文件對(duì)象不同(不是同一個(gè)類的對(duì)象), 直接返回false
if (this.getClass() != o.getClass()) {
return false;
}
// 多態(tài)的弊端: 父類引用不能直接使用子類特有的屬性和行為
// 向下轉(zhuǎn)型
Person person = (Person) o;
return this.age == person.age &&
Objects.equals(this.name, person.name);
}
一. Collection集合(重點(diǎn))1. 單列集合的繼承體系[外鏈圖片轉(zhuǎn)存失敗(img-jUZXnTSK-1564728938424)(assets/1564645350899.png)] 2. Collection中的常用功能public boolean add(E e) : 把給定的對(duì)象添加到當(dāng)前集合中,。
public boolean remove(E e) : 把給定的對(duì)象在當(dāng)前集合中刪除,。
public void clear() :清空集合中所有的元素,。
public boolean isEmpty() : 判斷當(dāng)前集合是否為空(長度為0)。
public boolean contains(E e) : 判斷當(dāng)前集合中是否包含給定的對(duì)象,。
public int size() : 獲取集合的長度(集合中元素的個(gè)數(shù))
二. 迭代器1. 迭代器的使用Iterator<E> iterator(): 獲取集合對(duì)應(yīng)的迭代器對(duì)象
2. 遍歷集合 Collection<String> c = new ArrayList<>();
c.add("C羅");
c.add("梅西");
c.add("武磊");
// 1. 獲取集合對(duì)應(yīng)的迭代器
Iterator<String> it = c.iterator();
// 2. 判斷是否有下一個(gè)元素
while (it.hasNext()) {
// 3. 獲取下一個(gè)元素
System.out.println(it.next());
}
// 創(chuàng)建集合
Collection<Person> c = new ArrayList<>();
// 匿名對(duì)象
c.add(new Person("張三", 23));
c.add(new Person("李四", 24));
c.add(new Person("王五", 25));
c.add(new Person("趙六", 26));
// c.add(new Person("周琦", 27));
// 一個(gè)hashNext(), 就對(duì)應(yīng)一個(gè)next()
// 遍歷
// 1. 獲取集合對(duì)應(yīng)的迭代器對(duì)象
Iterator<Person> it = c.iterator();
// 2. 判斷是否有下一個(gè)元素
while (it.hasNext()) {
// 3. 獲取下一個(gè)元素
Person p = it.next();
System.out.println(p.getName() "---" p.getAge());
}
3. 增強(qiáng)for(重點(diǎn))// 格式
for (容器中元素的數(shù)據(jù)類型 變量名 : 容器) {
使用變量;
}
// 快捷鍵
容器.for -> enter
三. 泛型(了解)泛型這一部分, 要求大家掌握的: 能夠使用泛型定義集合. ArrayList<String> list = new ArrayList<>();
1. 了解泛型的好處2. 了解泛型類, 方法, 接口泛型類 泛型方法 泛型接口 類實(shí)現(xiàn)泛型接口時(shí), 直接確定泛型的具體數(shù)據(jù)類型 類實(shí)現(xiàn)泛型接口時(shí), 不確定具體類型, 等到創(chuàng)建該類對(duì)象的時(shí)候, 再確定泛型的具體數(shù)據(jù)類型
擴(kuò)展泛型方法的面試題 3. 了解泛型的邊界泛型的通配符 泛型的邊界 固定泛型的上邊界 <? extends E> : 傳入的泛型可以是E, 也可以是E的子類
固定泛型的下邊界 <? super E> : 傳入的泛型可以是E, 也可以是E的父類
四. 斗地主public class Demo {
public static void main(String[] args) {
// 買牌
// 創(chuàng)建容器, 用來當(dāng)做撲克盒(存放每一張牌)
ArrayList<String> list = new ArrayList<>();
// 創(chuàng)建花色數(shù)組
String[] colors = {"?", "?", "?", "?"};
// 創(chuàng)建點(diǎn)數(shù)數(shù)組
String[] numbers = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
// 先遍歷花色數(shù)組
for (String color : colors) {
// 再遍歷點(diǎn)數(shù)
for (String number : numbers) {
// 拼接獲取一張牌
String poker = color number;
// 將這張牌, 添加到集合中
list.add(poker);
}
}
// 添加大小王
list.add("?");
list.add("?");
// 洗牌
Collections.shuffle(list);
// 發(fā)牌
// 創(chuàng)建4個(gè)容器, 代表3個(gè)人和1個(gè)底牌
ArrayList<String> me = new ArrayList<>();
ArrayList<String> gaoOO = new ArrayList<>();
ArrayList<String> zhuYin = new ArrayList<>();
ArrayList<String> left = new ArrayList<>();
// 遍歷集合, 使用普通for循環(huán)
for (int i = 0; i < list.size(); i ) {
// i就是索引
// 如果是最后3張牌, 發(fā)給底牌
if (i >= list.size() - 3) {
// 添加的是i索引對(duì)應(yīng)的元素
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);
}
}
創(chuàng)建集合, 集合中的元素是 [“C”, “Kotlin”, “Python”, “Java”, “Java”,“C ”, “C#”] 刪除"Java" 比較的時(shí)候使用equals() 遍歷的時(shí)候, 普通for循環(huán), 迭代器, 增強(qiáng)for循環(huán) 來源:https://www./content-4-374651.html
|