2016-07-02 9 views
0

В настоящее время я столкнулся с проблемой с моим кодомКак хранить ArrayList <HashMap <String, String >> с одним Hashmap и множественными Список_массивами

Я пытаюсь поставить в ArrayList> значения а HashMap, который получает значения из другого ArrayList

Вот код:

ArrayList<HashMap<String, String>> AL_route_bus_collection_a = new ArrayList<HashMap<String,String>>(); 

HashMap<String,String> HM_route_bus_collection_a = new HashMap<String, String>(); 


for(int i = 0;i<routeNo_set.size();i++) { 

    HM_route_bus_collection_a.put("route_no", routeNo_set.get(i)); 
    HM_route_bus_collection_a.put("address", address_set.get(i)); 
    HM_route_bus_collection_a.put("bus_type", busType_set.get(i)); 

    AL_route_bus_collection_a.add(HM_route_bus_collection_a); 
} 
for (HashMap<String, String> hashMap : AL_route_bus_collection_a) { 
    System.out.println(hashMap.keySet()); 
    for (String key : hashMap.keySet()) { 
     System.out.println(hashMap.get(key)); 
    } 
} 

, но я в конечном итоге получаю только значение routeNo_set (2), address_set (2), busType_set (2) в моей ArrayList Повторно 3 раза

output screenshot

любая помощь будет очень полезно Заранее спасибо

ответ

0

Ваша проблема исходят из того, что вы всегда используя ту же карту внутри вашего цикла, и вы храните его в три раза в ваш ArrayList ,

Вот почему вы получаете одинаковые результаты, потому что это одна и та же карта, а метод put() заменяет старое значение ключа, если предоставленный ключ уже существует на карте.

Вы должны создавать новую карту каждый раз, когда вы проходите через цикл.

Следующий код должен работать:

ArrayList<HashMap<String, String>> AL_route_bus_collection_a = new ArrayList<HashMap<String,String>>(); 

for(int i = 0;i<routeNo_set.size();i++) { 

    HashMap<String,String> HM_route_bus_collection_a = new HashMap<String, String>(); 
    HM_route_bus_collection_a.put("route_no", routeNo_set.get(i)); 
    HM_route_bus_collection_a.put("address", address_set.get(i)); 
    HM_route_bus_collection_a.put("bus_type", busType_set.get(i)); 

    AL_route_bus_collection_a.add(HM_route_bus_collection_a); 
} 
for (HashMap<String, String> hashMap : AL_route_bus_collection_a) { 
    System.out.println(hashMap.keySet()); 
    for (String key : hashMap.keySet()) { 
     System.out.println(hashMap.get(key)); 
    } 
} 
+0

большое спасибо, это установило его –

0

причина, почему вы получаете только одно значение, что Hashmap значения перезаписываются в цикле, поскольку повторяющиеся ключи не разрешены в HashMap Так вы всегда получите последние значения индекса в вашем хэшмапе.

Так что если вы хотите один ключ с разными значениями, вы можете использовать HashMap<String, ArrayList<String>>.

Предполагая, что вы хотите получить только одну пару ключевых значений, которую вы хотите добавить в свой аррайалист.

Вот пример, читайте о HashMap

public static void main (String[] args) throws java.lang.Exception 
    { 
     ArrayList<HashMap<String, String>> AL_route_bus_collection_a = new ArrayList<HashMap<String,String>>(); 

     HashMap<String,String> HM_route_bus_collection_a = new HashMap<String, String>(); 

     List<String> routeNo_set = new ArrayList<String>(); 
     routeNo_set.add("first"); 
     routeNo_set.add("second"); 
     routeNo_set.add("third"); 

     List<String> address_set = new ArrayList<String>(); 
     address_set.add("A"); 
     address_set.add("B"); 
     address_set.add("C"); 

     List<String> busType_set = new ArrayList<String>(); 
     busType_set.add("1"); 
     busType_set.add("2"); 
     busType_set.add("3"); 

     for(int i = 0;i<routeNo_set.size();i++) { 

      HM_route_bus_collection_a.put("route_no", routeNo_set.get(i)); 
      HM_route_bus_collection_a.put("address", address_set.get(i)); 
      HM_route_bus_collection_a.put("bus_type", busType_set.get(i)); 

      AL_route_bus_collection_a.add(HM_route_bus_collection_a); 

      HM_route_bus_collection_a = new HashMap<String, String>(); 
      } 
     for (HashMap<String, String> hashMap : AL_route_bus_collection_a) { 
      System.out.println(hashMap.keySet()); 
      for (String key : hashMap.keySet()) { 
       System.out.println(hashMap.get(key)); 
      } 
     } 
} 

Проверьте выходные here

+0

никогда не сгенерирует исключение очень плохая практика –

+0

@RahulRavindran Я просто дал вам пример кода. Вам нужно бросить точное исключение и обработать его в методе вызова. – Ravikumar

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