Реализации Наборов Java (например, HashMaps по сравнению с HashSet по сравнению с HashTable …), что стоимость выбора является неправильной? [закрытый]

jQuery v1.11.3

В предоставленных ответах содержится много полезной информации. Но в последнее время я потратил много времени, пытаясь связать все воедино в рабочее решение для решения двух задач:

  1. Определить, что используемое устройство является устройством типа сенсорного экрана.
  2. Обнаружить, что устройство было прослушено.

Помимо этого поста и Обнаружения устройств с сенсорным экраном с помощью Javascript , я нашел этот пост Патрика Лаука чрезвычайно полезным: https://hacks.mozilla.org/2013/04/ Обнаружение прикосновения, почему не «как» /

Вот код ...

$(document).ready(function() {
//The page is "ready" and the document can be manipulated.

    if (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0))
    {
      //If the device is a touch capable device, then...
      $(document).on("touchstart", "a", function() {

        //Do something on tap.

      });
    }
    else
    {
      null;
    }
});

Важно! Метод *.on( events [, selector ] [, data ], handler ) должен иметь селектор, обычно элемент, который может обрабатывать событие «touchstart» или любое другое подобное событие, связанное с касаниями. В данном случае это элемент гиперссылки «а».

Теперь вам не нужно обрабатывать обычное нажатие мыши в JavaScript, потому что вы можете использовать CSS для обработки этих событий, используя селекторы для элемента «a» гиперссылки, например:

/* unvisited link */
a:link 
{

}

/* visited link */
a:visited 
{

}

/* mouse over link */
a:hover 
{

}

/* selected link */
a:active 
{

}

Примечание. : Есть и другие селекторы ...

6
задан Bhargav Rao 13 July 2019 в 08:45
поделиться

3 ответа

Это очень общий вопрос, но я добавлю пару мыслей.

Если вы программируете, ориентированные на интерфейсы, то гибкость не сильно пострадает. Например,

void foo(List<E> list);

Цена неправильного выбора может быть замечена в снижении производительности. Например, выбор LinkedList, когда вы ищете прямой доступ (как в ArrayList).

У наборов есть похожая проблема. Если вы хотите сохранить отсортированные коллекции без дубликатов, SortedSet будет более разумным выбором, чем HashSet. В последнем случае вам придется отсортировать весь Набор вручную (это вызов Collections.sort ())

Что касается карт , есть много разных реализаций. У каждого своя цель. Например, есть SortedMap , аналог SortedSet. Затем есть WeakHashMap , который не работает как HashMap в том смысле, что ключи могут быть удалены сборщиком мусора. Как вы понимаете, выбор между HashMap и WeakHashMap нетривиален. Как всегда, все зависит от того, что вы хотите с ними реализовать.

Что касается истории, в моем текущем проекте мы заменили HashSet на SortedSet, потому что это сказалось на производительности. Однако DataCenter не загорелся.

Мои два цента.

7
ответ дан 10 December 2019 в 02:52
поделиться

Какое это имеет значение, если вы следуете хорошей объектно-ориентированной практике в зависимости от абстрактного типа ?

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

1
ответ дан 10 December 2019 в 02:52
поделиться

Я думаю, вы можете использовать HashMap, HashSet и ArrayList в качестве основных реализаций. Когда вам нужен отсортированный набор, хорошо знать, что TreeSet доступен; Аналогичным образом, когда вы делаете рекурсивные вещи, хорошо иметь LinkedList в заднем кармане. Но запрограммируйте интерфейсы, а затем вы можете поменять реализации по мере необходимости. И если одна и та же коллекция требует обработки как (например) как LinkedList, так и ArrayList, нетрудно создать одну из другой.

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

1
ответ дан 10 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: