我编写了一个map reduce程序,其值格式为:
Integer@BitSet
我想减小随机播放的大小。用起来好吗
Vector<Object> vec=new Vector(); vec.add(Integer); vec.add(BitSet);
这个向量大吗?在我的例子中哪个数据结构是最好的?
0dxa2lsx1#
两者 BitSet 以及 Integers 延伸自 Object .所以你的例子会有用。这个 Vector 因此它会导致性能下降。我会用 ArrayList 接口。
BitSet
Integers
Object
Vector
ArrayList
List<Object> bb = new ArrayList<Object>(); bb.add(new Integer(3)); bb.add(new BitSet(5));
我看不到任何共同点,只看到物体。使用单个类作为结构的另一种方法,
public class Struct{ private Integer mInt; private BitSet mBitSet; } ... Struct struct; List<Struct> bb = new ArrayList<Struct>(); struct = new Struct(new Integer(3)); bb.add(struct); struct = new Struct(new BitSet(5)); bb.add(struct); ....
w9apscun2#
如果您想减少无序大小,一个很好的最小化它的方法是实现一个定制的可写类。hadoop处理奇怪类型的序列化有时会有相当大的开销,因此定制的可写类型提供了完全的控制,您还可以利用“原始”可写类型,这是非常有效的。你可以这样做:
public class IntAndBitSetWritable implements Writable { private IntWritable n; private BytesWritable bytes; @Override public void readFields(DataInput in) throws IOException { n.readFields(in); bytes.readFields(in); } @Override public void write(DataOutput out) throws IOException { n.write(out); bytes.write(out); } public BitSet getBitSet() { return BitSet.valueOf(bytes.getBytes()); } public int getInt() { return n.get(); } public void setBitSet(BitSet b) { byte[] arr = b.toByteArray(); bytes.setSize(arr.length); bytes.set(arr, 0, arr.length); } public void setInt(int i) { n.set(i); } }
注意,上面假设使用Java7来转换 BitSet 收件人/发件人 byte[] . 如果使用Java6,可能需要实现不同的转换方法。
byte[]
2条答案
按热度按时间0dxa2lsx1#
两者
BitSet
以及Integers
延伸自Object
.所以你的例子会有用。
这个
Vector
因此它会导致性能下降。我会用
ArrayList
接口。我看不到任何共同点,只看到物体。
使用单个类作为结构的另一种方法,
w9apscun2#
如果您想减少无序大小,一个很好的最小化它的方法是实现一个定制的可写类。hadoop处理奇怪类型的序列化有时会有相当大的开销,因此定制的可写类型提供了完全的控制,您还可以利用“原始”可写类型,这是非常有效的。你可以这样做:
注意,上面假设使用Java7来转换
BitSet
收件人/发件人byte[]
. 如果使用Java6,可能需要实现不同的转换方法。