Java哈希集合

fre*_*ara 0 java collections

Java中有一个名为HashSet的类

例如,我将向HashSet添加以下int形值,

[输入]

1,2,3,4,5,6,1,2,3,1, 
Run Code Online (Sandbox Code Playgroud)

[哈希结构]

1,1,1
2,2
3,3
4
5
6
Run Code Online (Sandbox Code Playgroud)

是否有收藏成为这样的结构?

bdo*_*lan 7

如果我理解你的问题,那么你正在寻找所谓的"Multiset".Java没有内置的Multisets,但你可以用a构建你想要的东西HashMap<Integer, HashSet<Integer>>.此外,还有许多第三方库,例如Google Collections Library.

  • 关于他是否真的存储整数,或者他是否存储了一些更复杂的对象,并且只使用整数作为例子,目前还不清楚... (2认同)

cle*_*tus 6

不,但是很容易包装HashMap.

public class Tally<T> {
  private final Map<T, Integer> count = new HashMap<T, Integer>();

  public void increment(T t) {
    Integer i = count.get(t);
    count.put(t, i == null ? 1 : i+1);
  }

  public void decrement(T t) {
    Integer i = count.get(t);
    if (i == null) {
      throw new IllegalArgumentException("not present");
    }
    if (i == 1) {
      count.remove(t);
    } else {
      count.put(t, i-1);
    }
  }

  public int get(T t) {
    Integer i = count.get(t);
    return i == null ? 0 : i;
  }
}
Run Code Online (Sandbox Code Playgroud)