成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

JAVA中關于Map的九大問題

開發 后端
通常來說,Map是一個由鍵值對組成的數據結構,且在集合中每個鍵是唯一的。下面就以K和V來代表鍵和值,來說明一下java中關于Map的九大問題。

通常來說,Map是一個由鍵值對組成的數據結構,且在集合中每個鍵是***的。下面就以K和V來代表鍵和值,來說明一下java中關于Map的九大問題。

 

JAVA中關于Map的九大問題

0、將Map轉換為List類型

在java中Map接口提供了三種集合獲取方式:Key set,,value set, and key-value set.。它們都可以通過構造方法或者addAll()方法來轉換為List類型。下面代碼就說明了如何從Map中構造ArrayList:

// key list
List keyList = new ArrayList(map.keySet());
// value list
List valueList = new ArrayList(map.valueSet());
// key-value list
List entryList = new ArrayList(map.entrySet());

1、通過Entry 遍歷Map

java中這種以鍵值對存在的方式被稱為Map.Entry。Map.entrySet()返回的是一個key-value 集合,這是一種非常高效的遍歷方式。

for(Entry entry: map.entrySet()) {
// get key
K key = entry.getKey();
// get value
V value = entry.getValue();
}

Iterator 我們也經常用到,尤其是在JDK1.5以前

Iterator itr = map.entrySet().iterator();
while(itr.hasNext()) {
Entry entry = itr.next();
// get key
K key = entry.getKey();
// get value
V value = entry.getValue();
}

2、通過Key來對Map排序

排序需要對Map的ke進行頻繁的操作,一種方式就是通過比較器(comparator )來實現:

List list = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator() {

@Override
public int compare(Entry e1, Entry e2) {
return e1.getKey().compareTo(e2.getKey());
}

});

另外一種方法就是通過SortedMap,但必須要實現Comparable接口。

SortedMap sortedMap = new TreeMap(new Comparator() {

@Override
public int compare(K k1, K k2) {
return k1.compareTo(k2);
}

});
sortedMap.putAll(map);

3、對value對Map進行排序

這與上一點有些類似,代碼如下:

List list = new ArrayList(map.entrySet());
Collections.sort(list, new Comparator() {

@Override
public int compare(Entry e1, Entry e2) {
return e1.getValue().compareTo(e2.getValue());
}

});

4、初始化一個static 的常量Map

當你希望創建一個全局靜態Map的時候,我們有以下兩種方式,而且是線程安全的。
而在Test1中,我們雖然聲明了map是靜態的,但是在初始化時,我們依然可以改變它的值,就像Test1.map.put(3,”three”);
在Test2中,我們通過一個內部類,將其設置為不可修改,那么當我們運行Test2.map.put(3,”three”)的時候,它就會拋出一個UnsupportedOperationException 異常來禁止你修改。

public class Test1 {

private static final Map map;
static {
map = new HashMap();
map.put(1, “one”);
map.put(2, “two”);
}
}

public class Test2 {

private static final Map map;
static {
Map aMap = new HashMap();
aMap.put(1, “one”);
aMap.put(2, “two”);
map = Collections.unmodifiableMap(aMap);
}
}

5、HashMap, TreeMap, and Hashtable之間的不同

在Map接口中,共有三種實現:HashMap,TreeMap,Hashtable。

它們之間各有不同,詳細內容請參考《 HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap》一文。

6、Map中的反向查詢

我們在Map添加一個鍵值對后,意味著這在Map中鍵和值是一一對應的,一個鍵就是對應一個值。但是有時候我們需要反向查詢,比如通過某一個值來查找它的鍵,這種數據結構被稱為bidirectional map,遺憾的是JDK并沒有對其支持。

Apache和Guava 共同提供了這種bidirectional map實現,它在實現中它規定了鍵和值都是必須是1:1的關系。

7、對Map的復制

java中提供了很多方法都可以實現對一個Map的復制,但是那些方法不見得會時時同步。簡單說,就是一個Map發生的變化,而復制的那個依然保持原樣。下面是一個比較高效的實現方法:

Map copiedMap = Collections.synchronizedMap(map);

當然還有另外一個方法,那就是克隆。但是我們的java鼻祖Josh Bloch卻不推薦這種方式,他曾經在一次訪談中說過關于Map克隆的問題:在很多類中都提供了克隆的方法,因為人們確實需要。但是克隆非常有局限性,而 且在很多時候造成了不必要的影響。(原文《Copy constructor versus cloning》)

8、創建一個空的Map

如果這個map被置為不可用,可以通過以下實現

map = Collections.emptyMap();

相反,我們會用到的時候,就可以直接

map = new HashMap();


責任編輯:王雪燕 來源: 碼農網
相關推薦

2022-03-09 23:28:31

Java開發異常

2015-08-04 10:47:52

游戲策劃手機游戲

2019-10-21 08:31:34

容器微服務docker

2022-08-14 20:57:49

多線程代碼

2011-10-10 09:18:53

云計算服務器

2017-05-25 09:23:18

大數據架構Hadoop

2009-08-25 09:29:18

維護代碼

2009-04-10 09:33:00

網管員網絡故障

2013-07-25 14:56:37

JavaEE 性能

2013-06-21 14:36:02

JavaEEx性能

2014-09-22 13:43:45

Android Wea

2011-02-22 09:34:33

2009-07-16 10:04:56

Java語言

2010-04-13 11:36:01

2013-07-23 10:13:17

2022-11-17 15:17:12

Java數據結構Map

2022-06-16 11:02:18

IT領導者首席信息官

2023-09-19 10:19:24

2023-05-15 11:13:03

2009-09-15 10:46:06

Visual Stud
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 午夜在线观看免费 | 99久久久无码国产精品 | 亚洲专区在线 | 99日韩 | 成人免费片 | 国产在视频一区二区三区吞精 | 国产欧美一区二区三区在线看 | 91新视频| 色性av | 欧美中文字幕一区二区三区亚洲 | 成人免费一区二区三区视频网站 | 亚洲协和影视 | 天天干天天插天天 | 在线日韩中文字幕 | 日韩精品久久久 | 天天操天天怕 | 国产精品一区二区三 | 日韩精品一区二区三区在线播放 | 日韩毛片在线观看 | 久久91精品国产一区二区三区 | 午夜影院黄 | 国产精品一区二区视频 | 久久婷婷色 | 午夜精品在线观看 | www.伊人.com | 野狼在线社区2017入口 | 国产亚洲欧美另类一区二区三区 | 日韩欧美一二三区 | 成人精品一区二区三区中文字幕 | 毛片链接 | 另类a v| 欧美成人一区二区三区 | 成人一区在线观看 | www.天天操 | 日韩毛片 | 国产免费拔擦拔擦8x高清 | 天天插日日操 | 日韩久久久一区二区 | 婷婷激情五月网 | 羞羞色影院 | 国产日韩一区二区三区 |