Map中使用陣列作為key的用法
這個是今天我的個人經歷,作為經驗教訓,鄙視自己一下。
先說下問題,在網上查了下,我用的是ConCurrentMap介面來作為引用,建立的ConCurrentHashMap做鍵值對的處理,這個不是主要的,主要的是Map中使用的陣列Key。
通過一下一段程式碼來說明一下我的問題所在吧:
package com.test; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class TestMap { /** * @param args */ public static void main(String[] args) { ConcurrentMap<String[], String> map = new ConcurrentHashMap<String[], String>(); String[] str1 = {"1", "001"}; String[] str2 = {"2", "002"}; map.put(str1, "1001"); map.put(str2, "2002"); String[] str3 = {"1", "001"}; System.out.println(map.get(str3)); } }
以Map為說明,我在map中put了兩個值,泛型中分別是以String陣列為key,String為value。
分別是以str1和str2作為引用,然後我在get的時候,想通過同樣的key陣列來呼叫str1的值,但是始終是null。
基礎不紮實的我搞這個竟然搞了一天,真是慚愧。
最終經人提醒,才發現了Map在進行put的時候,如果key作為以陣列或其他非字串為鍵的時候,
java內部是視為其Object型別的,因此put到記憶體中的時候,它存在於一個具體的地址。
用debug來除錯的話,顯示為如下內容:
{[Ljava.lang.String;@1006d75=1001, [Ljava.lang.String;@1125127=2002}
因此當指定一個相同的字串陣列的時候,也不會找到上述對應的value,因為你給予的str3,在記憶體中的地址根本就是不存在的。
具體解決的辦法,可以通過map的keySet方法,並獲得你的iterator方法,在遍歷迴圈中找到你的資訊,即你傳遞的兩個陣列來判斷匹配是否等於之前put進去的值,最終來取到這個值。
不知道本人有沒有敘述明白,如有問題,請高手看到給你糾正,謝謝。
相關推薦
Map中使用陣列作為key的用法
這個是今天我的個人經歷,作為經驗教訓,鄙視自己一下。 先說下問題,在網上查了下,我用的是ConCurrentMap介面來作為引用,建立的ConCurrentHashMap做鍵值對的處理,這個不是主要的,主要的是Map中使用的陣列Key。 通過一下一段程式碼來說明一下我的問題
Java中map中值按照key鍵和value值分別排序
參考:https://www.cnblogs.com/zhujiabin/p/6164826.html 1. 按照key排序,可以藉助有序集合TreeMap實現,如下: @Test public void sortByMapKey() { Map<String,Str
std::map中erase的正確用法
STL的map表裡有一個erase方法用來從一個map中刪除掉指令的節點eg:map<string,string> mapTest;typedef map<string,string>::iterator ITER;ITER iter=mapTest.f
Map中,屬性entryset用法
因為在 前一篇 ImageLoader 需要使用到 Auth token 來下載某個使用者的檔案的縮圖,所以需要透過 image loader 的 getExtraForDownloader 傳進 extra, extra 是一個 object, 傳進去前是一個dictionary (map 或 entry
java 獲取map中所有的key值
java.util.Iterator it = map.entrySet().iterator(); while(it.hasNext()){ java.util.Map.Entry entry = (java.util.Map.Entry)it.next(); entry.getKe
C++中陣列作為形參時,實際傳的是指標
傳陣列時,實際上是建立了臨時的指標變數,指向傳進去的那個陣列。在函式中改變形引數組(臨時指標變數)的指向是可以的,只不過這樣做不會改變原來的陣列 //例子說明陣列做形參時,實際上是用一個臨時指標變數做形參,指向傳進去的陣列首地址。實際的陣列是常指標,不能改變它的值。 #i
shell指令碼中 陣列的基本用法
在shell指令碼中,陣列 也是一種常用的資料結構,這篇文章簡單 說一下 陣列的基本用法. 1 陣列的宣告 這樣就可以 宣告 arr ,和 iplist 的陣列 #陣列的宣告 # 用 declare -a variable 語句來清楚地指定一個數組 # 宣告一個數組
react native中陣列和key值
Warning:Each child in an array or iterator should have a unique “key” prop. 解決方法:在陣列名.map等迴圈子項中新增key屬性 array.map((value, index) => {
詳談C++中陣列作為函式引數
一、一個例子引發的思考 執行以下程式碼,請問輸出是什麼?例子來源於《劍指Offer》,我對書上例子做了修改,讓其可以執行。 #include<iostream> using namespace std; int GetSize(int da
php-file_get_contents取檔案中陣列元素的用法
用file_get_contents()抓取了 這個網址上的內容http://simonfenci.sinaapp.com/index.php?key=simon&wd=1314abc看似好像反回的是陣列。。但是我不管怎麼用foreach迴圈都報錯。。我只想把陣列中
PHP Study第七章 -----PHP中陣列的常見用法
<?php /*7:陣列的型別 * 7.1略過了,反正是建立陣列 */ /*7.3 陣列的型別 * 7.3.1 陣列索引型別 * 預設索引值是數字,從0開始 */ /*7.3.2 關聯陣列 鍵名是數字和字串的混合 */ $newarray = arr
C++中陣列作為函式引數或返回值
C++中陣列作為函式引數或者返回值 概述 在程式設計任務中,經常會遇到將陣列作為函式引數或者返回值,比如在前一篇的計數排序任務中,需要額外的空間來儲存排序後的元素,並且將該陣列返回給主函式。本文會介紹幾種可行的方案,僅供參考。 陣
根據value取得map中對應的key
hashmap中key值是唯一的,但value是不唯一的,所以是沒有辦法通過像get(key)取value值一樣,直接取key的 值。 所以當map中沒有重複值時,根據value取得key是唯一的,但是要自己寫一個方法來讀取。 當有重複值時,取得第一個匹配的值,由於是
JAVA方法中陣列作為形參,傳的是引用
之前一直以為傳陣列和基本型別都是傳的值,今天做題時發現傳陣列傳的其實是引用。 public class Tests { public static void main(String[]
JS中陣列Array的用法
原文地址:http://www.blogjava.net/zks518/archive/2011/06/24/352948.html js陣列元素的新增和刪除一直比較迷惑,今天終於找到詳細說明的資料了,先給個我測試的程式碼^-^var arr = new Array();arr[0] = "aaa";arr
【基礎】結構體重載,用 char*作為std::map中的key
重載 http 註意 urn .net 參考 article 添加 無法 結構體重載 C++中,結構體是無法進行==,>,<,>=,<=,!=這些操作的,這也帶來了很多不方便的地方,尤其是在使用STL容器的時候,如果我們可以往語句中傳入結構體,一些
用 char*作為std::map中的key
宣告map時需要新增一個cmp比較函式,不然map在比較時,使用char *的指標進行比較,而不是比較char字串。 #include <cstring> struct cmp_str { bool operator()(char const *a, char
map中使用自定義類指標作為key
//先上程式碼 #pragma once //想用類作為key,必須過載<運算子 或者提供 //想用指標作為key,也是可以的,不過要自己提供仿函式 class CBase { public: explicit CBase(int a); ~CBase(void); private:
C++中 使用陣列作為map容器VAlue值的解決方法
1)是用Vector容器代替陣列 2)使用陣列指標(需要注意區域性變數的問題,指標是否需要用new建立) int red [ 3 ] = { 1 , 0 , 0 }; int green [
Java 在 Map 中使用複雜資料型別作為 Key
HashMap是一種用雜湊值來儲存和查詢鍵值對(key-value pair,也稱作entry)的一種資料結構。為了正確使用HashMap,選擇恰當的Key是非常重要的。Key在HashMap裡是不可重複的。1、什麼是可變物件可變物件是指建立後自身狀態能改變的物件。換句話說,