`
sungang_1120
  • 浏览: 322427 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

Guava Collections API学习之Lists

阅读更多

 

       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 collection简介1

    除了以上提到的功能,Guava Collections 还包含许多其他实用工具,如 Predicates、Functions 和 Lists 等,帮助开发者写出更简洁、更可读的代码。这些经过精心设计和充分测试的 API,大大提升了开发效率,减少了潜在...

    guava参考文档

    虽然Java 8引入了流API,但Guava早在其之前就提供了类似的功能,如`FluentIterable`,它允许链式操作并提供了便利的转换和过滤方法。 7. **其他功能**: - **检查类(CheckArgument, CheckNotNull等)**: 提供了...

    Getting Started with Google Guava code

    1. **集合框架增强**:Guava 提供了丰富的集合类,如 Multiset(多集合)、Multimap(多映射)、Immutable collections(不可变集合)等,这些集合在功能和性能上都优于 Java 标准库中的集合。 2. **缓存**:Guava ...

    Google Guava 30.1.1常用类介绍及实践代码

    List&lt;Integer&gt; lengths = Lists.transform(Arrays.asList("abc", "def"), lengthExtractor); ``` 以上只是 Guava 30.1.1 版本中的一部分核心功能,实际使用中还有许多其他实用工具类,如 `Range`, `EventBus`, `...

    Guava教程1使用GoogleCollections,G

    Guava早在Java 8的Stream API之前就引入了FluentIterable,它提供了类似Stream的功能,可以方便地对集合进行链式操作。例如: ```java FluentIterable&lt;String&gt; iterable = FluentIterable.from(Arrays.asList("a...

    guava_programming.zip

    List&lt;String&gt; stringList = Collections2.transform(strings, new Function, String&gt;() { @Override public String apply(Integer input) { return input.toString(); } }); ``` 在Java 8之后,我们可以使用...

    java8-guava-comparation:Guava 和 Java 8 Stream API 的比较

    这里我们将深入探讨 Guava 与 Java 8 Stream API 在功能、用法以及性能上的差异。 1. **Java 8 Stream API** Java 8 引入了 Stream API,它为处理集合提供了声明式编程风格,允许我们以流畅、链式的方式处理数据。...

    开源架包guava

    Guava的ImmutableCollections(不可变集合)是线程安全且不可修改的,适用于创建常量或配置类。 其次,Guava的缓存功能允许开发者轻松地在应用程序中实现本地缓存策略,提高性能并减少对远程服务的调用。...

    google guava23.5

    - **Immutable Collections**:不可变的集合类,确保一旦创建就不能被修改,提供线程安全。 - **BiMap**:双向映射,允许在键和值之间进行双向查找。 - **Table**:二维表格数据结构,用于存储键-键对的数据。 2...

    java基础 集合-26-Guava开源组件使用(4)

    10. **流(Stream)的替代方案**:虽然Java 8引入了Stream API,但Guava的Iterables和Collections提供了类似的功能,如transform()、filter()和partition(),在不支持Java 8的环境中也能实现类似流的操作。 在实际...

    google-collections jar包

    Google Collections(Guava)库不仅限于`Maps`模块,还包括`Lists`、`Sets`、`Multisets`、`Iterators`等多个子模块,它们都提供了丰富的功能和优化,使得Java编程更加简洁和高效。在实际开发中,熟练掌握并运用这些...

    google-collections.zip

    总之,Google Collections(现在的 Guava)为 Java 开发者提供了大量实用工具和集合扩展,提高了代码的可读性、效率和安全性。无论是进行简单的数据操作还是设计复杂的系统,这个库都是一把不可或缺的利器。

    Guava教程(4)条件,多重映射和分片Java开发Jav

    Guava的`Lists.partition()`方法允许我们将一个大列表分割成多个小列表,每个小列表的大小可以指定。这对于批量处理大列表,或者在多线程环境中并行处理数据非常有帮助。例如,如果我们有一个包含100个元素的列表,...

    googlecollections

    首先,Google Collections库,现已被更名为Guava,是Google提供的一套强大的Java工具类库。它包含了大量对Java集合框架的扩展,如Multiset、Multimap、ImmutableList等,还有许多实用的函数式编程工具,如Predicates...

    com.google.common.collect jar包

    List&lt;String&gt; unmodifiableList = Lists.newArrayList(Collections.unmodifiableList(originalList)); ``` 除了`newArrayList`,`com.google.common.collect`包还提供了许多其他强大的工具,如`ImmutableList`、`...

    googlecollections1.0.rar

    - **Collections2**、**Lists**、**Sets**等工具类:提供了许多便利的静态方法,如排序、转换、过滤等。 4. **学习与实践** 学习Google Collections 1.0,开发者可以深入理解如何利用这些高级数据结构和工具来...

    guavaTest:测试

    Guava的Iterables、Lists和Collections2等类提供了丰富的操作序列的方法,如filter、transform和apply等。 7. **事件监听** Guava的EventBus是一种简单的发布-订阅事件总线,可以方便地实现组件间的松耦合通信。 ...

    google common jar包

    这个"google-collections-1.0.jar"文件就是谷歌Common库的一个早期版本,它在2007年首次发布,是Google Collections Library的前身,后来演变为Guava库。 在"google-collections-1.0.jar"中,我们可以找到许多关键...

    不可变对象ImmutableXXX:Collection、List、Set、Map…

    它们在很多场景下能够替代Java标准库中的`Collections.unmodifiable*`方法,提供更强的类型安全性和性能。 使用不可变集合有以下好处: - **线程安全**:不可变对象天生就是线程安全的,可以减少在多线程环境中的...

    guava-light:简易版的番石榴,其包装分为不同的目标(专为Android设计)

    guava-collect-base:收集的基类(Collections2,Lists,Iterables ...)-大小约75Kb请注意,与不可变相关的类将出现在另一个包中 ...更多 执照 Copyright 2015 Romain Piel Licensed under the Apache License, ...

Global site tag (gtag.js) - Google Analytics