Я столкнулся с парой структур данных, которые я нашел полезными, и я решил поделиться ими.

HashMapList — это, по сути, HashMap‹Key, List‹Value››, который полезен для кэширования справочных данных или классификации данных каким-либо образом. Ниже приведена реализация

импорт java.util.ArrayList;
импорт java.util.HashMap;
импорт java.util.List;
импорт java.util.Map;
импорт java.util.Map. .Entry;
import java.util.Set;

/**
* Класс HashMapList.
*
* @param ‹K› тип ключа
* @param ‹V› тип значения
*/
public class HashMapList‹K,V› {

/** Карта. */
private Map‹K,List‹V›› map;

/**
* Создает новый список хеш-карт.
*/
public HashMapList(){
this.map = new HashMap‹›();
}

/**
* Put.
*< br /> * @param k the k
* @param v the v
*/
public void put(K k, V v){
if( map.get(k) == null){
map.put(k, new ArrayList‹›());
}
map.get(k).add(v);
}

/**
* Поставить все.
*
* @param k
* @param vList the v list
*/
public void putAll(K k, List‹V› vList){
if(map.get(k) == null){
map .put(k, новый ArrayList‹›());
}
map.get(k).addAll(vList);
}

/**
* Получает список.
*
* @param k
* @return список
*/
public List‹ V› getList(K k){
return map.get(k);
}

/**
* Проверяет, не пусто ли.
*
* @return true, если пусто */
public boolean isEmpty(){
return map.size()==0;
}

/**
* Получить Entry Set
*
* @return
*/
public Set‹Entry‹K, List‹V››› entrySet(){
return map .entrySet();
}
}

MapCount — это HashMap, который хранит счетчик BigInteger, указывающий, сколько раз значение было добавлено для определенного ключа. Ниже приведена реализация.

импортировать java.math.BigInteger;

импортировать java.util.HashMap;

импортировать java.util.List;

импортировать java.util.Map;

импортировать java.util.Map.Entry;

импортировать java.util.Set;

/**

*

*

*/

открытый класс MapCount {

частная карта‹String, BigInteger› map = new HashMap‹›();

частный длинный счет = 1 л;

/**

*

* Ключ @param

* Значение @параметра

*/

public void put (строковый ключ, значение BigInteger) {

если (карта. содержит ключ (ключ)) {

map.put(ключ, map.get(ключ).добавить(значение));

}еще{

map.put(ключ, значение);

}

количество++;

}

/**

*

* Ключ @param

*/

public void put (строковый ключ) {

Значение BigInteger = BigInteger.ONE;

если (карта. содержит ключ (ключ)) {

map.put(ключ, map.get(ключ).добавить(значение));

}еще{

map.put(ключ, значение);

}

количество++;

}

/**

*

* @параметрический список ключей

*/

public void putAll(List‹String› keyList){

Значение BigInteger = BigInteger.ONE;

для (строковый ключ: список ключей) {

если (карта. содержит ключ (ключ)) {

map.put(ключ, map.get(ключ).добавить(значение));

}еще{

map.put(ключ, значение);

}

количество++;

}

}

/**

*

* Ключ @param

* @возвращение

*/

public BigInteger get (строковый ключ) {

BigInteger foo = map.get(key);

если (foo == ноль) {

foo = BigInteger.ZERO;

}

вернуть фу;

}

/**

*

* @возвращение

*/

public Set‹Entry‹String, BigInteger›› entrySet(){

вернуть карту.entrySet();

}

/**

*

* @возвращение

*/

общественный длинный getCount () {

количество возвратов;

}

}

MapAmount — это HashMap, который хранит сумму BigDecimals для каждого ключа.

импорт java.math.BigDecimal;
импорт java.math.BigInteger;
импорт java.util.HashMap;
импорт java.util.Map;
импорт java.util.Map. .Entry;
import java.util.Set;
/**
*
*
*
*/
public class MapAmount {
private Map‹String, BigDecimal› map = new HashMap‹›();
private MapCount mapCount = new MapCount();
/**
*
* @param key
* @param value
*/
public void put(String key, BigDecimal value){
if(map.containsKey(key)){
map.put(key, map.get(key).add(value));
}else{
map.put(key, value);
}
mapCount.put(key, BigInteger.ONE);
}

/**
*
* @param key
* @return
*/
public BigDecimal get(String key){
BigDecimal foo = map.get(key);
if(foo == null){
foo = BigDecimal.ZERO;
}
return foo;
}

/**
*
* @return
*/
public Set‹Entry‹String, BigDecimal›› entrySet(){
return map.entrySet();< br /> }

public Set‹String› keySet(){
return map.keySet();
}

/**
*
* @return
*/
public MapCount getCount(){
return mapCount;
}
}