四个基本方向;有效的记忆表现

时间:2017-03-02 22:28:18

标签: java memory boolean bit memory-efficient

我正在编写一个Java程序,需要利用四个主要方向(北,东,南和西)。我一直遇到的问题是如何表示每个方向,以便尽可能少地使用内存。起初人们会认为你可以使用一个字符串来表示每个方向为“北”,“东”,“南”和“西”,但字符串比较是浪费的,当我只有四个值时我并不是必需的。想要比较。甚至没有提到,字符串单独使用了超出此问题范围的大量内存。

我提出了使用长度为2的布尔[]的想法。我只能将四种可能的组合(00,01,10和11)映射到每个方向。我遇到的问题是布尔数组不会使用我期望它在内存中的两位空间。根据这个答案:https://gist.github.com/schacon/6092633#file-git-http-proto-txt-L313,该数组最多可能需要4个字节的内存。不是我真正想要的......

在做了一些搜索后,很多帖子和网站建议使用BitSet()对象,但是根据上面的帖子,java中的对象可以占用8到16个字节的内存。有人知道如何在保持低内存使用率方面最好地解决这个问题吗?我最好只想用这两位来表示基本方向。

是否真的没有办法用(在Java中)用完全两位来表示这四个基本方向?如果没有,这个程序的主要方向的记忆效率最高表示是什么?

1 个答案:

答案 0 :(得分:0)

你可以使用byte [],每个byte []元素占用8位。因此,您可以在每个字节中存储4个方向数据集。你可以

1) set 0,1,2 or 3 as value for each direction (can be final static byte)
2) depending on the insert position in the byte, use the bitshift operations to create 
   a "mask" for your operation
3) use binary | operator to assign your value to the byte.

而不是bitshift,* 4或/ 4(乘法或除法)也将移位2位数...