将哈希图转换为数组[重复]
Posted
技术标签:
【中文标题】将哈希图转换为数组[重复]【英文标题】:convert a hashmap to an array [duplicate] 【发布时间】:2011-07-16 09:07:51 【问题描述】:我有一个这样的哈希图:
HashMap<String, String[]> map = new HashMap<String, String[]>();
我想把它转换成一个数组,比如 Temp[],第一个值包含 hashmap 中的键,第二个值是 map 中的 String[]-array,也作为数组。这可能吗?怎么样?
【问题讨论】:
您的问题不清楚 - 您是在谈论一个新类的数组,其中每个实例都包含地图中的键和值? 【参考方案1】:看到同样的问题here:
hashMap.keySet().toArray(); // returns an array of keys
hashMap.values().toArray(); // returns an array of values
【讨论】:
代码现在是这样的:` HashMap嗯。你的问题真的很奇怪,但这是你问的:
HashMap<String, String[]> map = new HashMap<String, String[]>();
String[] keys = map.keySet().toArray();
Object[] result = new Object[keys.length*2]; //the array that should hold all the values as requested
for(int i = 0; i < keys.length; i++)
result[i] = keys[i]; //put the next key into the array
result[i+1] = map.get(keys[i]); //put the next String[] in the array, according to the key.
但是,伙计,你为什么需要这样的东西?不管你想做什么,超过 99% 的机会你不需要写这样的东西......
【讨论】:
【参考方案3】:我猜,你只需要写一个方法,就可以做你想做的事。
【讨论】:
【参考方案4】:我不确定这是否是您需要的,但这是我修改的代码:
Map<String, String[]> map = new HashMap<String, String[]>();
map.put("key1", new String[]"value1", "test1");
map.put("key2", new String[]"value2");
Object[] keys = map.keySet().toArray();
Object[] values = map.values().toArray();
System.out.println("key = " + keys[0] + ", value #1 = " + ((Object[])values[0])[0]);
System.out.println("key = " + keys[1] + ", value #1 = " + ((Object[])values[1])[0] + ", value #2 = " + ((Object[])values[1])[1]);
输出:
key = key2, value #1 = value2
key = key1, value #1 = value1, value #2 = test1
请注意,在key[0]
下您有"key2"
而不是"key1"
。那是因为HashMap
不会按照您添加它们的顺序保留密钥。要更改它,您必须选择另一个 Map
实现(例如 TreeMap
,如果您想按字母顺序排列)。
这是如何工作的? Java 允许您将数组转换为Object
。 toArray()
方法返回 Object[]
- Objects
的数组,但这些对象也是数组(字符串 - 正如您在地图中定义的那样)!如果您只打印value[0]
,它就像打印mySampleArray
,其中mySampleArray
是:
Object[] mySampleArray = new Object[5];
所以你在整个数组而不是元素上调用它。这就是为什么你会得到 [Ljava.lang.String;@7c6768
等(这是 className@HashCode - 这就是默认的 toString()
方法所做的)。
为了了解你的元素,你必须更深入。
((Object[])values[0])[0]
这意味着:取 values[0](我们知道它包含一个数组),将其转换为数组并取第一个元素。
希望对您有所帮助,如果您需要任何其他信息,请告诉我。
【讨论】:
以上是关于将哈希图转换为数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章