标签: linkedhashmap

在Java中按键排序HashMap的最佳方法?

这是我第一次HashMap在Java中订购.我需要通过密钥来做到这一点,但在我的情况下,密钥是一个对象,所以我需要按特定字段排序.试图通过我自己来计算它我已经考虑继续这个简单的代码划痕:

private HashMap<SimpleDBField, String> sortTable(HashMap<SimpleDBField, String> row){

    LinkedHashMap<SimpleDBField, String> orderedRow = new LinkedHashMap<SimpleDBField, String>();

    for(int i = 1; i <= row.size(); i ++){
        Iterator iterator = row.entrySet().iterator();

        while(iterator.hasNext()){
            Map.Entry<SimpleDBField, String> entry = (Map.Entry<SimpleDBField, String>) iterator.next();

            if(entry.getKey().getListPosition()==i){
                orderedRow.put(entry.getKey(), entry.getValue());
                break;
            }
        }
    }

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

假设它有效并且我不关心性能,在真正使用它之前,我想知道下一个代码划痕是否更好,最重要:为什么?

下面的示例源代码:如何按Java中的键和值对HashMap进行排序

public static <K extends Comparable,V extends Comparable> Map<K,V> sortByKeys(Map<K,V> map){

    List<K> keys = new LinkedList<K>(map.keySet());

    Collections.sort(keys);

    Map<K,V> sortedMap = new LinkedHashMap<K,V>();

    for(K key: keys){
        sortedMap.put(key, map.get(key));

    }

    return sortedMap;
} …
Run Code Online (Sandbox Code Playgroud)

java sorting hashmap comparable linkedhashmap

1
推荐指数
2
解决办法
5359
查看次数

如何将 InternalLinkedHashMap 转换为 Map&lt;dynamic, dynamic&gt;?

我设置了 firebase 云消息传递,在我的onResume()回调中,我有以下内容:

Future<void> onResume(Map<String, dynamic> message) async {
      final Map<String,dynamic> data = message['data'];
      final String url = data['url'];
      if (url != null) {
        _webViewController?.loadUrl(url);
      }
  }
Run Code Online (Sandbox Code Playgroud)

当函数到达时,
final Map<String,dynamic> data = message['data'];
它会过早地、静默地返回,没有警告。

如果我改为运行
final dynamic data = message['data'];
它会按预期继续。

检查message类型狂欢即messageInternalLinkedHashMap,不能太投Map<String, dynamic>

它说_InternalLinkedHashMap<dynamic, dynamic>' is not a subtype of type 'Map<String, dynamic>'

我该怎么做呢?
如果这个问题没有踪迹,我以后如何才能找到它?

casting linkedhashmap dart flutter firebase-cloud-messaging

1
推荐指数
2
解决办法
4515
查看次数

为什么Java在读取LinkedHashMap时会自动从String转换为Integer

我的Java应用程序显示一些奇怪的行为,我找不到解决方案.

此代码段获取LinkedHashMap键和值都是类型的内容String,并将它们写入文本文件.configWriter是类型的PrintWriter.

for (Map.Entry<String, String> entry : configMap.entireSet()) {

    configWriter.println(entry.getKey() + "=" + entry.getValue());
}
Run Code Online (Sandbox Code Playgroud)

宣布地图:

LinkedHashMap<String, String> configMap = new LinkedHashMap<String, String>();
Run Code Online (Sandbox Code Playgroud)

它通过使用Scanner类从文本文件中读取标记来填充.

一个在地图的值是一个String只包含数字(整数),但是当循环到达此值时,它抛出一个ClassCastException,你不能从投说法IntegerString.这很有道理,但值的类型是String.

有没有办法强制Java将此值保持为String

java string integer classcastexception linkedhashmap

0
推荐指数
1
解决办法
830
查看次数

String Java查找空格

我在字符串上有一个短语,我想将其拆分为其他5个或更多字符串,不带空格.例如:

String test = "hi/ please hepl meok?";
Run Code Online (Sandbox Code Playgroud)

而且我要 :

String temp1 = "hi/";
String temp2 = "please";
String temp3 = "help";
String temp4 = "meok?";
Run Code Online (Sandbox Code Playgroud)

我不想在数组中添加它,因为我想将temp4拆分为3个以上的字符串.例如

- >>拆分后的>> temp4:

temp4 = "me"
temp5 = "ok"
temp6 = "?"
Run Code Online (Sandbox Code Playgroud)

问这个问题,因为我想编写一个方法来解码来自LinkedHashMap集的字符串短语和一些解码.谢谢.如果我的方式有误,请指导我!:)

