Guava中这些Map的优秀操作,让我的代码其会了50%
2025-09-04 12:19
查阅转换成格式后的Map中的的具体内容,分别按照行和列顺利进行了核心内容:
{Hydra={Jan=20, Feb=28}, Trunks={Jan=28, Feb=16}}{Jan={Hydra=20, Trunks=28}, Feb={Hydra=28, Trunks=16}}BiMap - 双向Map在都可Map中的,如果要就让根据value查找完全一致的key,没简单的办法,无论是可用for循环还是算法器,都需加载整个Map。以循环keySet的方式为例:
public List findKey(Map map, String val){ List keys=new ArrayList<>(); for (String key : map.keySet()) { if (map.get(key).equals(val)) keys.add(key); } return keys;}而guava中的的BiMap提供了一种key和value双向相似性的资料结构,必先看一个比较简单的都是:
HashBiMap biMap = HashBiMap.create();biMap.put("Hydra","Programmer");biMap.put("Tony","IronMan");biMap.put("Thanos","Titan");//可用key提供valueSystem.out.println(biMap.get("Tony"));BiMap inverse = biMap.inverse();//可用value提供keySystem.out.println(inverse.get("Titan"));继续执行结果,:
IronManThanos看起来很比较简单是不是?但是可用中的还有几个坑内得避祸一下,比如说一个个推敲。
1、而但会后配置的影响此前面我们用inverse作法而但会了原来BiMap的数组拓扑,但是这个而但会后的BiMap并不是一个在此之后都可,它付诸了一种贴图的相似性,所以对而但会后的BiMap继续执行的所有配置但会功用于原必先的BiMap上。
HashBiMap biMap = HashBiMap.create();biMap.put("Hydra","Programmer");biMap.put("Tony","IronMan");biMap.put("Thanos","Titan");BiMap inverse = biMap.inverse();inverse.put("IronMan","Stark");System.out.println(biMap);对而但会后的BiMap中的的具体内容顺利进行了改动后,日后看一下原必先BiMap中的的具体内容:
{Hydra=Programmer, Thanos=Titan, Stark=IronMan}可以看得见,原必先值为IronMan时完全一致的基团是Tony,虽然没有人直接改动,但是如今基团变成了Stark。
2、value不可重复使用BiMap的底层继承了Map,我们知道在Map中的key是不无需重复使用的,而双向的BiMap中的key和value可以认为处于等价地位,因此在这个基础上加了限制,value也是不无需重复使用的。看一下比如说的文档:
HashBiMap biMap = HashBiMap.create();biMap.put("Tony","IronMan");biMap.put("Stark","IronMan");这样文档很难正常结束,但会逃逸一个IllegalArgumentException异常:
如果你非就让把在此之后key拓扑到已有的value上,那么也可以可用forcePut作法强迫附加掉改以的key:
HashBiMap biMap = HashBiMap.create();biMap.put("Tony","IronMan");biMap.forcePut("Stark","IronMan");由此可知储一下附加后的BiMap:
{Stark=IronMan}顺带多说一句,由于BiMap的value是不无需重复使用的,因此它的values作法赶回的是没有人重复使用的Set,而不是都可Collection:
Set values = biMap.values();Multimap - 多值Mapjava中的的Map维护的是数组各别的彼此间,如果要将一个基团拓扑到多个值上,那么就才会把值的具体内容另设为交集表现形式,比较简单付诸如下:
Mapguava中的的Multimap提供了将一个基团拓扑到多个值的表现形式,可用上来无需概念繁复的内层交集,可以像可用都可的Map一样可用它,概念及填入资料如下:
Multimap multimap = ArrayListMultimap.create();multimap.put("day",1);multimap.put("day",2);multimap.put("day",8);multimap.put("month",3);由此可知储这个Multimap的具体内容,可以一般化的看得见每个key完全一致的都是一个交集:
{month=[3], day=[1, 2, 8]}1、提供值的交集在此前面的配置中的,始创的都可Multimap的get(key)作法将赶回一个Collection并不一定的交集:
Collection day = multimap.get("day");如果在始创时指定为ArrayListMultimap并不一定,那么get作法将赶回一个List:
ArrayListMultimap multimap = ArrayListMultimap.create();List day = multimap.get("day");所谓,你还可以始创HashMultimap、TreeMultimap等并不一定的Multimap。
Multimap的get作法但会赶回一个非null的交集,但是这个交集的具体内容可能是空,看一下比如说的都是:
List day = multimap.get("day");List year = multimap.get("year");System.out.println(day);System.out.println(year);由此可知储结果:
[1, 2, 8][]2、配置get后的交集和BiMap的可用类似,可用get作法赶回的交集也不是一个独立国家的都可,可以了解为交集贴图的相似性,对这个新交集的配置仍然但会功用于更早的Multimap上,看一下比如说的都是:
ArrayListMultimap multimap = ArrayListMultimap.create();multimap.put("day",1);multimap.put("day",2);multimap.put("day",8);multimap.put("month",3);List day = multimap.get("day");List month = multimap.get("month");day.remove(0);//这个0是下标month.add(12);System.out.println(multimap);查阅改动后的结果:
{month=[3, 12], day=[2, 8]}3、转换成为Map可用asMap作法,可以将Multimap转换成为Map的表现形式,除此以外这个Map也可以看好好一个相似性的贴图,在这个Map上的配置但会功用于更早的Multimap。
Map继续执行结果:
month : [3]day : [1, 2, 8]{month=[3], day=[1, 2, 8, 20]}4、为数问题Multimap中的的为数在可用中的也有些非常容易混淆的之外,必先看比如说的都是:
System.out.println(multimap.size());System.out.println(multimap.entries().size());for (Map.Entry entry : multimap.entries()) { System.out.println(entry.getKey()+","+entry.getValue());}由此可知储结果:
44month,3day,1day,2day,8这是因为size()作法赶回的是所有key到单个value的拓扑,因此结果为4,entries()作法所谓,赶回的是key和单个value的数组对交集。但是它的keySet中的保由此可知的是多种不同的key的位数,例如比如说这行文档由此可知储的结果就但会是2。
System.out.println(multimap.keySet().size());日后就让将它转换成为Map后,为数则但会直接影响:
Set文档列车运行结果是2,因为它受益的是key到Collection的拓扑彼此间。
RangeMap - 范围Map必先看一个都是,假另设我们要根据分数对考试成绩顺利进行归纳,那么文档中的就但会消失这样面孔的if-else:
public static String getRank(int score){ if (0<=score && score<60) return "fail"; else if (60<=score && score<=90) return "satisfactory"; else if (90在此前面的文档中的,必先后始创了[0,60)的左闭右边数轴、[60,90]的f、(90,100]的左开右边f,并分别拓扑到某个值上。列车运行结果由此可知储:
failsatisfactorysatisfactoryexcellent当然我们也可以移除一段空间,比如说的文档移除了[70,80]这一f后,日后次继续执行get时赶回结果为null:
rangeMap.remove(Range.closed(70,80));System.out.println(rangeMap.get(75));ClassToInstanceMap - 实例MapClassToInstanceMap是一个比较一般来说的Map,它的基团是Class,而值是这个Class完全一致的实例都可。必先看一个比较简单可用的都是,可用putInstance作法由此可知入都可:
ClassToInstanceMap instanceMap = MutableClassToInstanceMap.create();User user=new User("Hydra",18);Dept dept=new Dept("develop",200);instanceMap.putInstance(User.class,user);instanceMap.putInstance(Dept.class,dept);可用getInstance作法装进都可:
User user1 = instanceMap.getInstance(User.class);System.out.println(user==user1);列车运行结果由此可知储了true,说明了装进的或许是我们之此前始创并填入的那个都可。
大家则但会确实,如果只是由此可知都可的话,像比如说这样用都可的Map也可以付诸:
Map map=new HashMap<>();User user=new User("Hydra",18);Dept dept=new Dept("develop",200);map.put(User.class,user);map.put(Dept.class,dept);那么,可用ClassToInstanceMap这种方式有什么好处呢?
首必先,这里最明显的就是在装进都可时不用了繁复的强迫并不一定转换成,避祸免了手动顺利进行并不一定转换成的偏差。其次,我们可以看一下ClassToInstanceMap接口的概念,它是区别于泛型的:
public interface ClassToInstanceMap extends Map, B>{...}这个泛型除此以外可以起着对并不一定顺利进行强制执行的功用,value要完全符合key所完全一致的并不一定,日后就让比如说的都是:
ClassToInstanceMap instanceMap = MutableClassToInstanceMap.create();HashMap hashMap = new HashMap<>();TreeMap treeMap = new TreeMap<>();ArrayList list = new ArrayList<>();instanceMap.putInstance(HashMap.class,hashMap);instanceMap.putInstance(TreeMap.class,treeMap);这样是可以正常继续执行的,因为HashMap和TreeMap都集成了Map父类,但是如果就让填入其他并不一定,就但会编译报错:
所以,如果你就让缓由此可知都可,又不就让好好繁复的并不一定数据流,那么可用方便的ClassToInstanceMap就可以了。
总结本文介绍了guava中的5种对Map的扩展资料结构,它们提供了非常比较简单的新功能,能很大程度的重构我们的文档。但是同时可用中的也有不少需避祸开的坑内,例如改动相似性的贴图但会对更早资料致使影响等等,具体的可用中的大家还需谨慎一些。
。太原性病专科承德皮肤病专科医院排名
上海医院眼科
-
一个被并称,一个被怒骂,《人世间》郑娟和周蓉,其实是一类人
人们实有点儿不快。 实际上,如果秉昆不在陪伴,郑娟自己深知任何不幸之公事,才会是 毅力而有主见的;秉昆一在陪伴,她往往沉重得一塌糊涂。 从没有读多少书的郑娟心中,她心中从没有像周
-
和这三种人私交:养生、养人、养心
;也与靠谱的人在三人,看清自己,神仙自己,扭曲自己。 能与靠谱的人在三人,才是一生中的的出乎意料和有求必应。 ▽ 汉代·刘向在《
- 09-12再熬3天,3生肖“得罪不起”,11月到12月无债一身轻
- 09-12费聚:我为朱家至亲,忠心耿耿,怎么会谋反?
- 09-12明天开始到11月底 好消息纷至沓来,这三个生肖紫气当头一路发到过年
- 09-12这是最好的“养胃羹”,家人喝了脾胃好,比小米羹更养人
- 09-12算命看你最适合的职场发展方向
- 09-12投资者提问:董秘你好 ,请问贵司是否是具备数字虚拟人技术以及相关应用 ??
- 09-12财运下跌,获得成功,咸鱼翻身,大展所长的4大生肖
- 09-12投资者提问:你好,请问贵司重组有没有不甘心的可能性?
- 09-123人午餐粗粮细做,南瓜发糕真暄软,酸汤肥牛和鸡翅烤串吃美了
- 09-12发财女人的面相长什么样?