Типы карты
В Java основная функция карты-хранить пары ключевых значений. Поскольку значение получается на основе ключа, ключ не разрешается повторять. В основном у него есть следующие категории:
Hashmap:
Наиболее часто используемые карты сохраняют данные в соответствии с значением хэшкода ключа и могут напрямую получить свое значение в соответствии с ключом с очень быстрой скоростью доступа. При прохождении порядок получения данных совершенно случайный. HashMap позволяет только одной записи быть нулевой; Значение нескольких записей должно быть нулевым; HashMap не поддерживает синхронизацию потока, то есть несколько потоков могут писать HashMap в любое время; Это может привести к несоответствию в данных. Если требуется синхронизация, вы можете использовать метод сборов SynchronizedMap, чтобы сделать HashMap синхронизироваться или использовать concurrenthashmap. Hashtable похож на HashMap. Это наследует от класса словаря. Разница в том, что это не позволяет записанным ключам или значениям быть пустыми; Он поддерживает синхронизацию потоков, то есть только один поток может писать хэштату в любое время, поэтому при написании хештата также приводит к медленности хэштата.
LinkedHashmap
Порядок введения записей сохранен. При прохождении LinkedHashmap с итератором полученные сначала записи должны быть вставлены первыми. Вы также можете использовать параметры во время строительства и сортировать их в соответствии с количеством применений. Это будет медленнее, чем хэшмап при прохождении, но есть исключение. Когда HashMap имеет большую емкость и является менее фактическим данным, он может быть медленнее, чем LinkedHashmap, поскольку скорость обходов LinkedHashmap связана только с фактическими данными и не имеет ничего общего с пропускной способностью, в то время как скорость обхода Hashmap связана с его способностью.
ТРИМАП
Реализация интерфейса SortMap, записи, которые он сохраняет, могут быть отсортированы в соответствии с ключом. По умолчанию он сортируется в порядке возрастания значений ключей или также может указать отсортированный компаратор. Когда он пересматривается с итератором, полученные записи отсортируются.
Ключевая сортировка
Из приведенного выше введения в типы карт мы видим, что TreeMap имеет свою собственную функцию сортировки ключей. Он должен только реализовать интерфейс сравнения одновременно при его создании. Пример заключается в следующем:
Private static void sort_by_key () {map <integer, integer> treemap = new treemap <> (новый компаратор <Integer> () {@override public int compare (Integer o1, Integer O2) {return o2-O1; // обратный порядок. Пусть я объясните, что если отрицательное значение вернется, O1 будет первым, O1 // заполнить данные для (int i = 0; i <100; i ++) {int key = (int) (10000*math.random ()); int value = (int) (10000*math.random ()); treeMap.put (ключ, значение); } outmap (treeMap); } public static void outmap (map <integer, integer> map) {for (integer integer: map.keyset ()) {System.out.println ("key ="+integer+"value ="+map.get (Integer)); }}/* Результат заключается в следующем: ключ = 9977 Значение = 80Key = 9684 Значение = 7108KEY = 9422 Значение = 1706 Крей = 9264 Значение = 1210KEY = 9248 Значение = 4758 КЛей. Значение = 8171 Крей = 8728 Значение = 1538 КЛей.Как видно из вышесказанного, не сложно сортировать ключи, но разместить такой вид, поэтому вам нужно повернуть карту.
Сортировать по цене
Поскольку MAP не имеет этой функции в Java, мы должны реализовать ее сами. Идея заключается в следующем:
Список в Java может использовать интерфейс Compare.
Карта на самом деле является коллекцией в записи <>. Таким образом, использование списка <entry <>> может реализовать сортировку и вставить отсортированные элементы в LinkedMap.
Реализация кода выглядит следующим образом:
Частная статическая карта <integer, integer> sortmap (map <integer, integer> linkedmap) {list <map.entry <integer, integer >> cache = new ArrayList <> (linkedMap.EntrySet ()); // Переписать коллекции функций сравнения. Спорт (кэш, новый компаратор <map.entry <integer, integer >> () {@Override public int compare (entry <Integer, Integer> O1, integer <Integer, Integer> o2) {// Если возвращаемое значение меньше 0, то o1 o2 o2 o2.getaLe }); Map <Integer, Integer> ResultMap = new LinkedHashmap <> (); // вставить результат в LinkedMap и вернуть для (int i = 0; i <cache.size (); i ++) {resultMap.put (cache.get (i) .getKey (), cache.get (i) .getValue ()); } вернуть ResultMap; }/*Результат: 7965 99661067 99631720 98333257 97383934 9578777 93481924 93153472 92703649 91145892 9078*//////Таким образом, оба сортировки по значению и сортировке по ключам могут быть достигнуты.