Emi*_*Adz 5 java android casting hashmap linkedhashmap
我在我的应用程序中使用Hawk作为替代品SharedPreferences.
我正试图在其中存储一个LinkedHashMap,但出于某种原因,当我从Hawk拉回来时,它会返回常规HashMap而不是LinkedHashMap.在这一点上,我崩溃了,ClassCastException因为HashMap无法LinkedHashMap直接前进.
所以问题是如何将返回的转换HashMap为LinkedHashMap?
Dav*_*ser 14
所有答案表明你可以创建一个LinkedHashMap从HashMap技术上是正确的,但不会给你想要的结果:-(
当然,您可以创建一个LinkedHashMap来自a HashMap,但不能保证LinkedHashMap它将具有与原始相同的顺序.
问题在于,LinkedHashMap当它作为普通的无序存储在持久存储中时,会被序列化Map,这不会保留单个项的排序.然后,当您从持久存储中提取对象时,它将以普通方式返回HashMap,并且它已经丢失了"排序"(这首先是您想要的LinkedHashMap).如果您随后LinkedHashMap从返回创建一个HashMap,则排序很可能与原始排序不同.
为了正确地执行此操作,您应该将您LinkedHashMap转换为有序的对象数组,并将此有序数组存储在持久存储中.然后,您可以从持久存储中读取有序的对象数组,并LinkedHashMap使用正确的顺序重新创建.基本上,您需要自行序列化和反序列化LinkedHashMap.
有关详细信息,请参阅我对此问题的回答.
只需创建一个新的LinkedHashMap,因为它可以将任何Map用作构造函数参数。
LinkedHashMap<Object> newMap = new LinkedHashMap<>(theHashMapReturnedFromHawk);
Run Code Online (Sandbox Code Playgroud)
Object 将是您需要的类型。
| 归档时间: |
|
| 查看次数: |
10548 次 |
| 最近记录: |