【问题标题】:Unsorting the sorting object in Hashtable在 Hashtable 中取消排序对象的排序
【发布时间】:2014-01-11 08:23:10
【问题描述】:

我有 Hashtable 对象,我在其中添加了键和值。

Hashtable 中的值是一个 ArrayList。

现在的问题是我使用下面的方法通过迭代对 Hashtable 值进行了排序。

 Collections.sort(keys) 

排序后,更改完成。再次,我想要哈希表中未排序值的另一个副本。即使我尝试了另一个哈希表对象,但在第一个哈希表对象上全局完成了排序。如何通过创建另一个哈希表对象从哈希表中获取未排序的值。

假设我的问题无法理解,请告诉我!我也会补充的!

谢谢!!!

【问题讨论】:

  • 在排序之前,您可以克隆未排序的对象。
  • 虽然我按照你说的克隆了,但是还是不行!!!
  • 你能发布你的代码吗?
  • 实际上是我的哈希表值,即)arrayList。所以我是否需要复制 ArrayList 而不是哈希表???
  • 是的,我只是根据要求编写了一个代码,看来您需要克隆 ArrayList 以及如果我们克隆我们得到 Map 的克隆对象,并且由于 ArrayList 是引用类型,所以克隆里面的 ArrayList HashMap 仍然指向之前创建的 ArrayList 对象。

标签: java sorting collections hashmap


【解决方案1】:

你可以使用 xxx.clone();排序前获取hashmap副本的方法。

  (HashMap)yourHashMap.clone();

【讨论】:

  • 实际上是我的哈希表值,即)arrayList。所以我是否需要复制 ArrayList 而不是哈希表???
【解决方案2】:

克隆在这里不起作用,默认克隆执行“浅克隆”。因此,原始地图和克隆地图将包含对相同列表的引用。

另一种方法是序列化哈希图,然后反序列化它。这可以保证和深度克隆。

您可以通过遍历地图的键和集合的元素来手动创建重复地图。

【讨论】:

  • 创建重复地图会影响性能。我有大约 10000 个字符串。再次迭代是一个乏味的过程?
  • 在这种情况下,只保留两份地图。一个是原始的,另一个是您通过序列化和反序列化原始地图创建的。就两本。重复使用和回收。
  • 创建克隆的arraylist,然后制作新的相似哈希图。
猜你喜欢
  • 2011-12-06
  • 1970-01-01
  • 2011-10-14
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
  • 2022-01-12
相关资源
最近更新 更多