1. 程式人生 > >Java——Map接口,可變參數,collections(集合實現類)

Java——Map接口,可變參數,collections(集合實現類)

try set方法 數組 lib sea next() 對象 工具類 span

一、Map接口

Map中的集合是雙列集合(鍵值對),Map中的集合不能包含重復的鍵,值可以重復;每個鍵只能對應一個值。

  • HashMap<K,V>:存儲數據采用的哈希表結構,元素的存取順序不能保證一致。由於要保證鍵的唯一、不重復,需要重寫鍵的hashCode()方法、equals()方法。
  • LinkedHashMap<K,V>HashMap下有個子類LinkedHashMap,存儲數據采用的哈希表結構+鏈表結構。通過鏈表結構可以保證元素的存取順序一致;通過哈希表結構可以保證的鍵的唯一、不重復,需要重寫鍵的hashCode()方法、equals()方法。

註意:Map

接口中的集合都有兩個泛型變量<K,V>,在使用時,要為兩個泛型變量賦予數據類型。兩個泛型變量<K,V>的數據類型可以相同,也可以不同。

Map常用方法

技術分享圖片

1、將鍵值對存儲到集合中

/*
 *  將鍵值對存儲到集合中
 *  V put(K,V) K 作為鍵的對象, V作為值的對象
 *  存儲的是重復的鍵,將原有的值,覆蓋
 *  返回值一般情況下返回null,
 *  存儲重復鍵的時候,返回被覆蓋之前的值
 */
public static void function(){
	//創建集合對象,HashMap,存儲對象,鍵是字符串,值是整數
	Map<String, Integer> map = new HashMap<String, Integer>();
	map.put("a", 1);
	map.put("b", 2);
	map.put("c", 3);
	System.out.println(map);
}

2、獲取值

/*
 * 通過鍵對象,獲取值對象
 * V get(K)
 * 如果集合中沒有這個鍵,返回null
 */
public static void function_1(){
	//創建集合對象,作為鍵的對象整數,值的對象存儲字符串
	Map<Integer,String> map = new HashMap<Integer, String>();
	map.put(1, "a");
	map.put(2, "b");
	map.put(3, "c");
	System.out.println(map);
	
	String value = map.get(4);
	System.out.println(value);
}

3、移除鍵值對

/*
 *  移除集合中的鍵值對,返回被移除之前的值
 *  V remove(K)
 */
public static void function_2(){
	Map<Integer,String> map = new HashMap<Integer, String>();
	map.put(1, "a");
	map.put(2, "b");
	map.put(3, "c");
	System.out.println(map);
	
	String value = map.remove(33);
	System.out.println(value);
	System.out.println(map);
}

4、Map集合遍歷——通過值獲取鍵

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/*
 *  Map集合的遍歷
 *    利用鍵獲取值
 *    Map接口中定義方法keySet
 *    所有的鍵,存儲到Set集合
 */
public class MapDemo1 {
	public static void main(String[] args) {
		/*
		 *  1. 調用map集合的方法keySet,所有的鍵存儲到Set集合中
		 *  2. 遍歷Set集合,獲取出Set集合中的所有元素 (Map中的鍵)
		 *  3. 調用map集合方法get,通過鍵獲取到值
		 */
		Map<String,Integer> map = new HashMap<String,Integer>();
		map.put("a", 11);
		map.put("b", 12);
		map.put("c", 13);
		map.put("d", 14);
		
		//1. 調用map集合的方法keySet,所有的鍵存儲到Set集合中
		Set<String> set = map.keySet();
		//2. 遍歷Set集合,獲取出Set集合中的所有元素 (Map中的鍵)
		Iterator<String> it = set.iterator();
		while(it.hasNext()){
			//it.next返回是Set集合元素,也就是Map中的鍵
			//3. 調用map集合方法get,通過鍵獲取到值
			String key = it.next();
			Integer value = map.get(key);
			System.out.println(key+"...."+value);
		}
		System.out.println("=======================");
		for(String key : map.keySet()){
			Integer value = map.get(key);
			System.out.println(key+"...."+value);
		}
	}
}

5、Map集合遍歷——entrySet方法

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/*
 *  Map集合獲取方式
 *  entrySet方法,鍵值對映射關系(結婚證)獲取
 *  實現步驟:
 *    1. 調用map集合方法entrySet()將集合中的映射關系對象,存儲到Set集合
 *        Set<Entry <K,V> >
 *    2. 叠代Set集合
 *    3. 獲取出的Set集合的元素,是映射關系對象
 *    4. 通過映射關系對象方法 getKet, getValue獲取鍵值對
 *    
 *    創建內部類對象 外部類.內部類 = new 
 */
