codestory

Die Anleitung zu Java List

  1. List
  2. Examples
  3. listInterator()
  4. stream()
  5. subList(int,int)
  6. spliterator()
  7. toArray(..)
  8. sort(Comparator)
  9. replaceAll(UnaryOperator)

1. List

List ist eine Interface in Java (Java Collection Framework). Es ist eine Unterinterface von Collection deshalb hat es alle vollständigen Funktionen einer Collection, außerdem bietet es einen Grundsatz zur Beibehaltung einer geordneten Collection (ordered Collection). Es fasst die Methode für Hinzufügen, Aktualiserung, Lösung und Suche nach einem Elemente nach Index um. List ermöglicht die doppelten Elementen und die Elemente null.
public interface List<E> extends Collection<E>
Das Hierarchiesystem der Klasse zur Implementierung (implement) der Interface List:
LinkedList ist eine besondere Klasse. Es gehört zu sowohl der Gruppe List als auch der Gruppe Queue:
java.util.List
List bietet die Methode listIterator() an und gibt das Objekt ListIterator zurück, das die Iteration der Elementen in Vorwärts- oder Rückwärtsrichtung ermöglicht. Die Klassen, die die Interface List implementiert, können als ArrayList, LinkedList, Stack, Vector bezeichnet werden. In denen werden ArrayList und LinkedList häufiger verwendet werden.
Die Methode werden in List definiert:
List interface
public interface List<E> extends Collection<E> {
  boolean isEmpty();
  boolean contains(Object o);

  Object[] toArray();
  <T> T[] toArray(T[] a);

  boolean containsAll(Collection<?> c);
  boolean addAll(Collection<? extends E> c);
  boolean addAll(int index, Collection<? extends E> c);
  boolean removeAll(Collection<?> c);
  boolean retainAll(Collection<?> c);

  int size();
  boolean equals(Object o);
  int hashCode();

  E get(int index);  
  E set(int index, E element);  
  boolean add(E e);
  void add(int index, E element);
  E remove(int index);
  boolean remove(Object o);
  void clear();

  int indexOf(Object o);
  int lastIndexOf(Object o);

  Iterator<E> iterator();
  ListIterator<E> listIterator();  
  ListIterator<E> listIterator(int index);

  List<E> subList(int fromIndex, int toIndex);

  default Spliterator<E> spliterator()  
  default void replaceAll(UnaryOperator<E> operator)
  default void sort(Comparator<? super E> c)  

  static <E> List<E> of()  
  static <E> List<E> of(E e1)  
  static <E> List<E> of(E e1, E e2)  
  static <E> List<E> of(E e1, E e2, E e3)  
  static <E> List<E> of(E e1, E e2, E e3, E e4)  
  static <E> List<E> of(E e1, E e2, E e3, E e4, E e5)  
  static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6)  
  static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7)  
  static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8)  
  static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9)  
  static <E> List<E> of(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10)  

  static <E> List<E> of(E... elements)  
  static <E> List<E> copyOf(Collection<? extends E> coll)  
}

2. Examples

List ist eine Interface. Deshalb sollen Sie zur Erstellung eines Objekt List durch seine Implementierungsklasse erstellen, z.B ArrayList, LinkedList,..
ListEx1.java
package org.o7planning.list.ex;

import java.util.ArrayList;
import java.util.List;

public class ListEx1 {

    public static void main(String[] args) {
        // Create a List
        List<String> list = new ArrayList<String>();
        
        list.add("One");
        list.add("Three");
        list.add("Four");
        
        // Insert an element at index 1
        list.add(1, "Two");
        
        for(String s: list)  {
            System.out.println(s);
        }
        System.out.println(" ----- ");
        // Remove an element at index 2
        list.remove(2);
        
        for(String s: list)  {
            System.out.println(s);
        }
    }
}
Output:
One
Two
Three
Four
 -----
One
Two
Four
Book.java
package org.o7planning.list.ex;

public class Book {
    private String title;
    private float price;
    
    public Book(String title, float price)  {
        this.title = title;
        this.price = price;
    }
    public String getTitle() {
        return title;
    }

    public float getPrice() {
        return price;
    }  
}
Z.B: Ein Objekt List enthaltet die Datentyps Book.
ListEx2.java
package org.o7planning.list.ex;

import java.util.ArrayList;
import java.util.List;

public class ListEx2 {

    public static void main(String[] args) {
        Book b1 = new Book("Python Tutorial", 100f);
        Book b2 = new Book("HTML Tutorial", 120f);
        
        // Create an Unmodifiable List
        List<Book> bookList1 = List.of(b1, b2);
        
        // Create a List of Books using ArrayList
        List<Book> bookList = new ArrayList<Book>();
        
        bookList.add(new Book("Java Tutorial", 300f));
        bookList.add(new Book("C# Tutorial", 200f));
        
        // Append all elements to the end of list.
        bookList.addAll(bookList1);
        
        for(Book book: bookList)  {
            System.out.println(book.getTitle() + " / " + book.getPrice());
        }
    }
}
Output:
Java Tutorial / 300.0
C# Tutorial / 200.0
Python Tutorial / 100.0
HTML Tutorial / 120.0
Array -> List
Die statische Methode Arrays.asList(..) ermöglicht das Konvertieren eines Arrays in Objekt List. Dieses Objekt hat jedoch ein feste Größe. Es kann keine vorhandenen Elemente hinzufügen oder entfernen, da dies nicht unterstützt wird. Die optionale Methoden sind add, remove, set und clear.
ListEx3.java
package org.o7planning.list.ex;

