欢迎来到天天文库
浏览记录
ID:27800159
大小:70.00 KB
页数:7页
时间:2018-12-06
《使用keycollection提高java集合操作效率-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、使用KeyCollection提高Java集介操作效率-Java开发Java经验技巧使用KeyCollection提高Java集合操作效率本文由ImportNew-夏千林翻译自dzone0欢迎加入翻译小组。转载请见文末要求。Java?Collections框架屮的类应该是整个JDK屮使用频率最高的。然而,Java?Collections中的接口和实现存在着一些疏漏和弊端,大量的第三方库都致力于解决这些问题。Brownies?Collections已经提供了一个轻量高效的List实现GapList(详WJAl?java・dzonc.com/articlcs/gaplist-lightning一f
2、ast-list)。GapList是ArrayList?和LinkedList的替代选择,旨在解决一些El知的性能问题。由于GapList能提升应用的性能,这里引入的键集合(Key?Collections)将会提升开发者的工作效率。为了实现这一口标,这些集合屮集成了键和约束的概念,并能以一种正交和声明式的方式使用。听上去很有趣,但是不是太理论化了?我们來看一个例了。第一个例子比方说,我们需要用一个List按照下面的要求表示表格的列:•列是有序的•列名必须唯一•能够通过下标(Index)和名称快速访问列这样的话,我们应该选择什么集合呢?一个支持下标快速访问的Listo如果你确定元素的数量一直很少
3、,我们能够用遍丿力的方式实现根据名称访问元素(同时需耍用遍历的方式检查名称的唯一性),但这明显需耍实现一个不能扩展的解决方案。对于一个可扩展的解决方案,我们需要同步一个List和一个Map。这并不是一个不能完成的任务,但是通常情况下会花费很大的工作量。输入我们的键集合。只用一条语句就能创建满足需求的集合:Ke)4Listcolumns=newKeylList.Builder4、段代码简单易懂:创建一个用于存储列对彖的List,允许通过指定Mapper所定义的字符串类型的键访问元索。键不能为空且不能重复。要了解完整的示例代码,请看下而的Column类和Mapper的定义:classColumn{staticMapperMapper二newMapper(){StringgetKey(Columncol){rctuimcol.gctName();}};privateStringname;publicStringgetName(){returnname;}}起初,你可能会认为这种集合创建的方式很笨拙,但如果不这么做5、,想想你需要耗费的代码量吧。此外,Java?8中引入的Lambda表达式将能用方法引用替代Mapper的显式定义。在看完第一个例了Z后,我们來看看关于键更详细的定义和功能:键是从集合内的某个元素中提取岀的一个值。它用于访问元素和定义约束。我们把集合内提取岀的所有键值称为键映射(Key?Map)o每个集合可以有一个或多个键映射,并且元素本身也能够作为键,我们把这种集合称作元素集(Elcmcnt?Sct)。对于每一个键映射,可以定义如下行为:•空值:允许插入空值(默认)或者通过withKeyNull()方法禁止插入空值。•重复值:允许插入重复值(默认)或者通过withKeyDuplicates?(6、)方法禁止插入重复值。还存在一种模式,禁止插入重复值,但是空值可以重复插入。•排序顺序:键的顺序可以是随机的(默认)或是有序的。可以通过withKeySorM)方法实现键按照白然序或者其他占定义比较器产生的顺序有序。如果你设定了一个键映射的排序顺序,你同样能够通过withKeyOrderBy()方法指定整个集合的顺序。如果你有一个后台数据库,这些概念对你来说听起来很熟悉。在我们的例子屮,我们定义了列名作为集合的主键。如果想要让主键变得更明显或是更简短,我们可以使用withPrimarKey()设定主键。还可以使用另一个方法withUniqueKey(),withUniqueKey()定义的键可7、以为空,但非空的键值必须是唯一的。需要注意的是键的取值应该是不可变的。这是因为键映射在元素添加时被填入键值,而键值后续的变更将不会被检测到。然而,这并不是键集合所特有的问题,在Set和Map中,元索的键值也是不能变更的。如果你真的需要变更一个键的值,你可以使用invalidateKey()方法更新键集合的内部状态。约束对空值和重复值的限制已经展示出约束的力量。不幸的是,JDK类库中并没有约束集合的
4、段代码简单易懂:创建一个用于存储列对彖的List,允许通过指定Mapper所定义的字符串类型的键访问元索。键不能为空且不能重复。要了解完整的示例代码,请看下而的Column类和Mapper的定义:classColumn{staticMapperMapper二newMapper(){StringgetKey(Columncol){rctuimcol.gctName();}};privateStringname;publicStringgetName(){returnname;}}起初,你可能会认为这种集合创建的方式很笨拙,但如果不这么做
5、,想想你需要耗费的代码量吧。此外,Java?8中引入的Lambda表达式将能用方法引用替代Mapper的显式定义。在看完第一个例了Z后,我们來看看关于键更详细的定义和功能:键是从集合内的某个元素中提取岀的一个值。它用于访问元素和定义约束。我们把集合内提取岀的所有键值称为键映射(Key?Map)o每个集合可以有一个或多个键映射,并且元素本身也能够作为键,我们把这种集合称作元素集(Elcmcnt?Sct)。对于每一个键映射,可以定义如下行为:•空值:允许插入空值(默认)或者通过withKeyNull()方法禁止插入空值。•重复值:允许插入重复值(默认)或者通过withKeyDuplicates?(
6、)方法禁止插入重复值。还存在一种模式,禁止插入重复值,但是空值可以重复插入。•排序顺序:键的顺序可以是随机的(默认)或是有序的。可以通过withKeySorM)方法实现键按照白然序或者其他占定义比较器产生的顺序有序。如果你设定了一个键映射的排序顺序,你同样能够通过withKeyOrderBy()方法指定整个集合的顺序。如果你有一个后台数据库,这些概念对你来说听起来很熟悉。在我们的例子屮,我们定义了列名作为集合的主键。如果想要让主键变得更明显或是更简短,我们可以使用withPrimarKey()设定主键。还可以使用另一个方法withUniqueKey(),withUniqueKey()定义的键可
7、以为空,但非空的键值必须是唯一的。需要注意的是键的取值应该是不可变的。这是因为键映射在元素添加时被填入键值,而键值后续的变更将不会被检测到。然而,这并不是键集合所特有的问题,在Set和Map中,元索的键值也是不能变更的。如果你真的需要变更一个键的值,你可以使用invalidateKey()方法更新键集合的内部状态。约束对空值和重复值的限制已经展示出约束的力量。不幸的是,JDK类库中并没有约束集合的
此文档下载收益归作者所有