2017-02-01 17 views
0

У меня есть карта Map<String,String> и записи похожие на map.put("c_09.01--x28", "OTH"). В этом я использую разделить ключ и использовать x28, чтобы изменить его на OTH. Поэтому мой вопрос заключается в том, следует ли использовать операцию разделения или использовать карту в пределах карты и map.put("c_09.01", newMap), где newMap будет иметь map.put("x28", 'OTH'). Какой из них даст мне лучшую производительность? образец кода, где я использовал то, что я использовал, то естьКарта в пределах карты vs разделяет ключ типа String, который будет работать быстрее?

for (Entry<String,String> sheetEntry : this.getSheetCD().getUserDefinedSheetCodeMap().entrySet()) { 
    String Key = sheet.getKey().split("--")[1]; 
    int sheetIndex = template.getSheetIndex(sheetKey); 
    if(sheetEntry.getKey().toUpperCase().startsWith(getFileName()){ 
     String newSheetName = sheetEntry.getValue(); 
     template.setSheetName(sheetIndex, newSheetName);  
     } 
} 

Пожалуйста, дайте мне знать, если потребуется дополнительная информация. С уважением.

+0

Почему бы вам не попробовать и сообщить нам результаты? – Alnitak

+0

используется в проекте, где я не могу запускать его отдельно. но это будет первое, что я верну на свое место. –

+0

Насколько велика будет карта? Потому что, если он никогда не будет слишком большим, вы не сможете отличить его. Но это простой тест. Но если вы прочитаете в своем посте, то узнаете стоимость каждого из них. Также, как часто вы будете выполнять розыгрыши? – efekctive

ответ

0

Вы должны использовать операцию разделения, потому что если вы используете операцию разделения, то в момент iteration объект с карты на этот раз вы можете использовать iterate значение с использованием одного forEach loop.

Пример кода

String str[] = "c_09.01--x28".split("--")[1]; 
     Map<String, String> map = new HashMap<>(); 
     map.put(str, "OTH"); 

     for(Map.Entry eMap:map.entrySet()){    //single forEach loop 
      System.out.println("Key : "+eMap.getKey()); 
      System.out.println("Value : "+eMap.getValue()); 
     } 

Выход

Key : x28 
Value : OTH 

Если вы используете map.put("c_09.01", newMap); это один, так что вам нужно iterate два раза. Как сначала вам нужно iteratenewMap с помощью клавиши c_09.01, чем снова вам нужно iterateOTH используя ключ x28.

Пример кода

String str[] = "c_09.01--x28".split("--"); 
     Map<String, String> map = new HashMap<>(); 
     map.put(str[1], "OTH"); 

     Map<String, Map> map1 = new HashMap<>(); 
     map1.put(str[0], map); 

     for(Map.Entry eMap : map1.entrySet()){   //First forEach Loop 
      System.out.println("Key : "+eMap.getKey()); //getiing key "c_09.01" 
      Map<String, String> map2 = (Map<String, String>) eMap.getValue(); //getting map and need to be cast because it return object type 
      for(Map.Entry eMap1 : map2.entrySet()){  // Second forEach loop 
       System.out.println("Key Using map.put(String, newMAp) : "+eMap1.getKey()); 
       System.out.println("ValueUsing map.put(String, newMAp) : "+eMap1.getValue()); 
      } 
     } 

Выход

Key : c_09.01 
Key Using map.put(String, newMAp) : x28 
ValueUsing map.put(String, newMAp) : OTH 

Так я думаю, вы должны использовать раздвоение операцию.