------- 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)); //此時如果 要增刪數組元素的話,就會出現異常
}
}