java:如何初始化整数键和对象值的ConcurrentHashMap

标签 java

我想要一个具有整数键和对象值的 ConcurrentHashMap(映射的一些值是整数,另一个是字符串)。 这是初始化和使用我的表的正确方法吗?

ConcurrentHashMap table=new ConcurrentHashMap<Integer, Comparable>();
        table.put(new Integer(1), new String("nodata"));
        table.put(new Integer(2), new Integer(23));

最佳答案

几点

  • 您不需要自动装箱 int 值并且包装 String 文字是没有意义的。
  • 您需要保留左侧的通用类型,但最好使用接口(interface)。
  • 您只能使用 Comparable 来比较对象。但是,您不能一般地比较不同类型的对象,因此这比有用更容易混淆。

.

Map<Integer, Object> table = new ConcurrentHashMap<>();
table.put(1, "nodata");
table.put(2, 23);

如果您需要 ConcurrentMap 提供的其他方法,您可能需要以下方法。

ConcurrentMap<Integer, Object> table = new ConcurrentHashMap<>();

这似乎是对象拒绝的情况。使用对象可能是更好的选择。

class MyData {
    private String text;
    private int number;

    MyData(String text, int number) {
        this.text = text;
        this.number = number;
    }

    public synchronized String getText() {
        return text;
    }

    public synchronized void setText(String text) {
        this.text = text;
    }

    public synchronized int getNumber() {
        return number;
    }

    public synchronized void setNumber(int number) {
        this.number = number;
    }
}

MyData data = new MyData("nodata", 23);

对于相同的并发版本。

class MyData {
    private final AtomicReference<String> text;
    private final AtomicInteger number;

    MyData(String text, int number) {
        this.text = new AtomicReference<String>(text);
        this.number = new AtomicInteger(number);
    }

    public String getText() {
        return text.get();
    }

    public void setText(String text) {
        this.text.set(text);
    }

    public int getNumber() {
        return number.get();
    }

    public void setNumber(int number) {
        this.number.set(number);
    }
}

关于java:如何初始化整数键和对象值的ConcurrentHashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12349188/

相关文章:

java - 按钮 onClick 调用 Java 方法直到出现特定结果

java - 如何使用字符串流扩展(解析)路径

java - 运行 Java 字节码

java - 在 IntelliJ 中找不到类文件

java - 在 A[0 ... n - 2] 上重复,将结果添加到 A[n - 1] ,然后返回总和

带有索引参数的java迭代器

java - 为什么 Java 中的 `(T)this` 不能在 Scala 中工作?

java - Jersey:无法从 String 中反序列化 ArrayList 的实例

java - 无法从 List<Node> 转换为 List<Element>

java - RayCastingSupport.intersectRayWithTerrain 始终返回 null