java string linkedhashmap

0
推荐指数
1
解决办法
6605
查看次数

LinkedHashMap上的同步问题

关于LinkedHashMap的同步功能的一个特定点我很困惑.以下是我感到困惑的相关Javadoc.我的困惑之处在于,为什么删除方法在这里是特殊的,这是由" - 通过迭代器自己的删除方法除外"提到的?

http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html

所有此类的集合视图方法返回的集合的迭代器方法返回的迭代器都是快速失败的:如果在创建迭代器之后的任何时候对映射进行结构修改,除非通过迭代器自己的remove方法,迭代器将抛出ConcurrentModificationException.因此,在并发修改的情况下,迭代器快速而干净地失败,而不是在未来的未确定时间冒任意,非确定性行为的风险.

林先生,提前谢谢

java linkedhashmap

0
推荐指数
1
解决办法
512
查看次数

如何使用java中LinkedHashMap中特定键的旧值替换值

我有一个旧值存储在map {key,value}中.我希望通过对其进行计算来更新现有值,例如在整数时将值增加10; 地图{键,值+ 10}

java linkedhashmap key-value-store

0
推荐指数
1
解决办法
321
查看次数

如何在 Java 中的地图中插入三重项?

因此,主要思想是创建例如:

Map<Map<String, String>, Integer> map = new LinkedHashMap<>();
Run Code Online (Sandbox Code Playgroud)

我需要在这张地图中放置例如项目:

{{France=Paris}=12, {Spain=Madrid}=2, ... }
Run Code Online (Sandbox Code Playgroud)

如何制作这个?如何实现“放置”功能? map.put("France","Paris",2)不起作用。

java collections hashmap linkedhashmap data-structures

0
推荐指数
1
解决办法
366
查看次数

如何通过引用另一个 HashMap 对 HashMap 进行排序

HashMap在 Java 中有两个。

第一个包含一个键和它的值。其中 second 包含该键的评估索引(顺序)。我想通过参考第二张地图对第一张地图进行排序。

第一个哈希映射 <key, value>

<"C","ccc">
<"D","ddd">
<"A","aaa">
<"B","bbb">
Run Code Online (Sandbox Code Playgroud)

第二个哈希映射 <key, value>

<"0","A">
<"1","B">
<"2","C">
<"3","D">
Run Code Online (Sandbox Code Playgroud)

结果应该是

<"A","aaa">
<"B","bbb">
<"C","ccc">
<"D","ddd">
Run Code Online (Sandbox Code Playgroud)

循环这两个映射并检查比较键很简单但效率不高。任何有效的想法?

java collections hashmap linkedhashmap

0
推荐指数
1
解决办法
123
查看次数

如何随机获取 LinkedHashMap 的键和值?

我正在尝试编写一个小词汇测试。LinkedHashMapvocabulary由词汇表组成。他们的key是一个法语单词,value是一个英语单词。我已经有一个 GUI,但我正在努力从词汇表中随机获取一个法语单词及其位置,以确定输入的单词是否正确。我试图用 ArrayList 来做,但后来我只得到了值,但我还需要密钥来显示该人必须翻译的单词。任何帮助表示赞赏。

LinkedHashMap<String, String> vocabulary = new LinkedHashMap<String, String>();

    Random random = new Random();
    int number = random.nextInt(ReadExcelFile.lastRowNumber);
    String value = (new ArrayList<String>(vocabulary.values())).get(number);

Run Code Online (Sandbox Code Playgroud)

java arraylist hashmap linkedhashmap

0
推荐指数
1
解决办法
59
查看次数

通过指定 LinkedHashMaps 并使用通用值作为参数来创建方法

假设我有一辆超级汽车,我的子类别是本田丰田雷克萨斯

我有 3 个 LinkedHashMap,使用每个子类作为值:

