2013-07-16 113 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