Java进阶之旅第五天
不可变集合
应用场景
1.如果某个数据不能被修改,把它拷贝到不可变集合中是个很好的实践 2.当集合对象被不可信的库调用时,不可变形式是安全的 3.不可变集合不能修改,只能进行查询
获取方式
在List,Set,Map接口中,都存在静态的of方法,可以获取一个不可变的集合 方法: List.of(),Set.of(),Map.of()
举例代码: List<String> list = List.of("1","2");
细节
1.当我们要获取一个不可变的Set集合时,里面的参数一定要保证唯一性.(集合的元素具有唯一性) 2.Map集合中键也不能重复 3.Map.of()
方法最多只能传递10对键值对,它的底层没有可变参数的方法(原因: 一个方法中不能存在多个可变参数) 4.当我们想要传递多个键值对进入不可变Map集合中时,我们可以使用Map.ofEntries(Entry<? extends K, ? extends V>... entries)
,它的底层就是将一个键值对看成整体,然后改成可变参数 5.由于Map.ofEntries()
方法使用不方便,所以一般常用Map.copyOf()
方法的参数是一个Map集合,返回值就是不可变集合
代码演示
System . out. println ( "---list.of---" ) ; List < String > list = List . of ( "1" , "2" , "3" ) ; for ( String s : list) { System . out. println ( s) ; } System . out. println ( "---set.of---" ) ; Set < String > set = Set . of ( "1" , "2" , "3" ) ; for ( String s : set) { System . out. println ( s) ; } System . out. println ( "---Map.of(键值对有限)---" ) ; Map < String , String > map = Map . of ( "小明" , "13" , "小红" , "15" ) ; Set < Map. Entry < String , String > > entries = map. entrySet ( ) ; for ( Map. Entry < String , String > entry : entries) { System . out. println ( entry. getKey ( ) + " = " + entry. getValue ( ) ) ; } System . out. println ( "---Map.of(键值对个数会变化)---" ) ; HashMap < String , String > hm = new HashMap < > ( ) ; hm. put ( "小明" , "13" ) ; hm. put ( "小红" , "15" ) ; hm. put ( "小黑" , "15" ) ; System . out. println ( "---简单---" ) ; Map < String , String > map1 = Map . copyOf ( hm) ; Set < Map. Entry < String , String > > entries1 = map1. entrySet ( ) ; for ( Map. Entry < String , String > entry : entries1) { System . out. println ( entry. getKey ( ) + " = " + entry. getValue ( ) ) ; } System . out. println ( "---复杂---" ) ; Map < String , String > entries2 = Map . ofEntries ( hm. entrySet ( ) . toArray ( new Map. Entry [ 0 ] ) ) ; Set < Map. Entry < String , String > > entries3 = entries2. entrySet ( ) ; for ( Map. Entry < String , String > entry : entries3) { System . out. println ( entry. getKey ( ) + " = " + entry. getValue ( ) ) ; }
结果
---list.of---
1
2
3
---set.of---
1
2
3
---Map.of(键值对有限)---
小明 = 13
小红 = 15
---Map.of(键值对个数会变化)---
---简单---
小红 = 15
小黑 = 15
小明 = 13
---复杂---
小红 = 15
小黑 = 15
小明 = 13