集合與泛型(二)
阿新 • • 發佈:2021-01-27
Map介面
Map介面專門處理鍵值對映資料的儲存,可以根據鍵實現對值的操作
最常用的實現類是HashMap
HashMap map= new HashMap();
map.put("CN","中華人民共和國");//以key,value進行儲存
map.put("UK","大不列顛聯合王國");
map.put("US","美利堅合眾國");
map.put("RU","俄羅斯聯邦共和國" );
System.out.println(map);```
執行:
{RU=俄羅斯聯邦共和國, UK=大不列顛聯合王國, CN=中華人民共和國, US=美利堅合眾國}
常用方法
System.out.println(map.get("CN"));//用鍵獲取值
map.put("US","美國");//修改 map.replace()修改方面基本一致
map.replace("CN","中國");
map.remove("US");//根據key刪除
map.remove ("RU","美利堅合眾國");//key value都匹配時才能刪除
System.out.println(map.size());//幾組資料
System.out.println(map.containsKey("CN"));//是否包含key
System.out.println(map.containsValue("大不列顛聯合王國"));//是否包含value
map.clear();//清空
if(map.isEmpty()) System.out.println("已經清空");//判斷是否為空
遍歷
for (Object o : map.entrySet()) {//entrySet鍵值對對映 Set集合
System.out.println(o);
}
for (Object o : map.keySet()) {//獲取key集合 Set集合
System.out.println(o);
System.out.println(map.get(o));///通過鍵來遍歷value
}
Collection values=map.values();//獲取value的集合 Collection型別
for (Object value : map.values()) {
System.out.println(value);
}
Map底層
包含介面entry<K,V>
在HashMap中使用node節點實現了entry鍵值對
node節點用next屬性實現了單向連結串列
map底層 entry+單向連結串列 (陣列+單向連結串列)
當元素節點個數超過8時,轉用紅黑樹進行底層儲存
泛型
將物件的型別作為引數,指定到其他類或者方法上,從而保證型別轉換的安全性和穩定性
本質是引數化型別
泛型集合可以約束集合內的元素型別
Java泛型中的標記符含義:
E - Element (在集合中使用,因為集合中存放的是元素)
T - Type(Java 類)
K - Key(鍵)
V - Value(值)
N - Number(數值型別)
? - 表示不確定的java型別
S、U、V - 2nd、3rd、4th types
String name;
String gender;
public Student(String name, String gender) {
this.name = name;
this.gender = gender;
}
public String toString() {
return "學員姓名是:"+name +";性別是:"+gender ;
}
HashMap<String,Student> map=new HashMap<>();
map.put("jack",new Student("李明","男"));
map.put("merry",new Student("小紅","女"));
for (String s : map.keySet()) {
System.out.println(s + "對應的" + map.get(s));
}
自定義泛型
public class Teacher<T> {
String name;
String gender;
public Teacher(String name,String gender){
this.name=name;
this.gender=gender;
}
public void printT(T t){//自定義泛型
System.out.println(t);
}
public String toString(){
return "姓名是:"+name+"性別是;"+gender;
}
public static void main(String[] args) {
Teacher<Teacher> t=new Teacher<>("zzz","女");
t.printT(t);
}
}
Collections
Collections類定義了一系列用於操作集合的靜態方法
Collections和Collection不同,前者是集合的操作類,後者是集合介面
Collections提供的常用靜態方法
sort():排序
binarySearch():查詢
max()\min():查詢最大\最小值
ArrayList<Integer> list = new ArrayList<>();
//泛型不能用基本資料型別
list.add(10);
list.add(3);
list.add(6);
list.add(8);
System.out.println(list);
Collections.sort(list);//升序
System.out.println(list);
實現降序
Collections.sort(list,new Comparator<Integer>(){
public int compare(Integer o1,Integer o2){
return o2-o1;//降序
}
});
System.out.println(list);
[10, 8, 6, 3]
實現一個類的物件之間比較大小,該類要實現Comparable介面
重寫compareTo()方法
public class Student implements Comparable<Student>{//實現Comparable介面
int id;
String name;
String gender;
public Student(int id, String name, String gender) {
this.id = id;
this.name = name;
this.gender = gender;
}
public String toString() {
return "學號是:"+id+"學員姓名是:"+name +";性別是:"+gender ;
}
public int compareTo(Student o) {//重寫compareTo方法
// return this.id-o.id;//升序
return o.id-this.id;//降序
}
}
List<Student> stuList = new LinkedList();
Student s1=new Student(8,"zzz","女");
Student s2=new Student(11,"ddd","男");
Student s3=new Student(14,"aaa","男");
Student s4=new Student(2,"ssss","男");
Student s5=new Student(5,"fff","男");
stuList.add(s1);
stuList.add(s2);
stuList.add(s3);
stuList.add(s4);
stuList.add(s5);
System.out.println(stuList);
Collections.sort(stuList);
System.out.println(stuList);