Java中的Map允許有重復(fù)元素嗎?
Java中常見的三個集合接口:List、Set、Map,已經(jīng)知道List中是允許有重復(fù)元素的,而Set中是不允許有重復(fù)元素的,那么Map中允許有重復(fù)元素嗎?
查閱資料,發(fā)現(xiàn)是不可以的,因為map是無序的,它的查詢需要通過key的值來查找,如果你定義兩個同樣的key,那么一個key就對應(yīng)了多個值,這樣就違背了java對map的定義,鍵和值是一一對應(yīng)的。所以key不可以重復(fù)。
寫個代碼測試一下:
package com.test.collection;
import java.util.HashMap;
import java.util.Map;
//Map中key值不可重復(fù)的測試
public class TestEquals {
public static void main(String[] args) {
String s1=new String("abc");
String s2=new String("abc");
Map map=new HashMap();
map.put(s1, "abc123");
map.put(s2, "ABC456");//第二個會覆蓋第一個元素
//注意:map中key值不可重復(fù),直接根據(jù)比較的是equals,只有equals相同則覆蓋
System.out.println(map.size());
System.out.println(map.get(s1));
}
}
輸出結(jié)果:
1
ABC456
如果key重復(fù),應(yīng)該選取這個key對應(yīng)的哪個值放入容器呢?做了一下測試:
public class Test {
public static Map putSome(Map<String,String> map){
map.put("gender", "Male");
map.put("name", "Athor");
map.put("name", "Cindy");
map.put("name", "Billy");
map.put("from","China");
return map;
}
public static void main(String[] args) {
System.out.println(putSome(new HashMap<String,String>()));
System.out.println(putSome(new TreeMap<String,String>()));
System.out.println(putSome(new LinkedHashMap<String,String>()));
}
}
輸出結(jié)果:
{name=Billy, gender=Male, from=China}
{from=China, gender=Male, name=Billy}
{gender=Male, name=Billy, from=China}
可見不論是Map的哪個子類,鍵name對應(yīng)的值都是Billy,即最后一個name的鍵值對,它覆蓋了之前的name鍵值對。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
JAVA入門教學(xué)之快速搭建基本的springboot(從spring boot到spring cloud)
本文主要入門者介紹怎么搭建一個基礎(chǔ)的springboot環(huán)境,本文通過圖文并茂的形式給大家介紹從spring boot到spring cloud的完美搭建過程,適用java入門教學(xué),需要的朋友可以參考下2021-02-02
org.springframework.web.client.ResourceAccessException資源訪問錯誤
本文主要介紹了org.springframework.web.client.ResourceAccessException資源訪問錯誤的解決方法,首先需要分析異常的詳細(xì)信息,以確定具體的錯誤原因,感興趣的可以了解一下2024-05-05
Spring Boot集成Mybatis中如何顯示日志的實(shí)現(xiàn)
這篇文章主要介紹了Spring Boot集成Mybatis中如何顯示日志的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
java編程創(chuàng)建型設(shè)計模式單例模式的七種示例
這篇文章主要為大家介紹了java編程中創(chuàng)建型設(shè)計模式之單例模式的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2022-02-02
SpringBoot使用jasypt加解密密碼的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot使用jasypt加解密密碼的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10
吊打Java面試官之Lambda表達(dá)式 Stream API
這篇文章主要介紹了吊打Java之jdk8的新特性包括Lambda表達(dá)式、函數(shù)式接口、Stream API全面刨析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-09-09
Java線程池ThreadPoolExecutor原理及使用實(shí)例
這篇文章主要介紹了Java線程池ThreadPoolExecutor原理及使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05

