Bundle的keySet中的项目顺序

时间:2012-01-24 03:52:26

标签: android

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]。有没有办法确保两者中的订单相同?

2 个答案:

答案 0 :(得分:1)

地图根据其用途有不同的方法。

  • HashMap - 元素将处于不可预测的“混乱”状态。
  • LinkedHashMap - 元素将按输入顺序或最后一个引用顺序排序,具体取决于LinkedHashMap的类型。
  • TreeMap - 元素按键排序。

为了更好地了解您,您还可以查看this Answer

答案 1 :(得分:0)

地图和集合(以及捆绑包)没有固有的顺序。您可以序列化单个TreeMap<Integer, String>,而不是迭代和序列化每个条目,或者您可以像您正在进行迭代,但是还可以存储一个值 - ArrayList(也可序列化)键。