Статьи

Платформа коллекций Java для новичков

Я ни в коем случае не считаю себя экспертом по Java, но я заметил одну тревожную вещь. Есть много людей, которые утверждают, что являются «разработчиками Java», но они не имеют ни малейшего представления о том, что такое «инфраструктура коллекций Java». Этот пост предназначен для людей, которые все время зацикливаются на вопросах собеседования или мистифицируются, когда кто-то начинает говорить о разнице между множеством и списком (например).

Если вы воспользуетесь «фреймворком java collection для чайников», вы найдете эту ссылку, которая содержит более полное, хотя и довольно плотное объяснение. Я собираюсь сделать вас лучше и дать общее правило, которое вы можете использовать, не думая об этом.

В этом корень вещей, коллекция — это то, что вы можете хранить внутри. Как и в реальной жизни, коллекция мраморов — это просто «куча» мраморов. Большое различие в структуре коллекций состоит в том, что разные реализации имеют разные вещи, которые они делают с шариками, которые вам нужно понять.

Например, давайте рассмотрим ArrayList … каждый и их брат должны знать это … если нет, то вы не являетесь разработчиком Java, иди и прочитайте книгу. Некоторые особенности списка массивов: он хранит записи в порядке их добавления, вы можете выбрать элемент по его индексу, он может содержать дубликаты одного и того же элемента. С точки зрения производительности, ОЧЕНЬ быстро искать и добавлять вещи по индексу и добавлять вещи в ArrayList, в среднем, медленно, чтобы увидеть, присутствует ли конкретный объект, потому что вы должны перебрать элементы списка, чтобы увидеть, если это там.

Далее, давайте поговорим о HashSet … Я понимаю, что это может звучать неопределенно, как наркотик, связанный с непосвященными, но хэш-сет имеет некоторые интересные отличительные характеристики из списка. Во-первых, HashSet не имеет понятия порядка или индекса, вы можете добавлять к нему вещи, вы можете выполнять итерации по нему, но вы не можете искать вещи по индексу, и нет никаких гарантий того, какие вещи порядка будут вам представлены, когда он Зацикливание членов. Еще одна интересная особенность заключается в том, что он не может содержать дубликаты, если вы попытаетесь добавить один и тот же объект дважды, он НЕ потерпит неудачу, он просто вернет false и вы сможете спокойно двигаться дальше.

Наконец, что не менее важно, есть Hashtable (или его немного более опасный двоюродный брат, HashMap). Это используется для хранения пар ключ / значение. Вместо того, чтобы вводить вещи с помощью индекса (например, массива), вы можете вводить их практически любым способом. Вы можете сделать такие вещи, как myMap.put («foo», «bar»), а затем myMap.get («foo») вернет bar …

Существует много больше этого, но с этим кратким справочником вы можете по крайней мере начать делать полезные вещи в Java.

Примеры использования списка

ArrayList myList = new ArrayList();
myList.add("Second Thing");
myList.add("Second Thing");
myList.add("First Thing");

System.out.println(myList.get(0));

будет выводить

Second Thing

Интересно отметить, что размер этого составляет 3

System.out.println(myList.size());

будет выводить

3

Следующее:

for (String thing: myList) {
  System.out.println(thing);
}

всегда будет
выводить:

Second Thing
Second Thing
First Thing

Далее давайте посмотрим на набор:

HashSet mySet = new HashSet();
mySet.add("Second Thing");
mySet.add("Second Thing");
mySet.add("First Thing");

Первое отличие мы видим, что

System.out.println(mySet.size());

возвращается

2

Это имеет смысл, если вы понимаете, что наборы не могут содержать дубликаты (и вы понимаете, как работает метод equals в String …;) Другая интересная вещь заключается в следующем:

for (String thing: myList) {
  System.out.println(thing);
}

может выводить:

Second Thing
First Thing

или это может вывести:

First Thing
Second Thing

Бывает так, что он возвращает вторую версию на моем компьютере, но она действительно специфична для JVM / среды выполнения (это зависит от того, как реализован HashSet и как реализован хэш-код, а также от множества других переменных, которые я даже не до конца понимаю).

Что еще более важно, следующее будет, вероятно, намного быстрее для больших коллекций:

System.out.println(mySet.contains("Third Thing"));

Наконец, у дедушки все целые фреймворки, hashtable.

 Hashtable myMap = new Hashtable();
 myMap.put("a", "Second Thing");
 myMap.put("b", "Second Thing");
 myMap.put("c", "First Thing");

 System.out.println(myMap.get("a"));

Будет выходной

Second Thing

и следующее:

for (Map.Entry entry: myMap.entrySet()) {
    System.out.println(entry.getKey() + "=" + entry.getValue());
}

будет выводить

b=Second Thing
a=Second Thing
c=First Thing

Надеемся, что с этими примерами вы сможете получить представление о возможностях инфраструктуры коллекций. Это намного больше, и я призываю ЛЮБОГО, занимающегося разработкой java, тратить время на игры и изучение различных характеристик различных
компонентов, поскольку я лишь слегка скользил по поверхности.

 

От http://mikemainguy.blogspot.com/2011/12/java-collections-framework-for-newbies.html