2013-07-16 112 views
-1

我有兩個由字符串組成的並行java數組。在第一個我有一些重複值在第二個數組中有多個匹配。我試圖收集重複的值並將它們存儲在一組字符串中,我也想收集一組字符串中的匹配值。什麼我想要做的例子是這樣的:比較Java數組

apple  1 
orange  2 
apple  3 
orange  4 
nuts   5 

我想他們是這樣的:

[apple] [1,3] 
[orange] [2,4] 
[nuts] [5] 

任何想法,我該怎麼辦呢?

+6

java.util.Map是你的朋友。 –

+1

@kocko - 更具體地說'Map >'(或者使用'Set'而不是'List'來除掉dups)。 – tjameson

+0

作爲一個便箋,向我們展示您所做的一切總是一個好主意。一般來說,圍繞您的代碼獲取答案將有助於您更好地理解解決方案。 –

回答

2

您應該改用Map<String, List<Integer>>。只需迭代兩個數組,然後將值作爲鍵值對添加。

在每次添加之前,使用Map#containsKey(Object)方法檢查密鑰是否已經存在。如果已經存在,則使用Map#get(Object)方法獲取與該密鑰對應的List,然後使用List#add(E)方法在列表中添加新元素。

0

使用Map<String,List<Integer>>,遍歷int[]並從索引中獲取String[]數組的值並繼續填充Map

Map的鍵應該是String[]中的值,值將是List<Integer>。檢查Map中是否存在密鑰,如果存在,則將該整數值添加到List<Integer>或者創建一個條目,並將該String作爲關鍵字,並創建一個包含該整數值的新List。

SSCCE是:

String[] keys = {"apple","orange","apple","orange","nuts"}; 
int[] values = {1,2,3,4,5}; 
Map<String, List<Integer>> map = new HashMap<String,List<Integer>>(); 
for(int i=0;i<values.length;i++) { 
    int value = values[i]; 
    String key = keys[i]; 
    if(map.containsKey(key)){ 
     map.get(key).add(value); 
    } 
    else { 
     List<Integer> list = new ArrayList<>(); 
     list.add(value); 
     map.put(key, list); 
    } 
} 
0

以下是你需要(在僞代碼)的邏輯:

map := new Map<String, Set<Integer>> 
for each i in array do 
    key := array[i][0] 
    value := array[i][1] 
    if map not contains key then 
     map.add(key, new Set<Integer>) 
    endif 
    map.get(key).add(value) 
endfor