List&Map&Set的操作和遍歷
阿新 • • 發佈:2018-04-07
log treeset author eset class int 一個 println 組成
List&Map&Set的操作和遍歷
Java的三大集合即:Set、List、Map。
- Set:代表無序、不可重復的集合,常用的有HashSet(哈希表實現)、TreeSet(紅黑樹實現);
- List:代表有序、可以重復的集合,比較常用的有ArrayList(數組實現)、LinkedList(鏈表實現);
- Map:代表具有映射關系的集合,常用的有HashMap(哈希表實現)、TreeMap(紅黑樹實現);
Java5以後又增加了Queue體系集合,代表一種隊列集合實現,這裏先不介紹。
List的實現類原理比較簡單,Map比較復雜,而Set其實是基於Map的一種實現。
下面從各個集合的基本操作介紹一下,分別選取HashSet、ArrayList、HashMap三個典型的實現類:
1. HashSet
/**
* HashSet的增刪遍歷
* @author wangjun
* @email [email protected]
* @time 2018年4月6日 下午2:40:33
*/
public class HashSetOperation {
public static void main(String[] args) {
//初始化
HashSet<String> set = new HashSet<>();
//增
set.add("key1" );
set.add("key2");
set.add("key3");
//刪
set.remove("key1");
//遍歷1
//使用set.descendingIterator()方法可以反向遍歷
System.out.println("HashSet遍歷1,使用Iterator:");
Iterator<String> it = set.iterator();
while(it.hasNext()) {
System.out .println(it.next());
}
//遍歷2
System.out.println("HashSet遍歷2,使用for:");
for(String str: set) {
System.out.println(str);
}
}
運行結果:
HashSet遍歷1,使用Iterator:
key2
key3
HashSet遍歷2,使用for:
key2
key3
2.ArrayList
/**
* ArrayList的增刪查改,遍歷
* @author wangjun
* @email [email protected]
* @time 2018年4月6日 下午2:25:43
*/
public class ArrayListOperation {
public static void main(String[] args) {
//初始化
List<String> list = new ArrayList<>();
//增
list.add("str1");
list.add("str2");
list.add("str3");
//刪
list.remove(1);
//查
System.out.println("list的第二個元素是:" + list.get(1));
//改
list.set(0, "str11");
System.out.println("最終的list:" + list.toString());
//遍歷1,使用for
System.out.println("LinkedList遍歷1,使用for:");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
//遍歷2,使用增強for
System.out.println("LinkedList遍歷1,使用增強for:");
for(String str: list) {
System.out.println(str);
}
//遍歷3,使用Iterator,集合類的通用遍歷方式
System.out.println("LinkedList遍歷3,使用Iterator:");
Iterator<String> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
運行結果:
list的第二個元素是:str3
最終的list:[str11, str3]
LinkedList遍歷1,使用for:
str11
str3
LinkedList遍歷1,使用增強for:
str11
str3
LinkedList遍歷3,使用Iterator:
str11
str3
3.HashMap
/**
* hashMap的增刪查改
* 無序
* key相當於set,不可重復
* value相當於list,可重復
* @author wangjun
* @email [email protected]
* @time 2018年4月6日 下午2:30:31
*/
public class HashMapOperation {
public static void main(String[] args) {
//初始化
HashMap<String,String> map = new HashMap<>();
//增
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
//刪
map.remove("key2");
//查
System.out.println("key1對應的valve為:" + map.get("key1"));
//改
map.replace("key3", "value33");
System.out.println("最終的map是:" + map.toString());
//遍歷1,取出map中所有的key組成一個set
System.out.println("HashMap遍歷1,取出map中所有的key組成一個set:");
for(String key: map.keySet()) {
System.out.println("key:" + key + ",value:" + map.get(key));
}
//遍歷2,取出key組成set後,通過Iterator遍歷key
System.out.println("HashMap遍歷2,取出key組成set後,通過Iterator遍歷key:");
Iterator<String> it = map.keySet().iterator();
while(it.hasNext()) {
String key = it.next();
String value = map.get(key);
System.out.println("key:" + key + ",value:" + value);
}
//遍歷3,取出map中實際存儲的數據結構--Map.Entry,在HashMap中使用的是Node靜態內部類
//推薦這種,尤其是數據很大時
System.out.println("HashMap遍歷3,通過Map.Entry:");
Set<Map.Entry<String, String>> entry = map.entrySet();
for(Map.Entry<String, String> entryItem: entry) {
String key = entryItem.getKey();
String value = entryItem.getValue();
System.out.println("key:" + key + ",value:" + value);
}
//遍歷4,只能遍歷value,不能遍歷key,相當於取出map中左右的value組成一個list
System.out.println("HashMap遍歷4,只遍歷value:");
for(String value: map.values()) {
System.out.println("value:" + value);
}
}
}
運行結果:
key1對應的valve為:value1
最終的map是:{key1=value1, key3=value33}
HashMap遍歷1,取出map中所有的key組成一個set:
key:key1,value:value1
key:key3,value:value33
HashMap遍歷2,取出key組成set後,通過Iterator遍歷key:
key:key1,value:value1
key:key3,value:value33
HashMap遍歷3,通過Map.Entry:
key:key1,value:value1
key:key3,value:value33
HashMap遍歷4,只遍歷value:
value:value1
value:value33
可以看到:
遍歷Set一般常用2種方式;
遍歷List一般常用3種方式;
遍歷Map一般常用4種方式;
根據使用場景,選擇合適的遍歷方式。
List&Map&Set的操作和遍歷