博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java集合工具
阅读量:4029 次
发布时间:2019-05-24

本文共 6297 字,大约阅读时间需要 20 分钟。

诚然,在Java世界中,用的非常广泛的数据结构乃集合也,由Collection及Map衍合而来的多功能结构的集合类和接口,让我们随行随用。然而,工欲善其事,必先利其器,个人的工具箱中,必然应该收藏很多集合工具利器。

一、Collections

javadoc对其有如下解释

此类包含了许多特有的静态方法,用于操作集合或返回集合实例,同时还提供许多处理集合和包装器的多态实现,用于获取一些拥有特定功能的集合。

如果传入给此类任一方法的参数为null,则该方法会抛出NullPointerException。
通常,涉及到的多态实现都有简要的文档描述,这些文档应该是一种注意事项,而不是一种规范,在满足多态规范的前提下,这些实现可由其他算法自由替换。(例如,所使用的算法不需要归并排序,但它必须是稳定的)
此类还包含有”破坏性”的集合实现算法,如果集合不支持相应的突变原语(mutation primitives),那么当修改集合时,该算法会抛出UnsupportedOperationException异常,例如set方法。如果调用对集合没有影响,该算法可能会抛该异常,但不是必须的。例如,对一个有序的不可变集合调用sort方法时,此时可能会抛UnsupportedOperationException但也可能不会。

常用方法

1.排序方法与排序器

默认为比较器,正序排序public static 
> void sort(List
list) 传入自定义比较器public static
void sort(List
list, Comparator
c) 逆序排序static void reverse(List
list) 逆序排序器public static
Comparator
reverseOrder()public static
Comparator
reverseOrder(Comparator
cmp)

2.随机排列方法

public static void shuffle(List
list)public static void shuffle(List
list, Random rnd)

3.交换元素

public static void swap(List
list, int i, int j)

4.填充值与拷贝集合

用obj全部填充到list中public static 
void fill(List
list, T obj)public static
void copy(List
dest, List
src) 赋值N个public static
List
nCopies(int n, T o)

5.二分查找

默认查找public static 
int binarySearch(List
> list, T key)自定义查找规则public static
int binarySearch(List
list, T key, Comparator
c)

6.获取最大最小元素

public static 
> T min(Collection
coll)public static
T min(Collection
coll, Comparator
comp)public static
> T max(Collection
coll)public static
T max(Collection
coll, Comparator
comp)

7.集合中索引集合

public static int lastIndexOfSubList(List
source, List
target)public static int indexOfSubList(List
source, List
target)

8.获取不可变集合与同步集合

public static 
List
unmodifiableList(List
list)public static
Map
unmodifiableMap(Map
m)public static
Set
unmodifiableSet(Set
s)public static
List
synchronizedList(List
list)public static
Map
synchronizedMap(Map
m)

9.获取空元素集合与单例集合

public static final 
Set
emptySet()public static final
List
emptyList()public static final
Map
emptyMap()public static
Set
singleton(T o)public static
List
singletonList(T o)public static
Map
singletonMap(K key, V value)

10.其他零散方法

对象比较static boolean eq(Object o1, Object o2) o在c中出现的次数public static int frequency(Collection
c, Object o)添加元素public static
boolean addAll(Collection
c, T... elements)

二、Guava

大名鼎鼎,Guava也()

User Guide:
Maven依赖

com.google.guava
guava
18.0

Guava Collections 起步

对于任何编程语言,集合皆不可或缺。不用集合,我们几乎无法写出任何有意义的程序,Guava起始于google-collections, 但谷歌早已并之于Guava中,在com.google.common.collect 包一窥便得之。如今,与Guava中其他包相比,集合包中仍有数量繁森的家族成员。囿于此,不能面面俱到的去探索所有繁枝细叶,但我们将倾尽全力去探寻其最深的奥妙处,并应用于日常必须中,我们将对如下内容追本溯源。(此章节翻译自Bill Bejeck – Getting Started with Google Guava)

  • Lists, Maps, Sets提供的常用静态方法
  • 不可变集合
  • Bimaps, 不仅可以keys to values, 而且可以values to keys
  • Table类型, Map到Map的集合类型
  • Multimaps, 一键多值类型
  • FluentIterable类,提供一系列用于处理Iterable实例的接口
  • Ordering类,与Comparators一起赋予许多增强功能

