当我在方法上查看java文档时
它很过载,所有的元素数量从1到10.
上面写着:
返回包含五个元素的不可修改列表。 有关详细信息,请参阅不可修改的列表。 类型参数:e-列表的元素类型参数: e1 -第一个元素e2 -第二个元素e3第三个元素e4第四个元素e5第五个元素
我只是一点都不明白,甚至可以找到一个方法来使用这个?
发布于 2019-03-09 03:35:48
List.of()方法是方便的静态帮助程序,可以在一个调用中创建一个固定大小的列表(而不是创建一个空列表,然后几次调用add )。这个调用返回的列表是不可修改的(不能添加或删除任何元素)。
作为一个例子,比较:
ArrayList<String> supportedLanguages = new ArrayList<>();
supportedLanguages.add("en-us");
supportedLanguages.add("en-gb");
supportedLanguages.add("de");至:
List<String> supportedLanguages = List.of("en-us", "en-gb", "de");碰巧有11个这样的重载,从零到十个元素(List.of()变成了一个空的不可修改的列表),更大的情况是使用带有签名@SafeVarargs static <E> List<E> of(E... elements)的瓦拉格重载来处理。
发布于 2019-03-09 03:53:03
三个接口List、Set和Map都获得了新的重载.of方法。
List< Integer > luckyNumbers = List.of( 7 , 11 , 42 ) ;
Set< DayOfWeek > weekend = Set.of( DayOfWeek.SATURDAY , DayOfWeek.SUNDAY ) ;
Map< DayOfWeek , Employee > dutyRoster =
Map.of(
DayOfWeek.MONDAY , alice ,
DayOfWeek.TUESDAY , bob ,
DayOfWeek.WEDNESDAY , alice ,
DayOfWeek.THURSDAY , carol ,
DayOfWeek.FRIDAY , carol
)
;便利性
能够在一行代码中声明和填充List、Set或Map非常方便。简洁,优雅,清楚地表达了程序员的意图。
不可修改
通常,这样短的对象集合被设计为只读的.也就是说,使用集合的程序员不能添加、删除或替换任何收集的对象。
请注意,收集到的对象中的内容可能是也可能不是易变。这不在收藏品的职责范围之内。
Collections实用工具类提供了使集合不可修改的方法,但是您必须想方设法使用此特性。这样做意味着有更多的代码行。新的.of方法更简单。
优化
注意,返回接口的对象而不是类。例如,List而不是ArrayList,Set而不是HashSet,Map而不是HashMap。您不知道返回的对象正在使用什么具体类。你也不在乎。
这意味着Java团队可以自由地优化具体的实现,将代码从一个版本更改为另一个版本。他们甚至可以选择在运行时使用不同的实现,具体取决于所收集对象的数量或类型。
例如,如果您收集的对象是enum类型的,那么可以在场景后面使用高度优化的EnumSet来满足您对Set.of的请求。同样,EnumMap for Map.of。请参阅此答案顶部的Set和Map代码,作为收集enum对象的示例,因此有资格进行此优化。
Brian和其他人已经讨论过这种优化的自由。
https://stackoverflow.com/questions/55073707
复制相似问题