Hashtable一个键多个值 在遍历怎么做啊
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hashtable一个键多个值 在遍历怎么做啊相关的知识,希望对你有一定的参考价值。
对哈希表进行排序在这里的定义是对key/键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:ArrayList akeys=new ArrayList(ht.Keys); //别忘了导入System.Collections
akeys.Sort(); //按字母顺序进行排序
foreach(string skey in akeys)
Console.Write(skey+ ":");
Console.WriteLine(ht[skey]);//排序后输出
参考技术A 遍历哈希表
遍历哈希表需要用到DictionaryEntry Object,代码如下:
foreach(DictionaryEntry de in ht) //ht为一个Hashtable实例
Console.WriteLine(de.Key);//de.Key对应于key/键值对key
Console.WriteLine(de.Value);//de.Key对应于key/键值对
参考技术B 应该是按下标来找值
如何遍历 Map 并克隆每个值? [复制]
【中文标题】如何遍历 Map 并克隆每个值? [复制]【英文标题】:How to loop through a Map and clone each value? [duplicate] 【发布时间】:2013-11-14 17:58:23 【问题描述】:我需要知道如何循环遍历一个哈希表,检查每个值的可克隆性,并在可能的情况下进行克隆。此 Hashtable 具有所有 String 键,但值可以是任何类。我在另一个 Stack Overflow 页面上遇到了以下 Hashmap 示例,但我需要使用 Hashtable 来执行此操作。更具体地说,一个不带括号的。 (哈希表而不是 Hashtable<Type, Type>
。)我还看到了循环遍历 ArrayList 并克隆每个元素的示例,但我需要使用哈希表来执行此操作。我在下面发布了两段代码:第一段是我找到的 HashMap 示例,第二段是我目前的提案和我遇到的问题。
哈希映射
public Map<String,C> deepCopy(Map<String, C> original)
Map<String, C> copy = new HashMap<String, C>(original.size());
for(Map.Entry<String, C> entry : original.entries())
copy.put(entry.getKey(), entry.getValue().clone());
我的建议
public class _HashtableCloningTest
public Hashtable deepClone(Hashtable original)
Hashtable newH = new Hashtable(original.size())
Set<String> keys = original.keySet();
for (String key : keys)
if (original.get(key) instanceof Cloneable)
newH.put(key, original.get(key).clone());
return newH;
此代码无法编译。该错误表示克隆方法在对象类上,并且该类上的方法受到保护。我需要它来克隆当前值的类,但由于我作为程序员不知道该类,所以我不知道如何将它转换为正确的类。
非常感谢您提供有关此障碍的任何见解和帮助。
【问题讨论】:
为什么要克隆任意对象?这通常是一种代码异味,IME。 这是我的客户想要的方式。我意识到可能有更好的方法,但我需要知道如何做到这一点。我被告知这是可能的,即使不是最好的解决方案。 您的代码的问题是,Cloneable
很难正确实现,因此对于很多人来说,克隆您的对象并不是可靠的方法。阅读***.com/questions/4081858/about-java-cloneable要解决您的问题,您需要知道此地图中放置了哪些类型的实例并正确转换。
Cloneable
在 Java 中基本上是一场灾难。为什么您的客户对 Java 了解得足够多,以至于关心Cloneable
,却不足以知道Cloneable
有多糟糕?
【参考方案1】:
clone()
方法受到保护,以防止您克隆任意对象,这通常表明您正在尝试做一些奇怪的事情。
Cloneable
不包含clone()
有点不方便。有关此事的讨论,请参阅Why is the clone() method protected in java.lang.Object? 的答案。
另请参阅https://***.com/a/10083129/616460 的答案,了解有关clone()
的一般问题的一些好的建议。
无论如何,如果你不得不这样做......
一种选择可能是定义一个接口,将对象标记为可以为您的哈希表复制,并提供clone()
,例如:
public interface Copiable extends Cloneable
public Object clone ();
第二种选择是创建一些接口,提供一种方法来制作对象的深层副本,并让你的类实现它,例如:
public interface Copiable
public Copiable createDeepCopy ();
如果您不顾一切,还有一个选择是使用反射在 Cloneable
对象上调用 clone()
。不过,您不妨三思而后行。
【讨论】:
以上是关于Hashtable一个键多个值 在遍历怎么做啊的主要内容,如果未能解决你的问题,请参考以下文章