2016-11-21 2 views
0

У меня возникли трудности при сортировке массива ArrayList из ChainHashMaps. Каждая HashMap, содержащая только ArrayList, имеет только одну запись, содержащую String и Integer. Итак, чтобы отсортировать это, я создал отдельный метод, в котором я беру все значения массивов ArrayList и сортирую их. Этот метод, который я создал, работает отлично. Часть, с которой у меня возникают проблемы, возвращает ее вместе и создает массив ArrayList из ChainHashMaps (с String и Integer), который сортируется. Вот метод, который я до сих пор:Сортировка массива списка ChainHashMap

public static ArrayList<ChainHashMap<String, Integer>> sortWords(ArrayList<Integer> values, ArrayList<ChainHashMap<String, Integer>> a){ 
    ArrayList<ChainHashMap<String, Integer>> outcome = new ArrayList<ChainHashMap<String, Integer>>(); 
    for (int i = 0; i < values.size(); i++){ 
     for (int j = 0; j < a.size(); j++){ 
      for (Object k : a.get(j).keySet()){ 
       String word = (String) k; 
       if (values.get(i).equals(a.get(j).get(word))){ 
        ChainHashMap<String, Integer> oneEntry = new ChainHashMap<String, Integer>(); 
        oneEntry.put(word, a.get(j).get(word)); 
        outcome.add(oneEntry); 
       } 
      } 
     } 
    } 
    return outcome; 
} 

Этот метод принимает ArrayList из Целые (это ArrayList, что я сортируется отдельно только значения целого числа ChainHashMaps) и ArrayList из ChainHashMaps (String и Integer. Это оригинальный ArrayList, который нужно сортировать). Он возвращает ArrayList этих ChainHashMaps, которые сортируются.

Когда я запускаю это, он каким-то образом заканчивается, не заканчивая затмением. Это для домашней работы, поэтому я не хочу использовать встроенные java-методы для ее решения. Любая помощь по этому вопросу будет принята с благодарностью.

+0

что ChainHashMap и где я могу его найти? –

ответ

0

Если я тестирую его с HashMap, похоже, что он работает, я не вижу, что не так, кроме некоторых проблем с производительностью, и того факта, что я понятия не имею, что такое ChainHashMap.

Пример.с 1,2,3,4

вход для сортировки: [{first=1}, {fourth=4}, {third=3}, {second=2}]

вход сортируется целых чисел: [1, 2, 3, 4]

выход (правильный): [{first=1}, {second=2}, {third=3}, {fourth=4}]

Производительность

Метод сортировки не очень оптимизированный для скорости и удобочитаемости, он делает гораздо больше итераций, чем это необходимо. Некоторые быстрые выигрыши:

  • если вы нашли результат во внутреннем J-петли, вырваться из него с break;
  • , так как ваша карта имеет только один вход, вы не нуждаетесь в for (Object k : a.get(j).keySet())

HashMap код с блоком тестирования

код с HashMap и испытания (без утверждения) выглядит следующим образом:

@Test 
public void testMap(){ 

    List<Map<String, Integer>> toBeSorted = Arrays.asList(new HashMap(){{ put("first", 1); }}, new HashMap(){{ put("fourth", 4); }}, new HashMap(){{ put("third", 3); }}, new HashMap(){{ put("second", 2); }}); 
    List<Integer> sortedList = Arrays.asList(1,2,3,4); 

    ArrayList<Map<String, Integer>> maps = sortWords(sortedList, toBeSorted); 

    System.out.print(maps); 
} 

public ArrayList<Map<String, Integer>> sortWords(List<Integer> values, List<Map<String, Integer>> a){ 
    ArrayList<Map<String, Integer>> outcome = new ArrayList<Map<String, Integer>>(); 
    for (int i = 0; i < values.size(); i++){ 
     for (int j = 0; j < a.size(); j++){ 
      for (Object k : a.get(j).keySet()){ 
       String word = (String) k; 
       if (values.get(i).equals(a.get(j).get(word))){ 
        Map<String, Integer> oneEntry = new HashMap<String, Integer>(); 
        oneEntry.put(word, a.get(j).get(word)); 
        outcome.add(oneEntry); 
       } 
      } 
     } 
    } 
    return outcome; 
} 

Выход правильно:

[{first=1}, {second=2}, {third=3}, {fourth=4}] 

 Смежные вопросы

  • Нет связанных вопросов^_^