資料插補—拉格朗日插值法
阿新 • • 發佈:2022-03-30
Map介面
一,前言
瞭解Map集合的特點,掌握Map集合的常用方法,Map集合的4種遍歷方式,掌握集中常用的Map介面下實現類的子類集合
二,Map集合的特點
- Map並不是集合,而表示兩個集合之間的一種關係,故Map沒有實現Collection介面。
- A集合應該是一個Set集合,B集合應該是List集合。
- 我們把A集合中的元素稱之為key,把B集合中的元素稱之為value。
- Map其實就有多個key-value(鍵值對)組成的,每一個鍵值對我們使用Entry表示,Map結構也可以理解為是Entry的集合,即Set
。
三,Map集合的常用方法
增加方法:
boolean put(Object key,Object value): 儲存一個鍵值對到Map中。 boolean putAll(Map m): 把m中的所有鍵值對新增到當前Map中。
刪除方法:
Object remove(Object key):
從Map中刪除指定key的鍵值對,並返回被刪除key對應的value。
修改方法:
無專門的方法,可以呼叫put方法,儲存相同key,不同value的鍵值對,可以覆蓋原來的。
查詢方法:
int size(): 返回當前Map中鍵值對個數。 Object get(Object key): 返回Map中指定key對應的value值,如果不存在該key,返回null boolean isEmpty(): 判斷當前Map中鍵值對個數是否為0。 boolean containsKey(Object key): 判斷Map中是否包含指定key。 boolean containsValue(Object value): 判斷Map中是否包含指定value。 Set keySet(): 返回Map中所有key所組成的Set集合。 Collection values(): 返回Map中所有value所組成的Collection集合。 Set<Entry> entrySet(): 返回Map中所有鍵值對所組成的Set集合。
四,Map集合的遍歷方式
1.keySet方法或者values方法
public void test() {
Map map = new HashMap();
// KeySet 獲取key
for (Integer key : map.keySet()) {
System.out.println(key);
}
// values 獲取value
for (Integer value : map.values()) {
System.out.println(value);
}
}
2.利用keySet get(key)方法
// keySet get(key) 獲取key and value public void testKeySetAndGetKey() { for (Integer key : map.keySet()) { System.out.println(key + ":" + map.get(key)); } }
3.利用entrySet方法
// entrySet 獲取key and value
public void testEntry() {
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
4. Iterator迭代器
public void testIterator() {
Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, Integer> entry = it.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
五,常用的Map集合
1.HashMap & Hashtable集合
- HashMap 和 Hashtable 是 Map 介面的兩個典型實現類。
- Hashtable 、HashMap 也不能保證其中 key-value 對的順序
- Hashtable 、HashMap 判斷兩個 Key 相等的標準是:兩個 Key 通過 equals 方法返回 true,hashCode 值也相等。
- Hashtable 、HashMap 判斷兩個 Value相等的標準是:兩個 Value 通過 equals 方法返回 true
區別:
- Hashtable 是一個古老的 Map 實現類,不建議使用。
- Hashtable 是一個執行緒安全的 Map 實現,但 HashMap 是執行緒不安全的。
- Hashtable不允許使用 null 作為 key 和 value,而 HashMap 可以。
例:(統計一個字串中每隔字元出現次數)
public class HashMapDemo2{
public static void main(String[] args) {
String str = "ABCDEFABCDEABCDABCABA";
//把字串轉換為char陣列
char[] charArray = str.toCharArray();
//Map的key儲存字元,value儲存出現的次數
Map<Character, Integer> map = new HashMap<>();
//迭代每一個字元
for (char ch : charArray) {
//判斷Map中是否已經儲存該字元
if (map.containsKey(ch)) {
Integer count = map.get(ch);
//如果已經儲存該字元,則把出現次數加上1
map.put(ch, count+1);
}else {
//如果沒有儲存該字元,則把設定次數為1
map.put(ch, 1);
}
}
System.out.println(map);
}
}
2.TreeMap集合
TreeMap底層基於紅黑樹演算法,因為Map中的key是Set,所以不能保證新增的先後順序,也不允許重複,但是Map中儲存的key會預設使用自然排序(從小到大),和TreeSet一樣,除了可以使用自然排序也可以自定義排序。
例:
實力化TreeSet自定義排序Comparator方法:(如按類的年齡排序)
(Comparator方法,compare(T o1, T o2))
public void test(){
Comparator com = new Comparator(){
@Override
public int compareTo(Person o1,Person o2) {
if(o1 instanceof User && o1 instanceof User){
User u1 = (User)o1;
User u2 = (User)o2;
return Integer.compare(u1.getAge(),u2.getAge())
}else{
throw new RuntimeException("輸入的資料型別不匹配")
}
}
TreeSet ts = new TreeSet(com);
for (ts.Entry<Integer, Integer> entry : ts.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
}
3. LinkedHashMap
- LinkedHashMap 是 HashMap 的子類.
- LinkedHashMap 可以維護 Map 的迭代順序:迭代順序與 Key-Value 對的插入順序一致
六,Map集合總結
- Map 用於儲存具有對映關係的資料,因此 Map 集合裡儲存著兩組值,一組值用於儲存 Map 裡的 Key,另外一組用於儲存 Map 裡的 Value。
- Map 中的 key 和 value 都可以是任何引用型別的資料。
- Map 中的 Key 不允許重複,即同一個 Map 物件的任何兩個 Key 通過 equals 方法比較中返回 false。
- Key 和 Value 之間存在單向一對一關係,即通過指定的 Key 總能找到唯一的,確定的 Value。
七,操作集合的工具類:Collections
1.特點
- Collections 是一個操作 Set、List 和 Map 等集合的工具類。
- Collections 中提供了大量方法對集合元素進行排序、查詢和修改等操作,還提供了對集合物件設定不可變、對集合物件實現同步控制等方法
2.Collections集合常用的方法
排序操作:
reverse(List):
反轉 List 中元素的順序。
shuffle(List):
對 List 集合元素進行隨機排序。
sort(List):
根據元素的自然順序對指定 List 集合元素按升序排序。
sort(List,Comparator):
根據指定的 Comparator 產生的順序對 List 集合元素進行排序。。
swap(List,int, int):
將指定 list 集合中的 i 處元素和 j 處元素進行交換。
查詢、替換:
Object max(Collection):
根據元素的自然順序,返回給定集合中的最大元素。
Object max(Collection,Comparator):
根據 Comparator 指定的順序,返回給定集合中的最大元素。
Object min(Collection):
根據元素的自然順序,返回給定集合中的最小元素。
Object min(Collection,Comparator):
根據 Comparator 指定的順序,返回給定集合中的最小元素。
int frequency(Collection,Object):
返回指定集合中指定元素的出現次數。
boolean replaceAll(List list,Object oldVal,Object newVal):
使用新值替換 List 物件的所有舊值。