第五十八篇:commons-collections使用介绍之List
来源:互联网 发布:雅马哈合成器 知乎 编辑:程序博客网 时间:2024/06/05 11:01
在上一篇博客中介绍了commons-collections中的Bag
相关内容,这一篇将为大家介绍List
相关的实现类。
CursorableLinkedList
CursorableLinkedList
是List
的一种实现,提供了一个列表迭代器并且允许修改列表。CursorableLinkedList
支持所有可选列表的操作。它继承自AbstractLinkedList
,提供了stack/queue/dequeue的操作。这个类的主要功能是能够在同一时间修改列表和迭代器。listIterator()
和cursor()
方法都提供了访问一个继承自ListIterator
的Cursor
实例。游标允许更改列表时并发修改迭代器。需要注意的是,iterator()
方法和子列表不会提供这种光标行为。CursorableLinkedList
不是线程同步的。
使用示例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
运行结果:
[first, center, last]
使用游标移除元素:first
[center, last]
使用迭代器移除元素:center
[last]
FixedSizeList
FixedSizeList
修饰另一个列表防止添加/删除并且固定列表大小。add、remove、clear和retain操作是不被支持的,set
方法是允许的但是不会影响列表大小。
使用示例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
运行结果:
`[11, 22, 33, 44]
列表最大长度:4
[55, 22, 33, 44]
GrowthList
GrowthList
修饰另一个列表,可以使其在因set或add操作造成索引超出异常时无缝的增加列表长度,可以避免大多数的IndexOutOfBoundsException
。
使用示例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
运行结果:
[11, 22]
[11, 22, null, 44]
LazyList
LazyList
修饰另一个列表,当调用get
方法时,如果索引超出列表长度,列表会自动增长,我们可以通过一个工厂获得超出索引位置的值。LazyList
和GrowthList
都可以实现对修饰的列表进行增长,但是LazyList
发生在get
时候,而GrowthList
发生在set
和add
时候,我们也可以混合使用这两种列表。
使用示例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
运行结果:
[11, 22]
new
[11, 22, null, new]
PredicatedList
PredicatedList
修饰另一个列表,在执行add
的时候对添加元素进行校验,校验不通过则抛出IllegalArgumentException
异常。commons-collections
已经为我们提供了一些验证的实现:
FunctorException
异常FalsePredicate不允许添加任何元素IdentityPredicate如果添加的元素和断言中的元素为同一个(==),则允许添加InstanceofPredicate允许添加指定类型的实例NonePredicate多个断言组合,如果断言数组为空则允许所有元素,否则只要有一个断言为真则不允许添加,NotNullPredicate元素不为null则允许添加NotPredicate断言为真则不允许添加NullIsExceptionPredicate元素为null,则抛出一个FunctorException
异常,否则断言为真则允许添加NullIsFalsePredicate元素为null,则不允许添加,否则断言为真则允许添加NullIsTruePredicate元素为null或断言为真允许添加NullPredicate仅允许添加null元素OnePredicate多个断言组合,如果断言数组为空则不允许所有元素,否则只有一个断言为真时允许添加OrPredicate两个断言组合,当断言有一个为真时允许添加,否则不允许TransformedPredicate对元素进行变换后断言为真则允许添加TransformerPredicate对元素进行变换后,变换结果为真则允许添加TruePredicate允许添加所有元素UniquePredicate不允许添加重复元素使用示例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
SetUniqueList
SetUniqueList
实现了一个不允许重复元素的列表,有点和Set
类似。
使用示例:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
运行结果:
[11, 22]
SynchronizedList
SynchronizedList
修饰另一个列表,使其可以在多线程环境下同步。和Vector
类似。
TransformedList
TransformedList
修饰另一个列表,在add
和set
的时候对元素进行转换后在执行相关操作。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
运行结果:
class Java.lang.String
[20]
TreeList
TreeList
实现了优化的快速插入和删除任何索引的列表。这个列表内部实现利用树结构,确保所有的插入和删除都是O(log n)。
TypedList
·TypedList·修饰了另一个列表,使其只能添加指定类型的实例,修饰后的列表本质上就是使用InstanceofPredicate
断言的PredicatedList
。
UnmodifiableList
UnmodifiableList
修饰另一个列表,使列表不允许被修改。
- 第五十八篇:commons-collections使用介绍之List
- 第五十七篇:commons-collections使用介绍之Bag
- 第五十九篇:commons-collections使用介绍之Map
- commons-collections使用介绍之List
- commons-collections使用介绍之Bag
- commons-collections使用介绍之Map
- commons-collections使用介绍之Bag HashBag
- 第五十六篇: commons-dbutils使用介绍
- Apache Commons Collections组件介绍使用
- 使用org.apache.commons.collections.CollectionUtils进行List与List比较
- Apache commons 之 Collections :总览
- Apache commons 之 Collections :Bag
- Apache commons 之 Collections:Buffer
- Apache commons 之 Collections :Map
- Apache commons 之 Collections :LazyMap
- Apache commons 之 Collections :Comparator
- Apache commons 之 Collections :Predicate
- Apache commons 之 Collections :Iterator
- 加载数据到ListView
- 微信网页授权登陆如何实现回调多个域名?
- 汇哲科技- 8月31日国盟CISSP每日一题
- JavaScriptSerializer序列化和反序列化JSON:使用自定义JavaScriptConverter JSON的序列化和反序列化已经成为Web开发必不可少的知识。现在常用的有Syste
- map和reduce数量控制
- 第五十八篇:commons-collections使用介绍之List
- 汇哲科技-8月31日国盟CISM每日一题
- Unix信号详解(Signal的信号说明)
- Oracle跟MySQL的区别和联系
- SSM+Ehcache整合实例
- POI 附件在线预览
- tensorflow的基本运作
- Effective java 读书笔记
- C++编程思想之回调函数