Что такое LinkedHashMap <k, v>? - PullRequest
13 голосов
/ 26 мая 2011

Хорошо, так что я новичок в этих HashMaps, но имею некоторое представление о LinkedLists и HashMaps. Было бы здорово, если бы вы могли дать мне простое объяснение относительно LinkedHashMap, и, как в названии, означает ли это, что мы явно определяем его как некоторый тип?

Ответы [ 6 ]

31 голосов
/ 26 мая 2011

LinkedHashMap представляет собой комбинацию хеш-таблицы и связанного списка.Он имеет предсказуемый порядок итераций (в виде связанного списка), но скорость извлечения равна скорости HashMap.Порядок итерации определяется порядком вставки, поэтому вы получите ключи / значения в том порядке, в котором они были добавлены на эту карту.Здесь нужно быть немного осторожнее, поскольку повторная вставка ключа не меняет первоначальный порядок.

k означает Key, а v - Value.

/*
  Simple Java LinkedHashMap example
  This simple Java Example shows how to use Java LinkedHashMap.
  It also describes how to add something to LinkedHashMap and how to
  retrieve the value added from LinkedHashMap.
*/

import java.util.LinkedHashMap;

public class JavaLinkedHashMapExample {

public static void main(String[] args) {

//create object of LinkedHashMap
LinkedHashMap lHashMap = new LinkedHashMap();

/*
  Add key value pair to LinkedHashMap using
  Object put(Object key, Object value) method of Java LinkedHashMap class,
  where key and value both are objects
  put method returns Object which is either the value previously tied
  to the key or null if no value mapped to the key.
  */

lHashMap.put("One", new Integer(1));
lHashMap.put("Two", new Integer(2));

/*
  Please note that put method accepts Objects. Java Primitive values CAN NOT
  be added directly to LinkedHashMap. It must be converted to corrosponding
  wrapper class first.
  */

//retrieve value using Object get(Object key) method of Java LinkedHashMap class
Object obj = lHashMap.get("One");
System.out.println(obj);

/*
  Please note that the return type of get method is an Object. The value must
  be casted to the original class.
  */


}
}
/*
Output of the program would be
1
*/
11 голосов
/ 26 мая 2011

Это гибрид двух структур данных, a LinkedList, где порядок вставки сохраняется путем добавления элементов в конец списка узлов, которые имеют доступ к их непосредственным соседям, и HashMap, или Map, который использует массив сегментов Lists, где остаток от деления модуля hashcode() определяет начальный интервал для запроса метода equals() ключей, которые содержатся в списке содержимого этого сегмента.

Преимущество состоит в том, что вы можете обходить существующие элементы в порядке HashMap в порядке вставки благодаря природе LinkedList, и вы можете быстро переходить к нужному сегменту в поиске ключа (экономя много временидля большой коллекции), если у вас есть ключ элемента.

2 голосов
/ 26 мая 2011

Ключи LinkedHashMap похожи на ArrayLists или массивы в том, как они хранятся в порядке их вставки. Обычные хэш-карты сортируются по их хэш-коду.

k = ключ v = значение Они могут быть любого типа.

2 голосов
/ 26 мая 2011

Это называется дженерики. k и v должны быть заменены фактическим типом, который вы хотите сохранить. Чтобы создать HashMap, который отображает целые числа в строках, вы должны написать:

 LinkedHashMap<Integer,String>
1 голос
/ 26 мая 2011

Читать о Обобщения в Java в Википедии.

1 голос
/ 26 мая 2011

Самая большая разница в том, что LinkedHashMap заказан. Если вы используете итератор, ключи и значения будут в том же порядке, в котором они были добавлены на карту. HashMap не гарантирует порядок их возврата.

...