2012-07-03 4 views
-1

В моем коде я пытаюсь получить, если число существует в hashmap или нет. Мой код выглядит следующим образом:Java - BitSet Замена

BitSet arp = new BitSet(); 

for i = 0 to 10 million 

HashMap.get (i) 

if number exist 
arp.set(i , true) 

else 
arp.set(i , false) 

После этого из битрейта я получаю, если число i существует или нет. Тем не менее, я обнаружил, что эта операция битета довольно медленная (также с string = string + 0/1, более медленным). Может кто-нибудь помочь мне, как заменить эту операцию быстрее.

+2

Можете ли вы показать нам свой _actual_ код? ... Или, по крайней мере, не этот псевдокод. –

+1

-1 для предоставления только псевдокода. Почему вы не опубликовали Java-код? – home

+0

@home, мой код намного длиннее, и для извлечения требуемого кода потребуется время :) – Arpssss

ответ

3

Ваш код действительно трудно читать четко, но я подозреваю, что вы просто пытаетесь установить биты в BitSet, которые являются ключами от вашего HashMap?

В этом случае ваш код должен быть просто более или менее

BitSet bits = new BitSet(10000000); 
for (Integer k : map.keySet()) { 
    bits.set(k); 
} 

Даже если это не то, что вы имели в виду, как правило, BitSet прокладывает быстро; Я подозреваю, что отдыхает вашего медленного.

+0

выше код точно такой же, как у меня. – Arpssss

+0

@Arpssss: Э? Код, который вы предоставили в своем вопросе, даже не компилируется. «if number exist» недействителен синтаксис Java. –

+0

Но у меня есть bits.set (k, true)/bits.set (k, false) – Arpssss

2

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

Если у вас есть достаточно доступной памяти, вы всегда можете просто пойти на boolean[] вместо BitSet.

BitSet внутренне использует long[] для хранения отдельных бит, поэтому он очень хорош по памяти, но иногда может быть немного медленным.

Смежные вопросы