2012-02-15 3 views
2

Так что это очень простой вопрос. Я читал, хотя класс написан коллегой, и я только делал Java около шести месяцев, и я кулачок через:Java - Карты и Хэш-карты

private Map<Dimension, Object> data = new HashMap<Dimension, Object>(); 

Конечно, я консультировался в Интернете, но это на самом деле не дать объяснение, которое я может понять слишком хорошо. Поэтому мне интересно, может ли кто-нибудь объяснить, что делает этот код и что делает Карты вообще? Что такое Карта или HashMap (и почему, когда объявлена ​​Карта, они создают HashMap?). Также, что используются Карты и что делает их лучше, чем ArrayList?

+2

Вы нашли JavaDoc для Map и HashMap? И учебник по сборникам Java? http://docs.oracle.com/javase/tutorial/collections/ –

+0

Да, но все же я чувствовал, что это не так (для меня) достаточно четко ответить на вышеуказанные вопросы. – mino

+0

Вы должны указать * what *, тогда не ясно, иначе вы снова получите такую ​​же информацию. Например, карты и списки очень разные, и в учебнике объясняются их по-разному. –

ответ

3

От Oracle's Map Interface tutorial:

Карта - это объект, который сопоставляет ключи значениям. Карта не может содержать повторяющиеся ключи: каждый ключ может отображать не более одного значения. Он моделирует абстракцию математической функции.

Так содержимое карты в вашем коде может быть:

DimensionX => x-dimension stuff 
DimensionY => y-dimension stuff 
DimensionZ => z-dimension stuff 

Как разница между картами и массивам: пар

Карты магазин ключ/значение и обеспечивают аксессорах, например на значение, заданное ключом.

Map<Dimension, Object> myDimensionMap = new HashMap<Dimension, Object>(); 
Dimension dimensionXKey = new Dimension("X"); 
Object dimensionXValue = myDimensionMap[dimensionXKey]; 

ArrayList (и списки в целом) обеспечивают упорядоченное хранение значений.

List<String> myTokenList = Arrays.asList(new String[]{"first", "second", "third"}); 
String firstToken = myTokenList.get(0); // "first" 

Карты отличные для кэшей, где вам нужно что-то посмотреть на основе ключа; обычно они не заказываются, но LinkedHashMap сохраняет порядок вставки, например, List.

Объявление карты в вашем примере кода довольно распространено и демонстрирует практику объявления переменных Collections в качестве типа интерфейса и значения как реализации этого интерфейса. Как указывали другие, интерфейс (например, Map) определяет методы, доступные для пользователей, тогда как реализация (например, HashMap) реализует логику для поддержки интерфейса.

Это считается хорошей практикой, поскольку позволяет изменять базовую реализацию (в данном случае) Карты без изменения кода, который ее использует.

5

Map - тип интерфейса. Он определяет, как должен себя вести класс. HashMap - это реализация. Это способ реализации поведения Map, но его можно реализовать любым количеством способов (хэш-таблица, двоичное дерево и т. Д.).

Имея это в виду, прочтите эти два документа

http://docs.oracle.com/javase/6/docs/api/java/util/Map.html

http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

ArrayList другой вид коллекции (она соответствует интерфейсу List). Он просто делает разные вещи (сохраняя список объектов, а не сопоставление). Документы совершенно ясны.

http://docs.oracle.com/javase/6/docs/api/java/util/List.html

+1

Эти документы не являются надлежащим учебником для новичка, хотя они? –

+0

На самом деле ... почему бы и нет? Язык совершенно ясен. В них не так много жаргона. – Joe

2

Карты используются для хранения отношений. То есть вы можете связать заданный ключ (и он может быть чем-то иным, чем числом, в отличие от ключей в массиве) со значением, а затем эффективно извлекать его.

Карта, используемая в объявлении, является интерфейсом для этого типа коллекции, она определяет только то, что любая данная Карта должна экспортировать своим пользователям, а HashMap - это реализация этого интерфейса карты, в котором используется таблица хэшей в качестве основы структура данных.

Возможно, вы создали, например, массив ArrayMap, который реализовал интерфейс Map, но использовал массив за ним, хотя структура данных (массив) не была бы очень эффективной для операций, описанных интерфейсом карты.

Предлагаю вам ознакомиться с документами для Map interface и HashMap implementation, а также на Hash Table concept on wikipedia.

1

Отличие от ArrayLists заключается в том, что Карты хранят key-> ассоциации значений, в то время как хранилище ArrayList является индексируемым.

Ваш коллега может присваивать HashMap переменной набранной карте, поскольку HashMap реализует интерфейс карты (http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html).

Причина, почему он может делать это неявно утверждают, что он только использует методы, объявленные в карте и делает не зависят от методов только реализованных HashMap

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