我有一个treemap,我想往里面put值,当key存在时,value加一,当key不存在时,value为0
时间: 2024-09-28 08:12:42 浏览: 28
Android 对Map按key和value分别排序的实例
在Java的TreeMap中,由于其键是有序的,并且不允许有重复的键,你可以创建一个新的Value对象,该对象包含一个计数值(可以是Integer、AtomicInteger等),然后在put操作中检查键是否存在。如果键存在,更新计数值;如果不存在,则将新的Key-Value对添加到map中,其中Value为0。
这是一个示例:
```java
import java.util.concurrent.atomic.AtomicInteger;
class IncrementingValue {
private AtomicInteger count = new AtomicInteger(0);
public AtomicInteger getCount() {
return count;
}
public void incrementIfAbsent() {
if (!count.getAndIncrement() > 0) { // 使用原子操作避免并发问题
yourTreemap.put(key, this);
}
}
}
// 使用方法
IncrementingValue value = new IncrementingValue();
yourTreemap.computeIfAbsent(key, k -> value); // 当key不存在时,value置为0并放入map
value.incrementIfAbsent(); // 当key已存在时,value加一
```
在这个例子中,`computeIfAbsent(key, supplier)`方法会在键`key`不存在时,应用给定的`supplier`函数(这里是构造一个IncrementingValue实例),并将其放入map。如果键已经存在,它将直接使用现有的值。
阅读全文