Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / March 2008

Tip: Looking for answers? Try searching our database.

representing a sequence of bits in Java?

Thread view: 
nooneinparticular314159@yahoo.com - 10 Mar 2008 05:01 GMT
I want to represent a long sequence of bits indicating whether a long
sequence of things are true.  ie.  Something like,
1010011101010101010, means the first item is true, the second is
false, etc.  I could use a hashmap, and say the key for the hashmap is
the same as the bit number in the bitmap  I suppose that I could also
use an array, and fill it with 1s and 0s.  But I'd really like to be
able to do this efficiently, to rapidly find elements containing a 0
(along with which element number they are), and to eliminate elements
with a 1 from future consideration.  Any idea what the best object to
do this is?

Thanks!
Patricia Shanahan - 10 Mar 2008 05:46 GMT
> I want to represent a long sequence of bits indicating whether a long
> sequence of things are true.  ie.  Something like,
[quoted text clipped - 8 lines]
>
> Thanks!

Take a look at java.util.BitSet

Patricia
Roedy Green - 10 Mar 2008 07:37 GMT
On Sun, 9 Mar 2008 21:01:55 -0700 (PDT),
"nooneinparticular314159@yahoo.com"
<nooneinparticular314159@yahoo.com> wrote, quoted or indirectly quoted
someone who said :

>I want to represent a long sequence of bits indicating whether a long
>sequence of things are true.  ie.  Something like,
>1010011101010101010, means the first item is true, the second is
>false, etc.

see http://mindprod.com/jgloss/bitset.html
--

Roedy Green Canadian Mind Products
The Java Glossary
http://mindprod.com
Ulf - 10 Mar 2008 20:15 GMT
If there are <= 32 bits it fits into an int, and I would do like this:

public static int B1 = 1;
public static int B2 = 2;
public static int B3 = 4;
public static int B4 = 8;

public int bits;

bits = B1; // Set bit 1, all others 0
bits = B1 + B2; // Set bit 1 and 4, all others 0
bits = bits | B3 // Set bit 3, the rest of the bits are unchanged
if ((bits & B1) > 0 ) // Is bit 1 set?
if ((bits & (B1 + B4)) > 0 ) // Is bit 1 OR bit 4 set?

Please note that the syntax is not verified, it only shows the
principle.
I think that, since it's mostly low level operations without class
references, it should performe well.

/Ulf
Lew - 11 Mar 2008 01:19 GMT
> bits = B1 + B2; // Set bit 1 and 4, all others 0

Use |, not +.

> bits = bits | B3 // Set bit 3, the rest of the bits are unchanged

Signature

Lew

Mark Space - 10 Mar 2008 22:26 GMT
> I want to represent a long sequence of bits indicating whether a long
> sequence of things are true.  ie.  Something like,
[quoted text clipped - 8 lines]
>
> Thanks!

BitSet looks like just the thing.  HashMap seems overkill.  How are you
looking for the bits? If it's always an index, then arrays (and
presumably BitSet) automatically provide a "perfect hash" for you.

You could roll your own, but I think BitSet would do the same thing as this:

class MyBitSet {
  private ArrayList<Integer> bits = new ArrayList<Integer>();

  public boolean getBit( int i ) {
    int intBits = bits.get( i / 32 );
    return !(intBits & (1<<(i%32)) = 0)
  }
}
// Note: seriously not syntax checked.

And similarly for set... but BitSet might also provide a custom
implementation that is more efficient than ArrayList and Integer (raw
ints, for example.)

(Note: I just peeked at the implementation of BitSet.  I does indeed
appear to use plain arrays of longs.  This should be much more efficient
than trying to use a HashMap.)


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.