如何比较HashMap和Arraylist以查找类似的值

时间:2017-04-08 19:12:10

标签: java arraylist hashmap

我使用此algorithm 来比较两组值:HashMap<Integer,ArrayList<Integer>>和另一组ArrayList<Integer>。该程序的目标是将HashMap中的每个值与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]
  4. 结果:

    1. 4
    2. 3
    3. 2
    4. 我的计划

      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 :(得分:1)

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

    }

答案 1 :(得分:0)

我相信你试图依赖对象的插入顺序进入HashMap这是不明智的,因为订单不会被保留。相反,请尝试将hmm的类型从HashMap更改为LinkedHashMap,看看是否能解决您的问题。

编辑:此外,您可能应该将k初始化为0而不是1。