【问题标题】:How to use HashMap as LinkedHashSet如何使用 HashMap 作为 LinkedHashSet
【发布时间】:2017-04-18 06:07:30
【问题描述】:

当我运行这个程序时:-

import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;

public class try1 {

    public static void main(String args[]) {

        Map<String, Object> props = new HashMap<String, Object>();
        props.putIfAbsent("videos", new LinkedHashSet<String>());
        System.out.println(LinkedHashSet<String>(props.get("videos")).add("video_url");

    }
}

我得到 3 个错误:-

try1.java:14: error: cannot find symbol
        System.out.println(LinkedHashSet<String>(props.get("videos")).add("yoyo"));//.add("video_url");
                           ^
  symbol:   variable LinkedHashSet
  location: class try1
try1.java:14: error: cannot find symbol
        System.out.println(LinkedHashSet<String>(props.get("videos")).add("yoyo"));//.add("video_url");
                                         ^
  symbol:   variable String
  location: class try1
try1.java:14: error: cannot find symbol
        System.out.println(LinkedHashSet<String>(props.get("videos")).add("yoyo"));//.add("video_url");
                                                                     ^
      symbol:   method add(String)
      location: class Object
    3 errors

我正在尝试将 HashMap 值用作 LinkedHashSet,但出现这些错误。我该怎么办?

【问题讨论】:

  • 1 - 如果您只想将LinkedHashSet 放入您的Map,您应该将Object 更改为Set2 - 你的System.out.... 行没有意义(你调用add 的返回值是无效的,你尝试实例化一个LinkedHashSet 而没有new),你想在这里做什么?
  • LinkedHashSet&lt;String&gt;(props.get("videos")).add("yoyo") 有一个基本语法错误,但不清楚您的意图。
  • @Dorian 在某些地方我需要 LinkedHashSet 而在某些地方我必须使用 String
  • @Dorian 有个错误我(我觉得很傻)
  • @VibhorVerma 我认为更容易访问(无需检查类型和演员表),可能更难更改值(props.put("myKey", new LinkedHashSet&lt;String&gt;(Arrays.asList("myValue")))。如果你想增加价值,更容易:(我想 myKey 存在于地图中:props.get("myKey").add("valueToAdd")

标签: java hashmap linkedhashset


【解决方案1】:

我猜你想使用 java.util.LinkedList 作为 Map 的值。

Map<String, List<String>> props = new HashMap<>();
props.putIfAbsent("videos", new LinkedList<String>());
props.get("videos").add("video_url");
System.out.println(props);

但是,如果您想使用与 put order 相同的 order 迭代的 map。

Map<String, String> props = new LinkedHashMap<>();
props.putIfAbsent("videos", "video_url");
System.out.println(props);

【讨论】:

  • 你是对的,但我需要通过添加更多 video_url 来更新它,并且在某些地方我需要将 HashMap 值作为字符串,所以作为对象的值看起来不错
  • @VibhorVerma 可以获取List的第一个元素得到String的值(props.get("key").stream().first().orElse("no value in list");),比存储Object好很多,有时Set,有时@ 987654328@ 然后检查类型并转换为它。
  • @Dorian,谢谢你,这提供了一个方法,我该如何解决这个问题:)
  • @liuzhengyang ,
【解决方案2】:

你的语法有错误,首先你需要将对象转换为 LinkedHashSet,然后添加一个字符串

   System.out.println( ((LinkedHashSet<String>)(props.get("videos")) ).add("video_url") );

【讨论】:

    【解决方案3】:

    正确的代码如下:

    public static void main(String[] args) {
            Map<String, Object> props = new HashMap<String, Object>();
            props.putIfAbsent("videos", new LinkedHashSet<String>());
            System.out.println(((LinkedHashSet)(props.get("videos"))).add("video_url"));
        }
    

    【讨论】:

    • 这并没有解决 OP 代码中的基本语法错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2013-11-25
    • 2011-06-06
    • 2014-11-17
    • 2017-07-06
    • 2015-05-11
    相关资源
    最近更新 更多