LinkedHashMap<String, Honda> hondaModels = new LinkedHashMap<String, Honda>();
LinkedHashMap<String, Toyota> toyotaModels = new LinkedHashMap<String, Toyota>();
LinkedHashMap<String, Lexus> lexusModels = new LinkedHashMap<String, Lexus>();
Run Code Online (Sandbox Code Playgroud)

我想要实现的是这样的:

public <T> boolean checkModel(LinkedHashMap<String, <T>> lineup, String model) {
    if (lineup.containsKey(model)) {
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我是否可以通过指定 LinkedHashMap 并使用通用值作为参数来创建方法,这样我就不必为所有 3 个 LinkedHashMap 重复相同的方法?

java linkedhashmap generic-method

0
推荐指数
1
解决办法
113
查看次数

按索引访问 LinkedHashMap 与性能

我想讨论一个特定集合 LinkedHashMap 的一些性能,以满足特定要求,以及 Java 8 或 9 的新特性如何对此有所帮助。

假设我有以下 LinkedHashMap:

private Map<Product, Item> items = new LinkedHashMap<>();
Run Code Online (Sandbox Code Playgroud)

使用默认构造函数意味着此 Map 在迭代时遵循插入顺序。

--EDITED-- 在这里要清楚,我知道 Maps 不是通过索引访问的正确数据结构,碰巧这个类实际上需要两个删除方法,一个是 Product,正确的方法,这是关键,另一个按位置或索引,这并不常见,所以这是我对性能的关注。顺便说一句,这不是我的要求。

我必须通过 index实现removeItem()方法。对于那些不知道的人,LinkedHashMap没有某种map.get(index);可用的方法。

所以我将列出几个解决方案:

解决方案1:

public boolean removeItem(int position) {
    List<Product> orderedList = new ArrayList<>(items.keySet());
    Product key = orderedList.get(position);

    return items.remove(key) != null;
}
Run Code Online (Sandbox Code Playgroud)

解决方案2:

public boolean removeItem(int position) {
    int counter = 0;
    Product key = null; //assuming there's no null keys

    for(Map.Entry<Product, Item> entry: items.entrySet() …
Run Code Online (Sandbox Code Playgroud)

java performance linkedhashmap java-8 java-9

-1
推荐指数
1
解决办法
660
查看次数

为什么LinkedHashMap无法在TreeMap中对HashMap进行排序?

我正在尝试HashMap使用LinkedHashMap和排序输出TreeMap.

当我用它TreeMap来理清HashMap它就像一个魅力.

        Map<Integer, String> hMap = new HashMap<Integer, String>();

        hMap.put(40, "d");
        hMap.put(10, "a");
        hMap.put(30, "c");
        hMap.put(20, "b");

        System.out.println(" ");
        System.out.println("before");

        for (Map.Entry m1 : hMap.entrySet()) {
            System.out.print(m1.getKey() + " " + m1.getValue() + "    ");
        }

        System.out.println("after");

        Map<Integer, String> hTree = new TreeMap<Integer, String>(hMap);
        for (Map.Entry m2 : hTree.entrySet()) {
            System.out.print(m2.getKey() + " " + m2.getValue() + "    ");
        }
Run Code Online (Sandbox Code Playgroud)

输出:
before 20 b 40 d 10 a 30 c …

java collections hashmap treemap linkedhashmap

-1
推荐指数
3
解决办法
171
查看次数

LinkedHashMap中的NullPointerException

我在创造一个游戏.当我正在阅读LinkedHashMap时,它给了我一个NPE.

我这样填写LinkedHashMap hm:

for (String s : line.split("")) {
    if (s.contains("*")) {
        hm.put(new Coordinates(xa-32, ya), "gray");
    } else if (s.contains("#")) {
        hm.put(new Coordinates(xa-32, ya), "black");
    }
    // other code...
}
Run Code Online (Sandbox Code Playgroud)

后来我尝试从这样的HashMap中获取颜色,并得到一个NPE:

if ((keyCode == KeyEvent.VK_LEFT || keyCode == KeyEvent.VK_A)
    && isPainted && hm.get(new Coordinates(x - 32, y)).equalsIgnoreCase("gray")) {
    x -= 32;
}
Run Code Online (Sandbox Code Playgroud)

完整代码:

java nullpointerexception linkedhashmap

-10
推荐指数
2
解决办法
1664
查看次数