Каков наилучший способ хранить некоторые данные в Java?(Array vs ArrayList) - PullRequest
2 голосов
/ 01 июля 2011

Итак, в настоящее время я извлекаю два разных атрибута из XML-файла в java, которые (для моего проекта) связаны друг с другом, и просто выводю их на консоль. Тем не менее, я хочу иметь возможность хранить их таким образом, чтобы ссылка на одно значение получала соответствующий ему аналог. Например:

Id: rId11 & Target: image3
Id: rId10 & Target: image2
Id: rId9 & Target: image1

С этими 3 значениями я бы хотел сохранить каждую строку, но когда я ссылаюсь на "rId", я могу получить соответствующее ему значение "Target". Я думал об использовании массива или arrayList, но я не совсем уверен, что будет лучше для моих целей или как именно я буду ссылаться только на одно значение и получать другое. Кто-нибудь может дать мне совет? Заранее спасибо.

Ответы [ 8 ]

4 голосов
/ 01 июля 2011

Если ваши ключи уникальны, используйте Map.

Map<String, String> mak = new HashMap<String, String>();
map.put("rId11","image3");
map.put("rId10","image2");
map.put("rId9","image1");

Ссылка:

В противном случае создайте пользовательский объект, содержащий ключ и значение, и создайте List (или Set ???) из них.

public class Entry {
    private final String id;
    private final String value;
    public Entry(String id, String value) {
        this.id = id; this.value = value;
    }
    public String getId() { return id; }
    public String getValue() { return value; }
    // also implement equals() and hashCode(), please
}

List<Entry> entries = new ArrayList<Entry>();
entries.add(new Entry("rId11","image3"));

Ссылка:

2 голосов
/ 01 июля 2011

Если я правильно понимаю, вы хотите иметь возможность искать что-то вроде «rId10» и получать значение «image2» (и только это).

Если это так, я думаю, что лучшим (с точки зрения скорости) и самым простым решением будет хеш-таблица (java.util.Hashtable) - будьте осторожны и с использованием Java Generics (после Java 1.5). Проверьте http://en.wikipedia.org/wiki/Hash_table также.

2 голосов
/ 01 июля 2011

Я думаю, что java.util.HashMap лучше подходит для этого требования, особенно если сортировка не требуется.

// not sure what types these are but this would work better
Map<String, String> m = new HashMap<String, String>();
m.put("rId11", "image3");
String other = m.get("rId11");
2 голосов
/ 01 июля 2011

Вы немного двусмысленны в том, что хотите.Если вы хотите найти значение, основанное на данном ключе, сохраните пары в HashMap (быстрее) или Hashtable (медленнее, но поточно-ориентированно).

Примитивные массивы (и более сложные List * коллекции на основе 1008 *, такие как ArrayList или Vector ) не работают с парами имя-значениеиз коробки.Они просто, ну ... списки.Примитивные массивы могут предложить немного больше производительности, поскольку вы избегаете создания объектов, но более сложные коллекции типа List могут быть более безопасными и более гибкими.

Тем не менее, звучит (?), Как будто вы хотите Карта тип коллекции, а не Список тип один.

ОБНОВЛЕНИЕ Кстати, если вы используете карту, вы все равно можете работать со списком всех ваших значений «rId».На самом деле это будет Set тип данных, но это просто специальный двоюродный брат List, который не допускает дублирование:

Map<String, String> myMap = new HashMap<String, String>();
myMap.put("rId11","image3");
// ... additional put's for the other values

Set<String> myRids = myMap.keySet();
for(String rId : myRids) {
   // do whatever you want with each rId one-by-one, etc
   // You could also use "myRids.iterator()" to work with an Iterator instead
}
2 голосов
/ 01 июля 2011

Используйте Map , с Id и ключом, а Target в качестве значения.Обратите внимание, что Map является интерфейсом и поэтому определяет только поведение.Вам нужно будет выбрать конкретную реализацию, например, HashMap.

1 голос
/ 01 июля 2011

ArrayList полезен, если вам нужно динамически добавлять элементы

1 голос
/ 01 июля 2011
public class Item {
    private String id;
    private String target;

    public Item(String id, String target) {
        this.id = id;
        this.target = target;
    }

    public String getId() {
        return this.id;
    }

    public String getTarget() {
        return this.target;
    }
}

 List<Item> items = new ArrayList<Item>();
 // or
 Map<String, Item> itemsIndexedById = new HashMap<String, Item>();
 // depending on your use-case

Прочтите учебник по Java о коллекциях .

1 голос
/ 01 июля 2011

Если «ключи» к вашим целевым значениям будут уникальными и когда-либо будет отображаться только одна цель, то я бы рекомендовал вместо этого использовать java.util.HashMapВы можете получить любое целевое значение, передав ключ.Кроме того, вы можете перебирать HashMap, как ArrayList.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...