java高階API day2-Map介面與泛型
技術標籤:java
Map介面
Map介面專門處理鍵值對映資料的儲存,可以根據鍵實現對值的操作
Map介面最常用的實現類是HashMap
Map介面常用方法
方法名 | 說明 |
---|---|
Object put(Object key,Object val) | 以“鍵-值”對的方式進行儲存 |
Object get(Object key) | 根據鍵返回相關聯的值,如果不存在指定的鍵,返回null |
Object remove(Object key) | 刪除由指定的鍵對映的“鍵-值”對 |
int size() | 返回元素個數 |
Set keySet() | 返回鍵的集合 |
Collection values() | 返回值的集合 |
boolean containsKeys(Object key) | 如果存在由指定的鍵對映的“鍵-值”對,返回true |
遍歷Map集合
方法1:通過迭代器Iterator實現遍歷
Map<String, String> map = new HashMap<String, String>();
Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry<String, String> entry = entries.next ();
System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
}
方法2:增強型for迴圈
Map<String, String> map = new HashMap<String, String>();
for (String key : map.keySet()) {
String value = map.get(key);
System.out.println("Key = " + key + ", Value = " + value);
}
方法3:鍵值對
//獲取鍵
Set keys = map.keySet();
for (Object key : keys) {
System.out.println(key);
System.out.println(map.get(key));
}
//獲取值
Collection values = map.values();
for (Object value : values) {
System.out.println(value);
}
Map介面注意事項:
包含介面Entry<K,V>
在HashMap中使用Node節點實現了Entry“鍵-值”對
Node節點用next屬性實現了單向連結串列
map底層entry+單向連結串列,陣列+單向連結串列
當元素節點個數超過8時,轉用紅黑樹進行底層儲存
使用map.remove(Object key,Object value)方法進行刪除操作時,必須要key和value都匹配時才能刪除
map.put(Object key,Object value)在被用作修改時,與map.replace(Object key,Object value)作用基本一致
泛型集合
通過使用泛型我們可以解決以下容易出現的異常問題:
List的get(int index)方法獲取元素
Map的get(Object key)方法獲取元素
Iterator的next()方法獲取元素
泛型的定義:將物件的型別作為引數,指定到其他類或者方法上,從而保證型別轉換的安全性和穩定性(本質是引數化型別)
泛型集合可以約束集合內的元素型別
典型泛型集合ArrayList、HashMap<K,V>
、<K,V>表示該泛型集合中的元素型別
泛型集合中的資料不再轉換為Object
使用泛型的時候,就可以限定集合輸入的型別,從而規定了集合輸出的型別
Collections演算法類
Java集合框架將針對不同資料結構演算法的實現都儲存在工具類中
Collections類定義了一系列用於操作集合的靜態方法
Collections和Collection不同,前者是集合的操作類,後者是集合介面
Collections提供的常用靜態方法:
sort():排序
binarySearch():查詢(使用二分法進行查詢,前提是已經排好序)
max()\min():查詢最大\最小值
Collections 排序
Collections類可以對集合進行排序、查詢和替換操作
實現一個類的物件之間比較大小,該類要實現Comparable介面
重寫**compareTo()**方法
降序和升序的操作如下程式碼:
public class Student implements Comparable<Student>{
public int id;
private String name;
private String sex;
public Student(int id,String name, String sex) {
this.id=id;
this.name = name;
this.sex = sex;
}
@Override
public int compareTo(Student o) {
// return this.id-o.id;//升序
return o.id-this.id;//降序
}
}