[정수리] 가바학습의 Lists

4149 단어
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 함수를 사용할 수 있습니다.만약 원소의 개수를 확정할 수 없다면 new Array List With Expected Size 함수를 사용하여 new Array List With Expected Size 함수에서 컴퓨터 Array List Capacity (int array Size) 함수를 호출할 수 있습니다. 이 함수는 다음과 같습니다.
   @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 + array Size + (array Size/10) 이고, array Size가 비교적 크면 주어진 크기와 실제 분배된 용량의 비율은 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
", 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
", from.get(i), to1.get(i) ? " " : " NOT "); } // changes in the "from" list are reflected in the "to" list System.out.printf("
now replace hannah with megan...

"); from.set(2, "megan"); for (int i = 0; i < from.size(); i++) { System.out.printf("%s is%sa palindrome
", 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 함수로 실현할 수 있다.더 많은 실현은 그 원본 코드를 참조할 수 있다.(끝)
전재: 과거 기억에서 전재(http://www.iteblog.com/) 본문 링크 주소: Guava 학습의 Lists(http://www.iteblog.com/archives/689)

좋은 웹페이지 즐겨찾기