devstory

Le Tutoriel de 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 est une interface de Java Collection Framework. Comme il s'agit d'une sous-interface de Collection, elle dispose de toutes les fonctionnalités d'une Collection. Par ailleurs, elle fournit une base pour maintenir une Collection ordonnée. Elle comprend des méthodes permettant d'insérer, de mettre à jour, de supprimer et de rechercher un élément par index. List autorise les éléments dupliqués et les éléments null.
public interface List<E> extends Collection<E>
La hiérarchie des classes implémente l'interface List:
LinkedList est une classe spéciale, appartenant à la fois au groupe List et à celui de Queue:
java.util.List
List fournit la méthode listlterator() qui renvoie un objet Listlterator permettant une itération à travers des éléments dans le sens avant ou arrière. Les classes implémentant l'interface List sont ArrayList, LinkedList, Stack et Vector. Parmi ceux-ci, ArrayList et LinkedList sont plus largement utilisés.
Les méthodes définies dans List:
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 est une interface, donc pour créer un objet List, il faut créer à travers d'une classe qui l'implémente, telle que 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;
    }  
}
Exemple: un objet List contient différents types de données 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
La méthode statique Arrays.asList(..) permet de convertir un tableau en objet List, cependant, cet objet dispose d'une taille fixe, qui ne peut pas ajouter ni supprimer des éléments existants, car il ne dispose pas de méthodes optionnelles: add, remove, set et 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()

La méthode listlterator() renvoie un objet Listlterator qui vous permet d'itérer sur les éléments dans le sens avant ou arrière.
ListIterator<E> listIterator();  

ListIterator<E> listIterator(int index);
Par exemple:
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 est une sous-interface de Collection, donc elle hérite de la méthode stream(). L'accès aux éléments d'une Collection via Stream rend votre code bref et facile à comprendre:
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)

La méthode subList(int,int) renvoie une vue partielle de l'objet List actuel, y compris des éléments de l'index fromIndex à tolndex.
L'objet "subList" et l'objet List actuel sont liés. Par exemple, si vous supprimez un élément de "subList", cet élément est également supprimé de l'objet List actuel.
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()

Créer un objet Spliterator pour parcourir et partitionner les éléments List.
default Spliterator<E> spliterator()  // Java 8
Spliterator est largement utilisé pour parcourir et partitionner de nombreuses sources de données différentes telles que Collection (List, Set, Queue), BaseStream, array.
  • Java Spliterator

7. toArray(..)

La méthode toArray(..) renvoie un tableau contenant tous les éléments de List.
Object[] toArray();

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

// Java 11, The default method, inherited from Collection.
default <T> T[] toArray​(IntFunction<T[]> generator)
Par exemple:
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)

La méthode par défaut sort(Comparator) repose sur l'objet Comparator, fourni pour comparer les éléments de la List et trier leur ordre.
default void sort(Comparator<? super E> c)
Exemple: Un objet List contient des éléments de type Book, on les trie par prix et titre par ordre croissant.
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
L'exemple ci-dessus utilise certains nouveaux concepts introduits à partir de Java 8, tels que Functional interface, l'expression Lambda. Vous pouvez lire les articles ci-dessous pour obtenir des explications plus détaillées:

9. replaceAll(UnaryOperator)

La méthode replaceAll(UnaryOperator) utilise le paramètre UnaryOperator fourni pour remplacer chaque élément de List par un nouveau.
default void replaceAll(UnaryOperator<E> operator)
Exemple: Une List contient des éléments de type Book, remplaçant chacun de ses éléments Book par un nouveau Book pour une augmentation de prix de 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
  • Le Tutoriel de Java UnaryOperator