我想要一个具有整数键和对象值的 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/