标签: hashmap

Java HashMap的keySet()迭代顺序是否一致?

我知道从M​​ap的keySet()方法返回的Set不保证任何特定的顺序.

我的问题是,它是否保证多次迭代的相同顺序.例如

Map<K,V> map = getMap();

for( K k : map.keySet() )
{
}

...

for( K k : map.keySet() )
{
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,假设映射修改,将迭代在按键组处于相同的顺序.使用Sun的jdk15它以相同的顺序迭代,但在我依赖于这种行为之前,我想知道所有JDK是否都会这样做.

编辑

我从答案中看到我不能依赖它.太糟糕了.我希望不必为了保证我的订购而建立一些新的收藏品.我的代码需要迭代,执行一些逻辑,然后使用相同的顺序再次迭代.我将从keySet创建一个新的ArrayList,这将保证顺序.

java iteration hashmap hashset

71
推荐指数
5
解决办法
6万
查看次数

为什么Arrays.fill()不再用于HashMap.clear()了?

我注意到在执行中有些奇怪HashMap.clear().这就是它在OpenJDK 7u40中的表现:

public void clear() {
    modCount++;
    Arrays.fill(table, null);
    size = 0;
}
Run Code Online (Sandbox Code Playgroud)

这就是OpenJDK 8u40的外观:

public void clear() {
    Node<K,V>[] tab;
    modCount++;
    if ((tab = table) != null && size > 0) {
        size = 0;
        for (int i = 0; i < tab.length; ++i)
            tab[i] = null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道现在table为空地图可以为null,因此需要在局部变量中进​​行额外的检查和缓存.但为什么被Arrays.fill()for-loop取代?

似乎在此提交中引入了更改.不幸的是,我没有找到解释为什么普通for循环可能比更好Arrays.fill().它更快吗?还是更安全?

java arrays hashmap java-8

70
推荐指数
1
解决办法
4627
查看次数

为什么HashMap值不在List中强制转换?

我将值放入形式的hashmap中,

Map<Long, Double> highLowValueMap=new HashMap<Long, Double>();
highLowValueMap.put(1l, 10.0);
highLowValueMap.put(2l, 20.0);
Run Code Online (Sandbox Code Playgroud)

我想用values()map方法创建一个列表.

List<Double> valuesToMatch=new ArrayList<>();
valuesToMatch=(List<Double>) highLowValueMap.values();
Run Code Online (Sandbox Code Playgroud)

要么

List<Double> valuesToMatch=(List<Double>) highLowValueMap.values();
Run Code Online (Sandbox Code Playgroud)

但是,它会引发异常:

线程"main"中的异常java.lang.ClassCastException:
java.util.HashMap $不能将值强制转换为java.util.List

但它允许我将其传递给列表的创建:

List<Double> valuesToMatch  = new ArrayList<Double>( highLowValueMap.values());
Run Code Online (Sandbox Code Playgroud)

java collections arraylist hashmap

69
推荐指数
4
解决办法
7万
查看次数

如何在Android中打印HashMap中的所有键和值?

我是Android开发的新手,我正在尝试在Android示例项目中使用HashMap.现在,我正在做学习android的示例项目.我只是在HashMap中存储键和值,我想在EditView中显示键及其值.我在我的示例项目中按照下面的代码.但是,第一个键和值仅在EditView中打印.

   Map<String, String> map = new HashMap<String,String>();
   map.put("iOS", "100");
   map.put("Android", "101");
   map.put("Java", "102");
   map.put(".Net", "103");

   Set keys = map.keySet();

   for (Iterator i = keys.iterator(); i.hasNext(); ) {
       String key = (String) i.next();
       String value = (String) map.get(key);
       textview.setText(key + " = " + value);
   }
Run Code Online (Sandbox Code Playgroud)

在EditView iOS = 100中只打印.我想在EditText中打印所有键及其值.谁能告诉我我做错了什么?提前致谢.

java android key hashmap

67
推荐指数
7
解决办法
23万
查看次数

如何使用intent将hashmap值发送到另一个活动

如何将HashMap值从一个Intent 发送到第二个Intent?

另外,如何HashMap在第二个Activity中检索该值?

android hashmap

66
推荐指数
2
解决办法
6万
查看次数

PHP中是否有Java HashMap等效?

我需要类似于Java中的HashMap的PHP对象,但是当我用Google搜索时我没有找到,所以如果有人知道我如何在PHP中模仿HashMaps,那么将非常感谢帮助.

php hashmap

65
推荐指数
5
解决办法
9万
查看次数

警告显示当我在android中使用哈希映射时(使用新的SparseArray <String>)

我是Android的新手.在我正在使用的Android应用程序中HashMap,但我收到警告:

**"Use new SparseArray<String>(...) instead for better performance"**
Run Code Online (Sandbox Code Playgroud)

这意味着什么,我该如何使用SparseArray<String>呢?

android hashmap

65
推荐指数
3
解决办法
2万
查看次数

哪个更快,哈希查找或二进制搜索?

当给定一组静态对象(在某种意义上是静态的,一旦加载它很少会发生变化),需要重复的并发查找以及最佳性能,哪个更好,一个HashMap或一个二进制搜索使用一些自定义比较器的数组?

答案是对象或结构类型的函数吗?哈希和/或平等功能表现?哈希的独特性?清单大小? Hashset尺寸/尺寸?

我正在看的集合的大小可以是500k到10m之间的任何地方 - 这些信息很有用.

虽然我正在寻找一个C#答案,但我认为真正的数学答案不在于语言,所以我不包括那个标签.但是,如果需要注意C#特定的事情,那么需要该信息.

algorithm lookup hash hashmap binary-search

64
推荐指数
8
解决办法
5万
查看次数

Ruby Hash白名单过滤器

我试图找出如何将键和值对从一个过滤器过滤到另一个过滤器

例如,我想采取这个哈希

x = { "one" => "one", "two" => "two", "three" => "three"}

y = x.some_function

y == { "one" => "one", "two" => "two"}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

编辑:应该提一下,在这个例子中,我希望它表现为白名单过滤器.也就是说,我知道我想要什么,而不是我不想要的.

ruby hashmap

64
推荐指数
6
解决办法
4万
查看次数

Hashmap不适用于int,char

可能重复:
在Java集合中存储原始值?

在java中我使用以下内容: -

public HashMap<char, int> buildMap(String letters)
{
    HashMap<char, int> checkSum = new HashMap<char, int>();

    for ( int i = 0; i < letters.length(); ++i )
    {
        checkSum.put(letters.charAt(i), primes[i]);
    }

    return checkSum;
}
Run Code Online (Sandbox Code Playgroud)

我收到与不适当类型有关的错误.我分别使用Character和Integer而不是char和int解决了我的问题.但是,我无法弄清楚为什么HashMap无法处理原始数据类型.

java hashmap

64
推荐指数
2
解决办法
11万
查看次数