Lists类主要提供了对List类的子类构造以及操作的静态方法。在Lists类中支持构造ArrayList、LinkedList以及newCopyOnWriteArrayList对象的方法。
其中提供了以下构造ArrayList的函数:下面四个构造一个ArrayList对象,但是不显式的给出申请空间的大小:
newArrayList() newArrayList(E... elements) newArrayList(Iterable<? extends E> elements) newArrayList(Iterator<? extends E> elements)
以下两个函数在构造ArrayList对象的时候给出了需要分配空间的大小:
newArrayListWithCapacity(int initialArraySize) newArrayListWithExpectedSize(int estimatedSize)
如果你事先知道元素的个数,可以用newArrayListWithCapacity函数;如果你不能确定元素的个数,可以用newArrayListWithExpectedSize函数,在newArrayListWithExpectedSize函数里面调用了computeArrayListCapacity(int arraySize)函数,其实现如下:
@VisibleForTesting static int computeArrayListCapacity(int arraySize) { checkArgument(arraySize >= 0); // TODO(kevinb): Figure out the right behavior, and document it return Ints.saturatedCast(5L + arraySize + (arraySize / 10)); }
返回的容量大小为5L + arraySize + (arraySize / 10),当arraySize比较大的时候,给定大小和真正分配的容量之比为10/11。
Lists类还支持构造LinkedList、newCopyOnWriteArrayList对象,其函数接口为:
newLinkedList() newLinkedList(Iterable<? extends E> elements) newCopyOnWriteArrayList() newCopyOnWriteArrayList(Iterable<? extends E> elements)
我们还可以将两个(或三个)类型相同的数据存放在一个list中,这样可以传入到只有一个参数的函数或者需要减少参数的函数中,这些函数如下:
asList(@Nullable E first, E[] rest) asList(@Nullable E first, @Nullable E second, E[] rest)
Lists类中transform函数可以根据传进来的function对fromList进行相应的处理,并将处理得到的结果存入到新的list对象中,这样有利于我们进行分析,函数接口如下:
public static <F, T> List<T> transform( List<F> fromList, Function<? super F, ? extends T> function)
使用例子:
Function<String, Integer> strlen = new Function<String, Integer>() { public Integer apply(String from) { Preconditions.checkNotNull(from); return from.length(); } }; List<String> from = Lists.newArrayList("abc", "defg", "hijkl"); List<Integer> to = Lists.transform(from, strlen); for (int i = 0; i < from.size(); i++) { System.out.printf("%s has length %d\n", from.get(i), to.get(i)); } Function<String, Boolean> isPalindrome = new Function<String, Boolean>() { public Boolean apply(String from) { Preconditions.checkNotNull(from); return new StringBuilder(from).reverse().toString().equals(from); } }; from = Lists.newArrayList("rotor", "radar", "hannah", "level", "botox"); List<Boolean> to1 = Lists.transform(from, isPalindrome); for (int i = 0; i < from.size(); i++) { System.out.printf("%s is%sa palindrome\n", from.get(i), to1.get(i) ? " " : " NOT "); } // changes in the "from" list are reflected in the "to" list System.out.printf("\nnow replace hannah with megan...\n\n"); from.set(2, "megan"); for (int i = 0; i < from.size(); i++) { System.out.printf("%s is%sa palindrome\n", from.get(i), to1.get(i) ? " " : " NOT "); }
Lists还可以将传进来的String或者CharSequence分割为单个的字符,并存入到一个新的List对象中返回,如下:
ImmutableList<Character> wyp = Lists.charactersOf("wyp"); System.out.println(wyp);
将List对象里面的数据顺序反转可以用reverse函数实现,取得List对象里面的子序列可以用subList函数实现。更多的实现可以参看其源码。
相关推荐
guava-API文档
guava类似Apache Commons工具集包含了若干被Google的 Java项目广泛依赖 的核心库
包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:com.google.guava,artifactId:guava,version:18.0 使用方法:解压翻译后的API文档,用浏览器打开“index.html”...
Guava 23.0 API CHM格式,可以搜索,方便离线查阅。
包含翻译后的API文档:guava-23.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:23.0; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...
NULL 博文链接:https://whnqwe.iteye.com/blog/2313173
Guava 中文是石榴的意思,该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java 常用库。 目前主要包含: com.google.common.annotations com.google.common.base com.google.common.collect ...
包含翻译后的API文档:guava-17.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:17.0; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...
包含翻译后的API文档:guava-20.0-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:20.0; 标签:google、guava、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开...
包含翻译后的API文档:guava-19.0-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:com.google.guava:guava:19.0; 标签:google、guava、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用...
下面我们就开启优雅Java编程学习之旅! 项目相关信息: 官方首页:http://code.google.com/p/guava-libraries 官方下载:http://code.google.com/p/guava-libraries/downloads/list 官方文档:...
guava19_api_chm英文文档
包含翻译后的API文档:guava-28.0-android-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:28.0-android; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,...
guava-api16/17/18chm
包含翻译后的API文档:guava-16.0.1-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:16.0.1; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开...
包含翻译后的API文档:guava-12.0.1-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:com.google.guava,artifactId:guava,version:12.0.1 使用方法:解压翻译后的API文档,用浏览器打开...
包含翻译后的API文档:guava-30.0-jre-javadoc-API文档-中文(简体)版.zip; Maven坐标:com.google.guava:guava:30.0-jre; 标签:google、guava、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器...
赠送原API文档:guava-18.0-javadoc.jar 赠送源代码:guava-18.0-sources.jar 包含翻译后的API文档:guava-18.0-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:com.google.guava,...