2017-04-08 12 views
-3

このalgorithmを使用して、2つの値のセット:HashMap<Integer,ArrayList<Integer>>ともう1つのArrayList<Integer>を比較しています。このプログラムの目的は、HashMapの各値をArrayListの値と比較し、同様の値の新しいHashMapを返します。これまでのところ、私のプログラムは正常に動作しますが、結果はfalseです。 ArrayListの例HashMapと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にkを初期化する必要がありますあなたの質問は何ですか? –

+0

プログラムはnewhashmapで間違った結果を出します –

+0

私はそれが何を意味するのかよく分かりません。 –

答えて

0

私はあなたがattemptiしていると考えています注文が保存されていないので、賢明ではないHashMapへのオブジェクトの挿入順序に依存する必要があります。代わりに、hmmのタイプをHashMapからLinkedHashMapに変更し、問題が解決するかどうか確認してください。

編集:また、あなたはおそらく代わりに1

+0

@FzKaddourそれが動作するかどうか教えてください! –

+0

喜んでOK –

+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++; 

    } 
関連する問題