搜尋
首頁Javajava教程關於java中Map的九大問題分析
關於java中Map的九大問題分析Jan 19, 2017 am 10:38 AM
java map

通常來說,Map是一個由鍵值對組成的資料結構,且在集合中每個鍵是唯一的。下面就以K和V來代表鍵和值,來說明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的一種進行頻繁的操作,一種方式就是透過比較器(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



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克隆的問題:在許多類別中都提供了克隆的方法,因為人們確實需要。但是克隆非常有局限性,而且在很多時候造成了不必要的影響。
8、創建一個空的Map

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

 map = Collections.emptyMap();

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

 map = new HashMap( );


以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持PHP中文網。

🎜更多關於java中Map的九大問題分析相關文章請關注PHP中文網! 🎜🎜🎜🎜
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Java Map 性能优化揭秘:让你的数据操作更快速、更高效Java Map 性能优化揭秘:让你的数据操作更快速、更高效Feb 20, 2024 am 08:31 AM

JavaMap是Java标准库中常用的数据结构,它以键值对的形式存储数据。Map的性能对于应用程序的运行效率至关重要,如果Map的性能不佳,可能会导致应用程序运行缓慢,甚至崩溃。1.选择合适的Map实现Java提供了多种Map实现,包括HashMap、TreeMap和LinkedHashMap。每种Map实现都有其各自的优缺点,在选择Map实现时,需要根据应用程序的具体需求来选择合适的实现。HashMap:HashMap是最常用的Map实现,它使用哈希表来存储数据,具有较快的插入、删除和查找速度

Java Map揭秘:实现数据快速存取的技巧和策略Java Map揭秘:实现数据快速存取的技巧和策略Feb 19, 2024 pm 06:21 PM

JavaMap是一个基于键值对的数据结构,它允许开发人员快速存储和检索数据。Map的键可以是任何对象,而值可以是任何类型的数据。Map中每个键最多只能与一个值相关联,如果对同一个键设置多个值,则只会保留最后设置的值。Map有两种主要实现:HashMap:使用散列表来存储键值对。HashMap的性能取决于散列表的实现方式,在大多数情况下,HashMap的性能优于TreeMap。TreeMap:使用红黑树来存储键值对。TreeMap的性能与HashMap相似,但是在某些情况下,TreeMap的性能可

Java Map 的扩展与定制:打造你的专属数据结构,满足你的定制需求Java Map 的扩展与定制:打造你的专属数据结构,满足你的定制需求Feb 19, 2024 pm 09:50 PM

JavaMap是一个非常有用的数据结构,可以用于各种应用场景。但有时,我们可能需要扩展或定制Map来满足特定需求,例如添加新的功能、改变遍历顺序或创建自定义序列化器。本文将介绍如何扩展和定制JavaMap,以帮助你打造专属数据结构,满足你的定制需求。1.扩展JavaMap扩展JavaMap的最简单方法是创建一个新的类,继承自java.util.Map接口。这个新类可以添加新的方法或属性,也可以覆盖Map接口中的方法。例如,我们可以创建一个新的Map类,添加一个新的方法来计算键值对的总和:publ

Java Map 的高级技巧:掌握你可能不知道的冷知识,提升你的编程能力Java Map 的高级技巧:掌握你可能不知道的冷知识,提升你的编程能力Feb 19, 2024 pm 12:33 PM

Map接口概述Map接口是Java集合框架中用于存储键值对的数据结构。它允许您使用键来查找和检索关联的值。Map接口提供了许多有用的方法,包括put()、get()、remove()、containsKey()、containsValue()、size()、isEmpty()等。Map的实现Java中最常用的Map实现是HashMap和TreeMap。HashMap是一个基于哈希表的Map实现,它通过计算键的哈希值来快速查找和检索值。TreeMap是一个基于红黑树的Map实现,它以升序或降序对键

Java Map 在企业级应用中的应用:探索其在真实项目中的强大作用Java Map 在企业级应用中的应用:探索其在真实项目中的强大作用Feb 19, 2024 pm 01:27 PM

JavaMap是一种数据结构,它允许您使用键值对来存储数据。键是唯一的,而值可以是任何类型的数据。Map可以通过多种方式进行实现,包括HashMap、TreeMap和ConcurrentHashMap。在企业级应用中,Map可以用于多种目的。例如,您可以使用Map来:存储用户数据,例如姓名、电子邮件地址和密码。存储产品数据,例如名称、价格和描述。存储订单数据,例如客户姓名、地址和购买的商品。存储缓存数据,例如最近访问过的网页或数据库查询结果。Map非常适合存储复杂的数据结构。例如,您可以使用Ma

掌握Java Map的精髓,进阶学习者的必备技能掌握Java Map的精髓,进阶学习者的必备技能Feb 19, 2024 pm 06:00 PM

JavaMap是一种数据结构,它允许您使用键来存储和检索值。Map中的键是唯一的,这意味着您不能使用相同的键存储两个值。Map中的值可以是任何对象,包括其他Map。Map在Java中有很多用途。例如,您可以使用Map来存储用户ID和密码、产品ID和价格,或者文件名和文件内容。Map还非常适合在应用程序中存储配置设置。Java中有三种内置的Map实现:HashMap、TreeMap和LinkedHashMap。HashMap是基于哈希表的Map实现,它是使用最广泛的Map实现。TreeMap是基于

洞悉Java Map的巧妙设计,开启算法与应用之门洞悉Java Map的巧妙设计,开启算法与应用之门Feb 19, 2024 pm 01:30 PM

JavaMap的设计理念JavaMap的设计理念基于“键值对”的概念,其中键是唯一的标识符,而值是与该键相关联的数据。这种设计使得Map可以高效地查找、插入和删除数据,并支持各种高级操作,如排序、分组和聚合。Map的实现方式有两种:哈希表(HashMap)和树形结构(TreeMap)。哈希表通过散列函数将键映射到内存地址,从而实现快速查找和插入。而树形结构则根据键的大小进行排序,从而实现有序存储和快速查找。JavaMap的应用场景JavaMap具有广泛的应用场景,包括:缓存系统:Map可以用来存

揭秘Java Map:深入浅出的遍历指南揭秘Java Map:深入浅出的遍历指南Feb 20, 2024 pm 12:00 PM

1.概览Map是Java集合框架中的一员,以键值对形式存储元素,允许快速检索和修改数据。由于其强大的功能和广泛的应用,掌握Map的遍历方法是Java程序员必备技能。2.遍历方法Map提供了多种遍历方式,每种方法各有优缺点,可根据具体需求选择。3.keySet()遍历keySet()方法返回Map中所有键的集合,可通过迭代器或增强型for循环遍历键,进而获取对应的值。//使用keySet()遍历MapMapmap=newHashMap();map.

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),