黑馬程序員——集合(下)(Map及工具類)

  ------- android培訓java培訓、期待與您交流! ----------

Map集合和Collection屬於2個不同的類:

Collection:只需要一個值 (value),添加元素使用add(value)。

Map:需要2個值,存儲的方式爲  鍵值對(key,value),添加元素使用 put(key,value)

Map常用子類介紹:

  |--HashMap:哈希表結構:允許存入null 鍵 和 null值,線程不同步

  |--TreeMap:二叉樹結構,給Map集合排序

  |--Hashtable:哈希表結構,不允許存入 null鍵  和 null值,線程同步

Map方法:

1、添加

①put(key,value)

②put(Map集合)

2、刪除

① value   remove(key):通過鍵 刪除 值。

②clear():清空集合。

3、判斷

①containsKey(key):指定 鍵 是否存在

②containsValue(value):指定 值 是否存在

③isEmpty():集合是否爲空

4、獲取

①get(key)  :通過 key 返回 value;通過 keySet集合遍歷,需要用這個。

②size() :集合容量

③values():取出Map集合中的value值,並返回一個Collection 集合

④keySet():集合遍歷:返回一個set集合,裏面的值全部都是 key

⑤entrySet():集合遍歷:返回一種關係,通過這種關係可以獲取key 和 value


通過2種不同的遍歷方式遍歷Map集合:

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


/**通過keySet 和 entrySet 2種方法遍歷Map集合
 * 
 * */
public class Map001 
{
	public static void main(String[] args) 
	{
		HashMap<String,String> hmap = new HashMap<>();
		hmap.put("masai", "25");
		hmap.put("xiaozhang", "15");
		hmap.put("xiaoming", "55");
		hmap.put("xiaohua", "22");
		
		keySetDemo(hmap);
		System.out.println();
		entrySetDemo(hmap);

	}

	private static void entrySetDemo(HashMap<String, String> hmap)
	{
		Iterator<Map.Entry<String,String>> it = hmap.entrySet().iterator();	//拿到的是一種關係
		while(it.hasNext())
		{
			Map.Entry<String, String> gx = it.next();
			String key = gx.getKey();
			String value = gx.getValue();
			System.out.println("我是通過entrySet遍歷的" + key + "::::" + value);
			
		}
		
	}

	private static void keySetDemo(HashMap<String, String> hmap)//拿到所有的key。然後通過 get(key)得到值
	{
		Iterator<String> it = hmap.keySet().iterator();
		while(it.hasNext())
		{
			String key = it.next();
			String value = hmap.get(key);
			System.out.println("我是通過keySet遍歷的"+ key + "::" + value);			
		}		
	}

}



練習將字符"sarewjoqeoqwjojvqqxbb" 按照一定格式打印:a(1)b(2)....

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

/*練習將字符"sarewjoqeoqwjojvqqxbb" 按照一定格式打印:a(1)b(2)....
 * 
 * */
public class Test015
{

	public static void main(String[] args) 
	{
		String str = "sarewjoqeoqwjojvqqxbb";
		System.out.println(formatStr(str));

	}

	private static String formatStr(String str) 
	{
		TreeMap<Character,Integer> hmap = new TreeMap<>();
		StringBuilder sb = new StringBuilder();	//將集合元素遍歷出來存進字符串緩衝區
		char[] chs = str.toCharArray();
		
		Integer flag;
		for(int i=0; i<chs.length; i++)
		{
			if((flag=hmap.get(chs[i]))!=null)
				hmap.put(chs[i],++flag);
			else
				hmap.put(chs[i], 1);
		}
		
		/**遍歷集合,獲取出key 和 value,並按照格式存入進字符串緩衝區
		*/
		Iterator<Map.Entry<Character,Integer>> it = hmap.entrySet().iterator();
		while(it.hasNext())
		{
			Map.Entry<Character,Integer> entry = it.next();
			sb.append(entry.getKey()+"("+ entry.getValue() + ")" );		
		}
		return sb.toString();
	}
}