import java.util.Arrays;
import java.util.List;

public class ListEx3 {

    public static void main(String[] args) {
        Book b1 = new Book("Python Tutorial", 100f);
        Book b2 = new Book("HTML Tutorial", 120f);
        Book b3 = new Book("Java Tutorial", 300f);
        
        Book[] bookArray = new Book[] {b1, b2, b3};
        
        // Create a Fixed-size List.
        List<Book> bookList = Arrays.asList(bookArray);
        
        for(Book b: bookList)  {
            System.out.println("Book: " + b.getTitle());
        }
    }
}
Output:
Book: Python Tutorial
Book: HTML Tutorial
Book: Java Tutorial

3. listInterator()

Die Methode listIterator() gibt ein Objekt ListIterator zurück, damit Sie die Elemente der Liste im Vorwärts- und Rückwärtsrichtung iterieren können.
ListIterator<E> listIterator();  

ListIterator<E> listIterator(int index);
Zum Beispiel:
List_listIterator.java
package org.o7planning.list.ex;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class List_listIterator {

    public static void main(String[] args) {
        // Create a List
        List<String> list = new ArrayList<String>();
        list.add("One");
        list.add("Two");
        list.add("Three");
        list.add("Four");
        
        // Get a ListIterator.
        ListIterator<String> listIterator = list.listIterator();
        
        String first = listIterator.next();
        System.out.println("First:" + first);// -->"One"
       
        String second = listIterator.next();
        System.out.println("Second:" + second);// -->"Two"
       
        if (listIterator.hasPrevious()) {
            System.out.println("Jump back...");
            String value = listIterator.previous();
            System.out.println("Value:" + value);// -->"Two"
        }
 
        System.out.println(" ----- ");
 
        while (listIterator.hasNext()) {
            String value = listIterator.next();
            System.out.println("Value:" + value);
        }
    }
}
Output:
First:One
Second:Two
Jump back...
Value:Two
 -----
Value:Two
Value:Three
Value:Four

4. stream()

List ist Unterinterface von Collection, deshalb wird sie die Methode stream() geerbt. Der Zugriff auf der Elemente einer Collection über Stream hilft Ihr Code kürzer und verständlicher:
List_stream.java
package org.o7planning.list.ex;

import java.util.ArrayList;
import java.util.List;

public class List_stream {

    public static void main(String[] args) {
        Book b1 = new Book("Python Tutorial", 100f);
        Book b2 = new Book("HTML Tutorial", 120f);
        
        // Create an Unmodifiable List
        List<Book> bookList1 = List.of(b1, b2);
        
        // Create a List of Books using ArrayList
        List<Book> bookList = new ArrayList<Book>();
        
        bookList.add(new Book("Java Tutorial", 300f));
        bookList.add(new Book("C# Tutorial", 200f));
        
        // Append all elements to the end of list.
        bookList.addAll(bookList1);
        
        // Using Stream
        bookList.stream() //
             .filter(b -> b.getPrice() > 100) // Filter Books with price > 100
             .forEach(b -> System.out.println(b.getTitle() +" / " + b.getPrice()));
    }
}
Output:
Java Tutorial / 300.0
C# Tutorial / 200.0
HTML Tutorial / 120.0

5. subList(int,int)

Die Methode subList(int,int) gibt eine Teilansicht des aktuellen Objekt List zurück, einschließlich der Elemente aus dem Index fromIndex zu toIndex.
Das Objekt "subList" und das Objekt List sind miteinander verbunden. Wenn Sie beispielweise ein Element in "subList" entfernen, wird dieses Element auch aus dem aktuellen Objekt List entfernt.
List<E> subList(int fromIndex, int toIndex);
List_subList.java
package org.o7planning.list.ex;

import java.util.ArrayList;
import java.util.List;

public class List_subList {

    public static void main(String[] args) {
        // Create a List
        List<String> originList = new ArrayList<String>();
        
        originList.add("A"); // 0
        originList.add("B"); // 1
        originList.add("C"); // 2
        originList.add("D"); // 3
        originList.add("E"); // 4
        
        List<String> subList = originList.subList(1, 3); // fromIndex .. toIndex
        
        System.out.println("Elements in subList: ");
        for(String s: subList)  {
            System.out.println(s); // B C
        }
        
        subList.clear(); // Remove all elements from subList.
        System.out.println("Elements in original List after removing all elements from subList: ");
        
        for(String s: originList)  {
            System.out.println(s); // B C
        }
    }
}
Output:
Elements in subList:
B
C
Elements in original List after removing all elements from subList:
A
D
E

