时间复杂的Google Protobuf上的get操作反序列化了重复的对象

时间:2017-01-31 20:26:01

标签: java list serialization time-complexity protocol-buffers

假设我们创建了一个重复某种数据类型的proto文件,例如

message DocList{ 
    repeated string docId = 1;
}

现在我们按以下方式将对象插入到它的构建器对象中:

DocList.Builder docList = new DocList.newBuilder()
docList.addAllDocId(docIDlist);         // docIDList is ArrayList<String>

现在我们执行以下get操作来检索索引处的对象。

docList.getDocId(i);   // Some index i

我想知道这个get操作是O(1)还是O(n)?

1 个答案:

答案 0 :(得分:1)

Protobuf ListValue java.util.ArrayList

支持
if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
      values_ = new java.util.ArrayList<com.google.protobuf.Value>();
      mutable_bitField0_ |= 0x00000001;
}

因此 get()

为O(1)

OpenJDK ArrayList

@SuppressWarnings("unchecked")
E elementData(int index) {
    return (E) elementData[index];
}