какие-либо предложения для ускорения Java-кода, который клонирует хэш-карты? - PullRequest
2 голосов
/ 03 декабря 2011

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

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

(в настоящее время я использую реализацию colt OpenIntDoubleHashMap.)

Ответы [ 3 ]

1 голос
/ 03 декабря 2011

Вы должны использовать более эффективные алгоритмы для этого. Посмотрите на библиотеку http://code.google.com/p/pcollections/, структуру PMap, которая позволяет неизменные карты.

UPDATE

Если ваша карта довольно маленькая (вы сказали только несколько сотен), возможно, более эффективными будут только два массива:

int keys[size];
double values[size];

В этом случае для клонирования карты вам просто нужно использовать System.arraycopy, который должен работать очень быстро.

0 голосов
/ 04 декабря 2011

Если изменяется только небольшая часть объектов, вы могли бы реализовать двухслойную структуру:

  1. Слой 1 является исходной картой.
  2. Слой 2 сохраняет измененные элементытолько.

Любой объект из исходной карты, который необходимо изменить, клонируется, модифицируется и помещается в карту слоя 2.

Поиски сначала обращаются к карте слоя 2 и,если объект не найден, вернитесь к карте слоя 1.

0 голосов
/ 04 декабря 2011

Может быть, использовать копию при записи обертки для вашей карты, если оригинал меняется только изредка.

...