Map的多种结构

Map的多种结构

特殊Map

  • CaseInsensitiveMap 忽略大小写的Map,对KEY忽略大小写,get(“Value”)和get(“value”)获得的值相同,put进入的值也会被覆盖
  • CaseInsensitiveLinkedMap 忽略大小写的LinkedHashMap,对KEY忽略大小写,get(“Value”)和get(“value”)获得的值相同,put进入的值也会被覆盖
  • MapBuilder Map创建器,可以链式创建Map
  • MapProxy Map代理类,通过代理包装Map,提供一系列的getXXX方法

双向查找Map-BiMap

BiMap要求key和value都不能重复(非强制要求),如果key重复了,后加入的键值对会覆盖之前的键值对,如果value重复了,则会按照不确定的顺序覆盖key,这完全取决于map实现。比如HashMap无序(按照hash顺序),则谁覆盖谁和hash算法有关;如果是LinkedHashMap,则有序,是后加入的覆盖先加入的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
BiMap<String, Integer> biMap = new BiMap<>(new HashMap<>());
biMap.put("aaa", 111);
biMap.put("bbb", 222);

// 111
biMap.get("aaa");
// 222
biMap.get("bbb");

// aaa
biMap.getKey(111);
// bbb
biMap.getKey(222);

可重复键值Map-TableMap

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        TableMap<String, Integer> tableMap = new TableMap<>(6);
tableMap.put("aaa", 111);
tableMap.put("bbb", 222);
tableMap.put("bbb", 444);

// 111
tableMap.get("aaa");
// 222
System.out.println(tableMap.get("bbb"));
System.out.println(tableMap.size());

// aaa
tableMap.getKey(111);
// bbb
System.out.println(tableMap.getKey(444));

// [111]
tableMap.getValues("aaa");

//[aaa]
tableMap.getKeys(111);