Bundle的.keySet()中的项目顺序是否与插入的项目顺序相同?我试图通过从服务到活动的parcelable发送LinkedHashMap。
以下是使用.putSerializable将linkedHashMap的项插入Bundle的代码:
Bundle b = new Bundle();
Iterator<Entry<Integer, String>> _cyclesIterator = cycles.entrySet().iterator();
while (_cyclesIterator.hasNext()) {
Entry<Integer, String> _entry = _cyclesIterator.next();
Log.i(TAG,"Writing to JSON CycleID" + _entry.getKey());
b.putSerializable(_entry.getKey().toString(), _entry.getValue());
}
_dest.writeBundle(b);
当我使用以下方法检索包时,我正在尝试阅读此内容:
Bundle _b = in.readBundle();
if (_b != null) {
for (String _key : _b.keySet()) {
Log.i(TAG,"Reading JSON for cycle " + _key);
_lhm.put(Integer.valueOf(_key), (String)_b.getString(_key));
}
setCycles(_lhm);
}
当项目进入时,日志显示[1,2,3,4]但是当它们被回读时,它是[3,2,1,4]。有没有办法确保两者中的订单相同?
答案 0 :(得分:1)
地图根据其用途有不同的方法。
HashMap
- 元素将处于不可预测的“混乱”状态。LinkedHashMap
- 元素将按输入顺序或最后一个引用顺序排序,具体取决于LinkedHashMap的类型。TreeMap
- 元素按键排序。为了更好地了解您,您还可以查看this Answer
。
答案 1 :(得分:0)
地图和集合(以及捆绑包)没有固有的顺序。您可以序列化单个TreeMap<Integer, String>
,而不是迭代和序列化每个条目,或者您可以像您正在进行迭代,但是还可以存储一个值 - ArrayList
(也可序列化)键。