1.泛型
- 比較器 Comparable Collections
(Comparable)案例:實現(xiàn)對于List<Person> 年齡的升序**
實現(xiàn)排序的步驟: - 讓 Person 類實現(xiàn) Comparable<Person>
- 重寫compareTo 方法: 定義排序的規(guī)則
? 升序: this和 參數(shù)
? 降序: 參數(shù)和this
(Collections)
不使用匿名內部類實現(xiàn): 自己寫一個Comparator的子類
* Collections.sort(list,new IntegerComparator());
System.out.println(list);*/
//使用匿名內部類實現(xiàn)
Collections.sort(list,new Comparator<Integer>() {
/**
* 用第一個和第二個比較: 升序
* 第二個和第一個比較: 降序
*/
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
}
);
System.out.println(list);
}
}
class IntegerComparator implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return o2- o1;
}
}
3.Collections工具類
public static <T> void sort(List<T> list) 排序,升序
public static <T> int binarySearch(List<?> list,T key) 二分查找,不存在返回負數(shù),只能針對升序集合
public static <T> T max(Collection<?> coll) 最大值
public static void reverse(List<?> list) 反轉
public static void shuffle(List<?> list) 隨機打亂
public static <T> void sort(List<T> list, Comparator<? super T> c) 排序,和比較器配合使用
4.一道大題
package Day13;
/*
A:B,C,D,F,E,O;B:A,C,E,K;C:F,A,D,I;D:A,E,F,L;E:B,C,D,M,L;F:A,B,C,D,E,O,M;G:A,C,
D,E,F;H:A,C,D,E,O;I:A,O;J:B,O;K:A,C,D;L:D,E,F;M:E,F,G;O:A,H,I,J
1.獲取所有用戶對應的好友數(shù)量
2 獲取指定兩個用戶的共同好友
3 獲取兩兩人的共同好友
*/
import java.util.*;
public class Demo2 {
public static void main(String[] args) {
String st = " A:B,C,D,F,E,O;B:A,C,E,K;C:F,A,D,I;D:A,E,F,L;E:" +
"B,C,D,M,L;F:A,B,C,D,E,O,M;G:A,C," +
" D,E,F;H:A,C,D,E,O;I:A,O;J:B,O;K:A" +
",C,D;L:D,E,F;M:E,F,G;O:A,H,I,J";
// number(st);
//mutualfriend(st);
mutualfriend1(st);
//getSampleFriend(st);
}
//1.獲取所有用戶對應的好友數(shù)量
public static void number(String st) {
/*HashMap<String, ArrayList<String>> ob= new HashMap<>();
ArrayList<String> obj = new ArrayList<>();*/
String[] split = st.split(";");
for (int i = 0; i < split.length; i++) {
//按照":"來切 分成兩個部分 用戶和好友
String[] split1 = split[i].split(":");//用戶
String[] split2 = split1[1].split(",");//好友
System.out.println(split1[0] + "的好友數(shù)" + split2.length);
//可以用hashmap 把數(shù)量存入value
}
}
//獲取指定兩個用戶的共同好友
public static void mutualfriend(String st) {
Scanner scanner = new Scanner(System.in);
ArrayList<String> obj = new ArrayList<>();
//重點....
HashMap<String, ArrayList<String>> ob = new HashMap<>();
String[] split = st.split(";");
for (int i = 0; i < split.length; i++) {
String[] split1 = split[i].split(":");
String[] split2 = split1[1].split(",");
//集合轉數(shù)組.....
List<String> strings = Arrays.asList(split2);
//構造方法把List 轉為ArrayList
ArrayList<String> st1 = new ArrayList<>(strings);
ob.put(split1[0], st1);
}
//System.out.println(ob);
//以上 把數(shù)據(jù)都存入hashmap
//
System.out.println("請輸入兩個字母");
System.out.println("請輸入第一個字母");
String name1 = scanner.next();
System.out.println("請輸入第二個字母");
String name2 = scanner.next();
String s = name1.toUpperCase();
String s1 = name2.toUpperCase();
//判斷是否包含改用戶
/*if (!ob.containsKey(s) || !ob.containsKey(s1)) {
System.out.println("沒有這個用戶");
return;
}*/
//獲取 value值
ArrayList<String> strings = ob.get(s);
ArrayList<String> strings1 = ob.get(s1);
// 比較 把交集放在strings 中
strings.retainAll(strings1);
if (strings.isEmpty()) {
System.out.println(name1.toUpperCase() + "和" + name2.toUpperCase() + "沒有共同好友");
} else {
System.out.println(name1.toUpperCase() + "和" + name2.toUpperCase() + strings);
}
}
public static void mutualfriend1(String st){
ArrayList<String> obj = new ArrayList<>();
//重點....
HashMap<String, ArrayList<String>> ob1 = new HashMap<>();
String[] split = st.split(";");
for (int i = 0; i < split.length; i++) {
String[] split1 = split[i].split(":");
String[] split2 = split1[1].split(",");
//集合轉數(shù)組.....
List<String> strings = Arrays.asList(split2);
//構造方法把List 轉為ArrayList
ArrayList<String> st1 = new ArrayList<>(strings);
ob1.put(split1[0], st1);
}
//取出 key 放入ArrayList 中 使用ArrayList中的get()方法 注意 與hashmap中的get()方法是不同的
Set<String> strings = ob1.keySet();
ArrayList<String> strings1 = new ArrayList<>(strings);
for (int i = 0; i < ob1.size(); i++) {
for (int j = 1 +i; j < ob1.size(); j++) {
String key1 = strings1.get(i);
String key2 = strings1.get(j);
ArrayList<String> strings2 = ob1.get(key1);
//中間 temp的作用
ArrayList<String> temp = new ArrayList<>(strings2);
ArrayList<String> strings3 = ob1.get(key2);
//這里使用中間temp 是因為如果是string1則再次使用獲取string時 不在發(fā)生變化 get(key1) 已然發(fā)生變化
temp.retainAll(strings3);
if (temp.size() == 0){
System.out.println(key1 + "與" + key2 +"無共同好友");
}
else {
System.out.println(key1 + "與" + key2 + "的共同好友有" +temp);
}
}
}
}
private static void getSampleFriend(String str) {
//第一次切割 區(qū)分用戶和用戶之間
String[] sp = str.split(";");
HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>>();
//第二次切割 將用戶和其對應的好友部分分裂
for (String s : sp) {
String[] persons = s.split(":");
//第三次切割 將每個用戶對應的好友進行分離操作
String[] friends = persons[1].split(",");
//將好友數(shù)組變成集合
List<String> list = Arrays.asList(friends);
ArrayList<String> a = new ArrayList<>(list);
//將用戶和他對應的好友都存進集合中
hm.put(persons[0], a);
}
//求交集
Scanner sc = new Scanner(System.in);
System.out.println("請輸入第一個用戶名");
String name1 = sc.next();
System.out.println("請輸入第二個用戶名");
String name2 = sc.next();
//判斷集合中是否包含對應的用戶,如果不包含 就打印用戶不存在
if (!hm.containsKey(name1.toUpperCase()) || !hm.containsKey(name2.toUpperCase())) {
System.out.println("用戶不存在,請重新運行");
return;
}
//將用戶對應的好友的集合取出 然后求交集
ArrayList<String> a1 = hm.get(name1.toUpperCase());
ArrayList<String> a2 = hm.get(name2.toUpperCase());
a1.retainAll(a2);
//判斷交集是否為空 如果為空 證明沒有共同好友
if (a1.isEmpty()) {
System.out.println(name1.toUpperCase() + "和" + name2.toUpperCase() + "沒有共同好友");
} else {
System.out.println(name1.toUpperCase() + "和" + name2.toUpperCase() + "的共同好友為:" + a1);
}
}
}
5.第二道大題
6.單鏈表
7.二叉樹