Оптимизация скорости вставки в java.util. Карта/Набор

Я сделал функцию, вы можете попробовать это:

function check(array $files){
    $collect = [];
    foreach($files as $file){

       foreach($collect as $record){
           if($record === $file) //check code and value or array identical
               return true;  //return true if match found
       }

       $collect[] = $file; //collect all array (index and code)till match 
                           //not found
    }

  return false;  //return false if match not found at last

}

$files= Array ( 
0 => Array ( 
    0 => 1,
    1 => '3f'
),
1 => Array (
    0 => 2,
    1 => '2f'
),
2 => Array (
    0 => 2,
    1 => '2f'
)
);

var_dump(check($data));

она вернет true, если получит успех

5
задан Pierre 22 February 2009 в 18:07
поделиться

5 ответов

Легкий ответ время "это, и см.".

Другой ответ, "он не будет иметь значения". Это, кажется, микрооптимизация, которая едва стоит усилия. Я думаю, что это попадает в категорию "Печальной Трагедии Театра Микрооптимизации".

8
ответ дан 18 December 2019 в 07:57
поделиться

Нет для java.util. Карта и java.util. Набор, потому что это интерфейсы, и существует различные реализации.

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

Вставка 5 000 случайных чисел в HashSet берет о миллисекунде на заурядном ноутбуке, поэтому сколько миллионов элементов Вы хотите вставить для создания этого вида из оптимизации стоящим?

6
ответ дан 18 December 2019 в 07:57
поделиться

Времени вставки для красно-черного дерева (который используется для реализации TreeSet/TreeMap Java) гарантируют, худший случай, чтобы быть O (зарегистрируйте n). Это могло быть быстрее, если объекты будут в особом порядке, но я не уверен, чем это было бы (вероятно, предварительно отсортированный, то будет самым быстрым?).

Вставка в хеш-таблицу является O (1) (постоянное время) операция. Главным, сделанным для вставки, является вычисление хэш-кода.


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

3
ответ дан 18 December 2019 в 07:57
поделиться

Существует естественно огромная разница между основанными на хеше наборами и основанными на дереве.

Основанные на дереве извлекают выгоду из упорядочивания элемента для вставки (например, сравнения между строками), поэтому когда у Вас есть сопоставимые объекты (как строка), лучше использовать их. TreeSet/TreeMap/etc. в стандартном наборе, как предполагается, сбалансирован (красно-черное дерево), таким образом, порядок вставки не имеет значения так очень. Если бы это не было сбалансировано, то порядок вставки имел бы значение, так как Вы могли закончить с цепочкой вместо дерева.

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

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

2
ответ дан 18 December 2019 в 07:57
поделиться

Старайтесь рассмотреть характеристики своей структуры данных при принятии мер по оптимизации. Для одного экстремального примера, вставляя элементы в двоичное дерево в отсортированном порядке привел бы к связанному списку.

1
ответ дан 18 December 2019 в 07:57
поделиться
Другие вопросы по тегам:

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