集合工具類(Collection),和數組工具類(Arrays):2個工具類的方法都靜態方法。

Collection工具簡單分類:

1、sort(集合):將集合安裝自然順序排序。可自定義比較器。

2、max(集合):按照自然順序排序後,並返回最大值,可自定義比較器

3、min(集合):同上,返回最小值。

4、binarySearch(集合,key):找到就返回角標,沒有找到返回負數。注意:二分查找必須要是 有序集合

5、fill(集合,key):將集合統一替換成一個元素

6、replaceArr(集合,舊,新):將集合的某一個值 替換成指定 值

7、reverse(集合):反轉集合。

8、reverseOrder():返回一個逆向的自然順序比較器

9、reverseOrder(Comparator 接口比較器):返回一個指定的逆向的比較器。

10、swap(集合,int i,int x):交換集合指定角標值

11、shuffle(List):使用默認的源,將打亂集合順序

MyReverse:自己定義完成一個集合的反轉:

/**MyReverse:自己定義完成一個集合的反轉
 * */
import java.util.ArrayList;
import java.util.Collections;

public class MyReverse {

	public static void main(String[] args)
	{
		ArrayList<String> aList = new ArrayList<String>();
		aList.add("java01");
		aList.add("java02");
		aList.add("java03");
		aList.add("java04");
		aList.add("java05");
		aList.add("java06");
		aList.add("java07");
		
		for(int start=0,end=aList.size()-1; start<end; start++,end--)
		{
			Collections.swap(aList,start,end);
		}
		System.out.println(aList);
	}
}

Arrays工具簡單分類:

1、toString():打印數組原型

2、binarySearch(arr,key):二分查找。同集合。注意:數組也必須是有順序的

3、copyOf(arr,複製長度):返回一個新數組

4、copyOfRange(arr,start,end):複製一個數組,從他的start開始,end-1結束(包含頭,不包含尾)

5、sort (arr):將一個數字安自然順序排序,可自定義對象比較器

6、fill(arr,newstr):將數組的值,替換成指定新值。


數組和集合的互轉,Java分別提供了2個功能。

數組轉集合:asList(arr):返回一個集合,爲什麼要使用這個功能呢?因爲我們可以使用集合的方法操作數組!!注意:數組轉集合後,不能使用集合的增刪方法。

集合轉數組:Collection中  toArray(集合長度):返回一個和集合同樣長度的數組,爲什麼要使用這個功能呢?因爲在集合中可以隨意的增刪,但是轉成數組以後,就不可以增刪。主要是爲了限定操作。

import java.util.Arrays;
import java.util.List;

/*
 * 演示 數組轉集合後....可以使用集合的方法來操縱元素
 * */
public class Test16
{
	public static void main(String[] args) 
	{
		String[] strArr = {"小名","小馬","小葉","小華","小張"};
		List<String> aList = Arrays.asList(strArr);
		
		/**將數組轉成集合後,可以使用 contains,get,indexOf,subList。
		 * */
		System.out.println(aList.contains("小張"));	//true
		System.out.println(aList.get(0));		//小名
		System.out.println(aList.indexOf("小葉"));	//2
		System.out.println(aList.subList(1, 3));	//包含頭,不包含尾
	}

}




演示集合轉數組

import java.util.ArrayList;
import java.util.Arrays;

/**演示集合轉數組
 * */
public class Test017 
{
	public static void main(String[] args) 
	{
		ArrayList<String> aList = new ArrayList<String>();
		aList.add("haha1");
		aList.add("haha2");
		aList.add("haha3");
		aList.add("haha4");
		
		String[] listToArr = aList.toArray(new String[aList.size()]);
		System.out.println(Arrays.toString(listToArr));	//此時如果 要增刪數組元素的話,就會出現異常
	}
}













發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章