Google Protobuf反序列化重复对象get操作的时间复杂度
Posted
技术标签:
【中文标题】Google Protobuf反序列化重复对象get操作的时间复杂度【英文标题】:Time Complexity of get operation on Google Protobuf deserialized repeated object 【发布时间】:2017-01-31 20:26:01 【问题描述】:假设我们创建了一个包含重复某些数据类型的原型文件,例如
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】: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];
【讨论】:
以上是关于Google Protobuf反序列化重复对象get操作的时间复杂度的主要内容,如果未能解决你的问题,请参考以下文章