public class MapDemo2 {
	public static void main(String[] args) {
		Map<Integer,String> map = new HashMap<Integer, String>();
		map.put(1, "abc");
		map.put(2, "bcd");
		map.put(3, "cde");
		//1. 調用map集合方法entrySet()將集合中的映射關系對象,存儲到Set集合
		Set<Map.Entry <Integer,String> >  set = map.entrySet();
		//2. 叠代Set集合
		Iterator<Map.Entry <Integer,String> > it = set.iterator();
		while(it.hasNext()){
			//  3. 獲取出的Set集合的元素,是映射關系對象
			// it.next 獲取的是什麽對象,也是Map.Entry對象
			Map.Entry<Integer, String> entry = it.next();
			//4. 通過映射關系對象方法 getKet, getValue獲取鍵值對
			Integer key = entry.getKey();
			String value = entry.getValue();
			System.out.println(key+"...."+value);
		}
		
		System.out.println("=========================");
		for(Map.Entry<Integer, String> entry : map.entrySet()){
			System.out.println(entry.getKey()+"..."+entry.getValue());
		}
	}
}

HashTable實現類

import java.util.Hashtable;
import java.util.Map;

/*
 *  Map接口實現類 Hashtable
 *  底層數據結果哈希表,特點和HashMap是一樣的
 *  Hashtable 線程安全集合,運行速度慢
 *  HashMap 線程不安全的集合,運行速度快
 *  
 *  Hashtable命運和Vector是一樣的,從JDK1.2開始,被更先進的HashMap取代
 *  
 *  HashMap 允許存儲null值,null鍵
 *  Hashtable 不允許存儲null值,null鍵
 *  
 *  Hashtable他的孩子,子類 Properties 依然活躍在開發舞臺
 */
public class HashtableDemo {
	public static void main(String[] args) {
		Map<String,String> map = new Hashtable<String,String>();
		map.put(null, null);
		System.out.println(map);
	}
}

LinkedHashMap實現類

import java.util.LinkedHashMap;

/*
 *  LinkedHashMap繼承HashMap
 *  保證叠代的順序
 */
public class LinkedHashMapDemo {
	public static void main(String[] args) {
		LinkedHashMap<String, String> link = new LinkedHashMap<String, String>();
		link.put("1", "a");
		link.put("13", "a");
		link.put("15", "a");
		link.put("17", "a");
		System.out.println(link);
	}
}

二、可變參數

/*
 *  JDK1.5新的特性,方法的可變參數
 *  前提: 方法參數數據類型確定,參數的個數任意
 *  可變參數語法: 數據類型...變量名
 *  可變參數,本質就是一個數組
 */
public class VarArgumentsDemo {
	public static void main(String[] args) {
		//調用一個帶有可變參數的方法,傳遞參數,可以任意
	//	getSum();
		int sum = getSum(5,34,3,56,7,8,0);
		System.out.println(sum);
		
		function(1,2,3);
	}
	/*
	 * 可變參數的註意事項
	 * 1. 一個方法中,可變參數只能有一個
	 * 2. 可變參數,必須寫在參數列表的最後一位
	 */
	 public static void function(Object...o){
		 
	 }
	
	/*
	 * 定義方法,計算10個整數和
	 * 方法的可變參數實現
	 */
	public static int getSum(int...a){
		int sum = 0 ;
		for(int i : a){
			sum = sum + i;
		}
		return sum;
	}
}

三、collections——集合實現類

全是List實現類下的

1、排序

/*
 *  Collections.sort靜態方法
 *  對於List集合,進行升序排列
 */
public static void function(){
	//創建List集合
	List<String> list = new ArrayList<String>();
	list.add("ewrew");
	list.add("qwesd");
	list.add("Qwesd");
	list.add("bv");
	list.add("wer");
	System.out.println(list);
	//調用集合工具類的方法sort
	Collections.sort(list);
	System.out.println(list);
}

2、二分查找

/*
 * Collections.binarySearch靜態方法
 * 對List集合進行二分搜索,方法參數,傳遞List集合,傳遞被查找的元素
 */
public static void function_1(){
	List<Integer> list = new ArrayList<Integer>();
	list.add(1);
	list.add(5);
	list.add(8);
	list.add(10);
	list.add(15);
	list.add(20);
	//調用工具類靜態方法binarySearch
	int index = Collections.binarySearch(list, 16);
	System.out.println(index);
}

3、隨機排序

/*
 * Collections.shuffle方法
 * 對List集合中的元素,進行隨機排列
 */
public static void function_2(){
	List<Integer> list = new ArrayList<Integer>();
	list.add(1);
	list.add(5);
	list.add(9);
	list.add(11);
	list.add(8);
	list.add(10);
	list.add(15);
	list.add(20);	
	System.out.println(list);
	
	//調用工具類方法shuffle對集合隨機排列
	Collections.shuffle(list);
	System.out.println(list);
}

Java——Map接口,可變參數,collections(集合實現類)