Inicio rápido de HashMultimap

Inicio rápido de HashMultimap

relación de herencia de clases

imagen-20230404101720634

El constructor es privado y no puede ser creado directamente por el nuevo método. La clase proporciona el método de creación para crear objetos.

//构造器
private HashMultimap() {
    
    
    super(new HashMap());
}

private HashMultimap(int expectedKeys, int expectedValuesPerKey) {
    
    
    super(Maps.newHashMapWithExpectedSize(expectedKeys));
    Preconditions.checkArgument(expectedValuesPerKey >= 0);
    this.expectedValuesPerKey = expectedValuesPerKey;
}

private HashMultimap(Multimap<? extends K, ? extends V> multimap) {
    
    
    super(Maps.newHashMapWithExpectedSize(multimap.keySet().size()));
    this.putAll(multimap);
}

//创建对象方法
public static <K, V> HashMultimap<K, V> create() {
    
    
    return new HashMultimap();
}

public static <K, V> HashMultimap<K, V> create(int expectedKeys, int expectedValuesPerKey) {
    
    
    return new HashMultimap(expectedKeys, expectedValuesPerKey);
}

public static <K, V> HashMultimap<K, V> create(Multimap<? extends K, ? extends V> multimap) {
    
    
    return new HashMultimap(multimap);
}

crear demostración

// 创建一个默认的 HashMap<String, Set<Integer>>,容器的初始化容量与HashMap的默认值一样
HashMultimap<String, Integer> multimap = HashMultimap.create();

// 当我们知道容器的个数时,推荐使用下面这种方式, 
// HashMap 设置容量为8, 每个HashSet的容量初始化为16
HashMultimap<String, Integer> multimap2 = HashMultimap.create(8, 16);

// 另外一个就是基于MultMap来创建的case了
HashMultimap<String, Integer> multimap3 = HashMultimap.create(multimap);

añadir elemento

// 添加单个元素
multimap.put("key1", 110);

// 添加多个元素
multimap.putAll("key2", Arrays.asList(1,4,3,6,3,10,5,5,1,2));
multimap.putAll("key3", Arrays.asList(1,4,3,6,3,10));

La capa inferior se implementa con objetos HashMap<K,HashSet>, por lo que el valor de value se desduplicará automáticamente, como key2 arriba, y los elementos duplicados se eliminarán al generar el conjunto.

El resultado de la ejecución anterior:

//输出集合对象
System.out.println(multimap);
//输出每个key里不重复的元素,多个key中相互之间有相同元素也会输出
System.out.println(multimap.values());
{key2=[1, 2, 3, 4, 5, 6, 10], key3=[1, 10, 3, 4, 6]}
[1, 2, 3, 4, 5, 6, 10, 1, 10, 3, 4, 6]

eliminar elemento

// 移除skill对应的集合中,value=3的元素
multimap.remove("key1", 1);

// 移除key
multimap.removeAll("key2");

Al usar eliminar para eliminar, todos los elementos duplicados se eliminarán. Por ejemplo, si el valor de eliminación anterior es 1, el resultado después de la eliminación es:

{key1=[2, 3, 4, 5, 6, 10]}

Se eliminan todos los 1 en key1, y key2 y el valor correspondiente también se eliminan.

reemplazar elemento

Si queremos reemplazar el valor completo con una nueva colección, podemos usar replaceValue()

// 直接替换 key1 对应的 value 集合,新的值为 {100, 200, 300}
multimap.replaceValues("key1", Arrays.asList(111, 222, 333));

Resultado de salida:

{key1=[333, 222, 111]}

Obtener elementos y poligonal

obtener elemento

// 获取对应的value集合,当不存在时,返回空集合(不会返回 null)
Set<Object> set = multimap.get("key1");
Set<Object> set1 = multimap.get("key2");// key2上面已经删除
System.out.println(set);
System.out.println(set1);

La salida es:

[333, 222, 111]
[]

atravesar

Abra la clave2 eliminada anteriormente y use diferentes métodos para atravesar según las necesidades:

// Salida de todos los valores:

// 输出所有的 value
for (Object value : multimap.values()) {
    
    
	System.out.println(value);
}

Resultado de salida:

333
222
111
1
10
3
4
6

Salida del valor correspondiente a la clave:

//输出对应 key 的 value
for (Object value : multimap.get("key1")) {
    
    
	System.out.println(value);
}

Resultado de salida:

333
222
111

Muestra todas las claves y los valores correspondientes:

//输出所有 key 及对应的 value
for (Map.Entry<Object, Object> entry : multimap.entries()) {
    
    
	System.out.println(entry.getKey() + ":" + entry.getValue());
}

Resultado de salida:

key1:333
key1:222
key1:111
key2:1
key2:10
key2:3
key2:4
key2:6

salida todas las claves

multimap.putAll("key1", Arrays.asList(1, 4, 3, 6, 3, 10, 5, 5, 1, 2));
multimap.putAll("key2", Arrays.asList(1, 4, 3, 6, 3, 10));

Multiset<Object> keys = multimap.keys();
Set<Object> objects = multimap.keySet();

System.out.println(keys);
System.out.println(objects);

Resultado de salida:

[key1 x 7, key2 x 5]
[key1, key2]

El método keys() genera el número de valores clave y valores después de la deduplicación;

El método keySet() genera todos los valores clave.

salida todos los valores

multimap.putAll("key1", Arrays.asList(1, 4, 3, 6, 3, 10, 5, 5, 1, 2));
multimap.putAll("key2", Arrays.asList(1, 4, 3, 6, 3, 10));

Collection<Object> values1 = multimap.values();

System.out.println(values1);

Resultado de salida:

[1, 2, 3, 4, 5, 6, 10, 1, 10, 3, 4, 6]

La salida son los elementos únicos en cada clave, y se generarán los mismos elementos entre varias claves.

Supongo que te gusta

Origin blog.csdn.net/dedede001/article/details/129949752
Recomendado
Clasificación