- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 Hawk作为 SharedPreferences
的替代品在我的申请中。
我正在尝试存储 LinkedHashMap
在其中,但出于某种原因,当我将其从 Hawk 中拉回时,它会作为常规 HashMap
返回而不是 LinkedHashMap
.此时我崩溃了 ClassCastException
作为HashMap
无法转换为 LinkedHashMap
直截了当。
所以问题是如何转换返回的 HashMap
成为LinkedHashMap
?
最佳答案
所有建议您可以从 HashMap
创建 LinkedHashMap
的答案在技术上都是正确的,但不会给您想要的结果:-(
当然,您可以从 HashMap
创建一个 LinkedHashMap
,但是不能保证 LinkedHashMap
具有相同的顺序那是你的原作。
问题是,当您的 LinkedHashMap
作为普通无序 Map
存储到持久性存储中时,它会被序列化,这不会持续存在于单个项目的排序中.当您随后从持久存储中提取对象时,它作为普通的 HashMap
返回,并且它已经失去了“顺序”(这正是您想要的 LinkedHashMap
首先)。如果您随后从返回的 HashMap
创建一个 LinkedHashMap
,排序很可能与原始顺序不同。
为了正确执行此操作,您可能应该将 LinkedHashMap
转换为有序的对象数组,并将此有序数组存储在持久性存储中。然后,您可以从持久存储中读回有序的对象数组,并以正确的顺序重新创建 LinkedHashMap
。基本上,您需要自己序列化和反序列化 LinkedHashMap
。
参见 my answer to this question了解更多详情。
关于java - 如何将 HashMap 转换/转换为 LinkedHashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38957055/
我是一名优秀的程序员,十分优秀!