在上一篇博客中介绍了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
已经为我们提供了一些验证的实现:
类名 | 说明 |
---|---|
AllPredicate | 多个断言组合,如果断言数组为空则允许所有元素,否则只有当所有断言都为真才允许添加 |
AndPredicate | 两个断言组合,当断言都为真时允许添加,否则不允许 |
AnyPredicate | 多个断言组合,如果断言数组为空则不允许所有元素,否则只要有一个断言为真则允许添加 |
EqualPredicate | 如果添加的元素和断言中的元素相等(equals),则允许添加 |
ExceptionPredicate | 总是会抛出一个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
修饰另一个列表,使列表不允许被修改。