1.FluentIterable

FluentIterable提供了许多有益的接口,并可以一种流畅的链式风格编写代码,使之可读性良好。

FluentIterable.filter方法

FluentIterable.filter方法采用Predicate 作为参数,如果参入的Predicate 返回true,则每个元素都将被验证并被保留,如果没有元素满足条件,则将返回一个空Iterable。如下例子将演示fromfiller 方法。

@Testpublic void testFilter() throws Exception {Iterable
personsFilteredByAge= FluentIterable.from(personList).filter(new Predicate
() { @Override public boolean apply(Person input) { return input.getAge() > 31; }});assertThat(Iterables.contains(filtered, person2),is(true));

FluentIterable.transform方法

transform方法是一种映射操作,其通过Function来 应用每一个元素。它可生成一个新的与原始iterable具有同样大小的转换后的iterable,它与filter 方法不同,它不会任意移除元素,如下例子演示一下。

@Testpublic void testTransform() throws Exception {List
transformedPersonList =FluentIterable.from(personList).transform(new Function
() { @Override public String apply(Person input) { return Joiner.on('#').join(input.getLastName(), input.getFirstName(), input.getAge()); }}).toList();assertThat(transformed.get(1), is("Flintstone#Fred#32"));}

2.Lists、Sets、 Maps

Lists、Sets, Maps,是一套工具类,分别用于操作List, Set,Map接口及其实现类,他们最便利的方法是生成相应的实现类实例。

Lists常用方法

创建list系列public static 
ArrayList
newArrayList()public static
ArrayList
newArrayList(E... elements) public static
LinkedList
newLinkedList()public static
LinkedList
newLinkedList()public static
CopyOnWriteArrayList
newCopyOnWriteArrayList()public static
ArrayList
newArrayListWithCapacity转换对象public static
List
transform( List
fromList, Function
function)截取子集合返回size个集合public static
List
> partition(List
list, int size)反转public static
List
reverse(List
list)

Sets常用方法

public static 
HashSet
newHashSet()public static
HashSet
newHashSet(E... elements) public static
HashSet
newHashSetWithExpectedSize(int expectedSize)public static
LinkedHashSet
newLinkedHashSet()并集public static
SetView
union( final Set
set1, final Set
set2) set1中有set2中没有public static
SetView
difference(final Set
set1, final Set
set2)交集public static
SetView
intersection(final Set
set1, final Set
set2)

Maps常用方法

public static 
HashMap
newHashMap()public static
LinkedHashMap
newLinkedHashMap()public static
ConcurrentMap
newConcurrentMap()public static
Map
transformValues( Map
fromMap, Function
function)

演示Maps.uniqueIndex方法

public static 
ImmutableMap
uniqueIndex( Iterable
values, Function
keyFunction) List
books = someService.getBooks();Map
bookMap = Maps.uniqueIndex(books.iterator(),new Function
(){ @Override public String apply( Book input) { return input.getIsbn(); }});

转载地址:http://kglbi.baihongyu.com/

你可能感兴趣的文章
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>
flutter-实现一个下拉刷新上拉加载的列表
查看>>
android 代码实现圆角
查看>>
postman调试webservice接口
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
Android DataBinding使用2-Recycleview
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
关于activity保存页面状态的两个方法
查看>>
android中对于非属性动画的整理
查看>>
一个简单的TabLayout的使用
查看>>
关于let{a}=B出现的解构赋值
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>