如何convert/cast HashMap转LinkedHashMap?
How to convert/cast HashMap to LinkedHashMap?
我在我的应用程序中使用 Hawk 替代 SharedPreferences
。
我试图在其中存储一个 LinkedHashMap
,但出于某种原因,当我将其从 Hawk 中拉回时,它 returns 作为常规HashMap
而不是 LinkedHashMap
。在这一点上,我崩溃了 ClassCastException
因为 HashMap
不能直接转换为 LinkedHashMap
。
所以问题是如何将返回的 HashMap
转换为 LinkedHashMap
?
只需创建一个新的 LinkedHashMap,因为它可以将任何 Map 作为构造函数参数。
LinkedHashMap<Object> newMap = new LinkedHashMap<>(theHashMapReturnedFromHawk);
Object
就是您需要的类型。
LinkedHashMap 的一个构造函数接受 Map
。它将 return 一个 LinkedHashMap
与 HashMap
内容相同。
代码示例:
LinkedHashMap<T> newMap = new LinkedHashMap<T>(hashmap);
其中 T
是存储在 HashMap
中的对象的类型
所有建议您可以从 HashMap
创建 LinkedHashMap
的答案在技术上都是正确的,但不会给您想要的结果:-(
当然,您可以从 HashMap
创建 LinkedHashMap
,但不能保证 LinkedHashMap
的顺序与原始顺序相同。
问题在于,当您的 LinkedHashMap
作为普通无序 Map
存储到持久存储中时,它会被序列化,这不会保留单个项目的顺序。然后,当您从持久存储中提取对象时,它作为普通的 HashMap
返回,并且它丢失了 "ordering"(这正是您首先想要的 LinkedHashMap
).如果您随后从返回的 HashMap
创建一个 LinkedHashMap
,排序很可能与原始顺序不同。
为了正确执行此操作,您可能应该将 LinkedHashMap
转换为有序的对象数组,并将此有序数组存储在持久存储中。然后,您可以从持久存储中读回有序的对象数组,并以正确的顺序重新创建 LinkedHashMap
。基本上,您需要自己序列化和反序列化 LinkedHashMap
。
有关详细信息,请参阅 my answer to this question。
我在我的应用程序中使用 Hawk 替代 SharedPreferences
。
我试图在其中存储一个 LinkedHashMap
,但出于某种原因,当我将其从 Hawk 中拉回时,它 returns 作为常规HashMap
而不是 LinkedHashMap
。在这一点上,我崩溃了 ClassCastException
因为 HashMap
不能直接转换为 LinkedHashMap
。
所以问题是如何将返回的 HashMap
转换为 LinkedHashMap
?
只需创建一个新的 LinkedHashMap,因为它可以将任何 Map 作为构造函数参数。
LinkedHashMap<Object> newMap = new LinkedHashMap<>(theHashMapReturnedFromHawk);
Object
就是您需要的类型。
LinkedHashMap 的一个构造函数接受 Map
。它将 return 一个 LinkedHashMap
与 HashMap
内容相同。
代码示例:
LinkedHashMap<T> newMap = new LinkedHashMap<T>(hashmap);
其中 T
是存储在 HashMap
所有建议您可以从 HashMap
创建 LinkedHashMap
的答案在技术上都是正确的,但不会给您想要的结果:-(
当然,您可以从 HashMap
创建 LinkedHashMap
,但不能保证 LinkedHashMap
的顺序与原始顺序相同。
问题在于,当您的 LinkedHashMap
作为普通无序 Map
存储到持久存储中时,它会被序列化,这不会保留单个项目的顺序。然后,当您从持久存储中提取对象时,它作为普通的 HashMap
返回,并且它丢失了 "ordering"(这正是您首先想要的 LinkedHashMap
).如果您随后从返回的 HashMap
创建一个 LinkedHashMap
,排序很可能与原始顺序不同。
为了正确执行此操作,您可能应该将 LinkedHashMap
转换为有序的对象数组,并将此有序数组存储在持久存储中。然后,您可以从持久存储中读回有序的对象数组,并以正确的顺序重新创建 LinkedHashMap
。基本上,您需要自己序列化和反序列化 LinkedHashMap
。
有关详细信息,请参阅 my answer to this question。