6. spliterator()

Erstellen Sie ein Objekt Spliterator für traversing und partitioning der Elementen von List.
default Spliterator<E> spliterator()  // Java 8
Spliterator wird breit für das traversing und partitioning von verschiedenen Datenquelle wie Collection (List, Set, Queue), BaseStream, array verwendet.
  • Die Anleitung zu Java Spliterator

7. toArray(..)

Die Methode toArray(..) gibt ein Array mit allen Elementen von List zurück.
Object[] toArray();

<T> T[] toArray(T[] a);

// Java 11, The default method, inherited from Collection.
default <T> T[] toArray​(IntFunction<T[]> generator)
Zum Beispiel:
List_toArray.java
package org.o7planning.list.ex;

import java.util.ArrayList;
import java.util.List;

public class List_toArray {

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("A"); // 0
        list.add("B"); // 1
        list.add("C"); // 2
        list.add("D"); // 3
        list.add("E"); // 4
        
        String[] array = new String[list.size()];
        
        list.toArray(array);
        
        for(String s: array)  {
            System.out.println(s);
        }
    }
}
Output:
A
B
C
D
E

8. sort(Comparator)

Das Defaultmethode sort(Comparator) basiert auf das angegebenen Objekt Comparator um die Elementen in List zu vergleichen und seine Reihenfolge zu ordnen.
default void sort(Comparator<? super E> c)
Z.B: Ein Objekt List enthaltet die Elemente mit dem Typ von Book, wir werden sie nach dem steigenden Preis und Titel zuordnen.
List_sort_ex1.java
package org.o7planning.list.ex;

import java.util.ArrayList;
import java.util.List;

public class List_sort_ex1 {

    public static void main(String[] args) {
        Book b1 = new Book("Python Tutorial", 100f);
        Book b2 = new Book("HTML Tutorial", 120f);
        Book b3 = new Book("Java Tutorial", 300f);  
        Book b4 = new Book("Javafx Tutorial", 100f);  
        Book b5 = new Book("CSS Tutorial", 300f);  
        
        List<Book> bookList = new ArrayList<Book>();
        bookList.add(b1);
        bookList.add(b2);
        bookList.add(b3);
        bookList.add(b4);
        bookList.add(b5);
        
        // Sort by ascending price.
        // And Sort by ascending title.
        bookList.sort((book1, book2) -> {
            float a = book1.getPrice() - book2.getPrice();
            if(a > 0)  {
                return 1;
            } else if(a < 0) {
                return -1;
            }
            int b = book1.getTitle().compareTo(book2.getTitle());
            return b;
        });
        
        for(Book b: bookList)  {
            System.out.println(b.getPrice() +" : " + b.getTitle());
        }
    }
}
Output:
100.0 : Javafx Tutorial
100.0 : Python Tutorial
120.0 : HTML Tutorial
300.0 : CSS Tutorial
300.0 : Java Tutorial
Das Beispiel oben benutzt einigen neuen Konzepts, die ab Java 8 wie Functional interface, das Ausdruck Lambda eingeführt werden. Sie können die folgenden Artikel lesen um die mehr detailierten Artikel zu bekommen:

9. replaceAll(UnaryOperator)

Die Methode replaceAll(UnaryOperator) verwendet den angegebenen Parameter UnaryOperator um jedes Element in List durch ein neues Element zu ersetzen.
default void replaceAll(UnaryOperator<E> operator)
Z.B: Ein List enthaltet die Element mit dem Typ Book, ersetzt jedes Element Book durch ein neues Book mit der Preiserhöhung um 50%.
List_replaceAll.java
package org.o7planning.list.ex;

import java.util.ArrayList;
import java.util.List;

public class List_replaceAll {

    public static void main(String[] args) {
        Book b1 = new Book("Python Tutorial", 100f);
        Book b2 = new Book("HTML Tutorial", 120f);
        Book b3 = new Book("Java Tutorial", 300f);  
        Book b4 = new Book("Javafx Tutorial", 100f);  
        Book b5 = new Book("CSS Tutorial", 300f);  
        
        List<Book> bookList = new ArrayList<Book>();
        bookList.add(b1);
        bookList.add(b2);
        bookList.add(b3);
        bookList.add(b4);
        bookList.add(b5);
        
        // Replace Book with new Book with the price increased by 50%.
        bookList.replaceAll(b -> new Book(b.getTitle(), b.getPrice() * 150f/100));
        
        for(Book b: bookList)  {
            System.out.println(b.getPrice() + " : " + b.getTitle());
        }
    }
}
Output:
150.0 : Python Tutorial
180.0 : HTML Tutorial
450.0 : Java Tutorial
150.0 : Javafx Tutorial
450.0 : CSS Tutorial
  • Die Anleitung zu Java UnaryOperator