Java——Map接口,可變參數,collections(集合實現類)
阿新 • • 發佈:2018-02-08
try set方法 數組 lib sea next() 對象 工具類 span 接口中的集合都有兩個泛型變量<K,V>,在使用時,要為兩個泛型變量賦予數據類型。兩個泛型變量<K,V>的數據類型可以相同,也可以不同。
一、Map接口
Map中的集合是雙列集合(鍵值對),Map中的集合不能包含重復的鍵,值可以重復;每個鍵只能對應一個值。
- HashMap<K,V>:存儲數據采用的哈希表結構,元素的存取順序不能保證一致。由於要保證鍵的唯一、不重復,需要重寫鍵的hashCode()方法、equals()方法。
- LinkedHashMap<K,V>:HashMap下有個子類LinkedHashMap,存儲數據采用的哈希表結構+鏈表結構。通過鏈表結構可以保證元素的存取順序一致;通過哈希表結構可以保證的鍵的唯一、不重復,需要重寫鍵的hashCode()方法、equals()方法。
註意:Map
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(集合實現類)