1. 程式人生 > 其它 >集合與泛型(二)

集合與泛型(二)

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);

在這裡插入圖片描述