LinkedHashMap или два отдельных массива в Java

У меня есть два массива предопределенной длины, скажем, 8, который содержит связанные данные. Я могу расположить их таким образом, чтобы массив1[0] соответствовал отображению в массиве2[0]. То есть пары ключ-значение имеют одинаковый индекс в обоих массивах. В таком случае для итерации массива я могу использовать цикл for, как показано ниже

for(int i=0;i<array1.length;i++){
  int array1Val = array1[i];
  String array2Val = array2[i];
    //some code
 }  

Это подход гуд? Или лучше использовать вместо этого связанный hashmap и использовать цикл

 map.entrySet()

Мудрость сложности и эффективности, который является лучшим подходом?

2 ответа

Практическое правило. Когда вы рассматриваете возможность создания соответствующих массивов, самое время создать класс для этих соответствующих данных и создать массив этого класса. Это самый понятный, самый читаемый, объектно-ориентированный способ хранения ваших соответствующих данных в объектах на Java. (Это не должно называться "Данные".)

class Data {
   private int value1;
   private String value2;
   // Any other arrays?  Make another value here.
   // Constructor, getters, setters
}

Затем объявите массив этого класса и сохраните в нем объекты.

Data[] mydata = new Data[length];
for (int i = 0; i < length; i++) {
   mydata[i] = new Data();  // and you can then initialize the Data object too.
}

Тогда один for цикл может получить доступ к каждому Data объект.

for (int i = 0; i < length; i++) {
   Data data = mydata[i];
   // Extract values here.
}

(Или вы также можете использовать расширенный цикл "foreach".)

for (Data data : mydata) {
   // Extract values here.
}

Используйте карту.

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

так что его только о (п)

чтение из карты - o(1), чтение из массива также o (1)

так что на самом деле нет разницы в производительности.

Но с точки зрения удобочитаемости и удобства обслуживания лучше иметь единую структуру данных "карта", чем две структуры данных массива, которые нужно использовать / использовать "особым образом" (в этом случае вам нужно помнить, что массив array1[0] отображает to array2[0]. Это делает код менее читаемым и более сложным, чем это должно быть.

Держите ваш код чистым, легким для чтения и простым, используйте карту:

Вот способы прохождения по карте в Java:

for (Map.Entry<String, Object> entry : map.entrySet()) {
    String key = entry.getKey();
    Object value = entry.getValue();
    // ...
}

for (Object value : map.values()) {
    // ...
}

[ОБНОВИТЬ]

В ответ на людей, которые предлагают "эй создать класс"...

Пожалуйста, спросите себя "кому нужно использовать эти данные"?

Если данные относятся только к внутреннему методу, я предлагаю использовать анонимный класс, как здесь:

public void myMethod(String param1, String param2) {
    class MyAnonymousClass {
        String data1;
        String data2;
    }
    MyAnonymousClass anonymous = new MyAnonymousClass();
    anonymous.data1 = param1;
    anonymous.data2 = param2;
}

Если данные относятся только к внутренним элементам другого класса, то создайте закрытый статический внутренний класс.

 pubic class SomeClass {
    private static class MyDataContainer {

    }
 }

Просто будьте в курсе этих вариантов при создании классов.

Ура!

Другие вопросы по тегам