1. 程式人生 > 其它 >資料插補—拉格朗日插值法

資料插補—拉格朗日插值法

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 物件的所有舊值。