2017-04-08 37 views
-3

我使用此algorithm来比较两组值:a HashMap<Integer,ArrayList<Integer>>和另一个ArrayList<Integer>。该程序的目标是将HashMap中的每个值与ArrayList中的值进行比较,并返回一个新的类似值的HashMap。到目前为止,我的程序运行正常,但它返回错误的结果。如何比较HashMap和Arraylist以找到相似的值

ArrayList的实施例

[1.0.1.0.0]

HashMap的实施例

  1. [1.0.1.1.0]
  2. [0.1.1.0.0]
  3. [0.1.1.1.0]

结果:

我的计划

int k = 1; 
List<Integer> listOperateur = new ArrayList<Integer>(); 
HashMap<Integer, Integer> sim = new HashMap<Integer, Integer>(); 

for (Map.Entry<Integer, ArrayList<Integer>> e : hmm.entrySet()) { 
    count = 0; 

    for (Integer mapValue : e.getValue()) { 
     if (mapValue.equals(listOperateur.get(k))) { 
      count++; 
     } 
    } 

    sim.put(e.getKey(), count); 
    k++; 

} 
+2

什么是你的问题? –

+0

该程序在newhashmap中给出了错误的结果 –

+0

我不太明白这是什么意思。 –

回答

0

我相信你是attempti ng不依赖于对象的插入顺序到HashMap这不明智,因为顺序不被保留。相反,请尝试将hmm的类型从HashMap更改为LinkedHashMap,然后查看是否可以解决您的问题。

编辑:此外,你应该初始化k为0而不是1

+0

@FzKaddour让我知道它是否有效! –

+0

好的很愉快 –

+0

它给了我相同的结果 –

0
System.out.println("HASHMAP RESULT:"); 
    LinkedHashMap<Integer, ArrayList<Integer>> hmm = new LinkedHashMap<>(); 
    for (Entry<Integer, List<String>> ee : hm.entrySet()) { 
     Integer key = ee.getKey(); 

     List<String> values = ee.getValue(); 
     List<Integer> list5 = new ArrayList<>(); 
     for (String temp : global) { 

      list5.add(values.contains(temp) ? 1 : 0); 

     } 
     hmm.put(key, (ArrayList<Integer>) list5); 

    } 

    //nouvelle list operateur 
    List<Integer> list6 = new ArrayList<Integer>(); 
    System.out.println("liste operateur"); 
    List<Integer> listOperateur = new ArrayList<Integer>(); 
    listOperateur.add(1); 
    listOperateur.add(0); 
    listOperateur.add(0); 
    listOperateur.add(0); 
    Iterator iter = listOperateur.iterator(); 
    while (iter.hasNext()) { 
     System.out.println(iter.next()); 
    } 
    //calcule similarité 

    System.out.println("HASHMAP SIMILIRATE RESULT:"); 
    HashMap<Integer, Integer> sim = new HashMap<Integer, Integer>(); 

    int count; 
    int k = 0; 


    for (Map.Entry<Integer, ArrayList<Integer>> e : hmm.entrySet()) { 
     //if (e.getValue() != null) { 
     count = 0; 
     //you can move this part to another method to avoid deep nested code 
     for (Integer mapValue : e.getValue()) { 

      if (mapValue.equals(listOperateur.get(k))) { 
       count++; 

      } 
     } 
     sim.put(e.getKey(), count); 
     k++; 

    }