Java collection framework (2) - Interface de liste

1. L'une des interfaces de collecte (interface de liste):

Données à une seule colonne, une
liste de collecte qui définit la méthode d'accès à un groupe d'objets : stocker des données répétées ordonnées - "tableau dynamique", remplacer le tableau d'origine

1. Classe d'implémentation de l'interface List:

ArrayList: en tant que classe d'implémentation principale de l'interface List, le thread est dangereux et très efficace. La couche inférieure utilise Object [] elementDate pour stocker
LinkedList: pour les opérations d'insertion et de suppression fréquentes, l'utilisation de ce type d'efficacité est plus efficace que ArrayList. La couche inférieure utilise un stockage de liste doublement lié
Vecteur: existait dans la version jdk1.0, fondamentalement non utilisé dans le développement, sécurité des threads, faible efficacité, le fond utilise le stockage Object [] elementDate

2. Analyse du code source ArrayList: la couche inférieure est instanciée lorsque vous créez un objet (style chinois affamé en mode cas unique)

2.1.jdk7: ArrayList list = new ArrayList (); // La couche inférieure crée un tableau d'objets de longueur 10 elementData
list.add (123); // elementData [0] = new Integer (123);

list.add ( 11) // Lorsque le nombre d'éléments nouvellement ajoutés dépasse 10 (la capacité n'est pas suffisante), la capacité est étendue. Par défaut, la capacité est augmentée à 1,5 fois l'original.
Dans le même temps, les données de la matrice d'origine doivent être copiées dans la nouvelle matrice

Conclusion: Il est recommandé d'utiliser un constructeur avec des paramètres: ArrayList list = new ArrayList (int capacity)

2.2. Le changement de ArrayList dans jdk8: l'objet n'a pas été créé lors de sa création: {}, il a été instancié lors du premier appel de l'add (mode singleton paresseux)
ArrayList list = new ArrayList (); // L'objet sous-jacent [ ] Le tableau elementData est initialisé à {}, et un tableau de longueur 10 n'est pas créé

list.add (123); // Lors du premier appel à add (), la couche inférieure crée un tableau de longueur 10 et ajoute les données à elementData [0]
...
list.add (11) // lors de leur ajout Si le nombre d'éléments dépasse 10 (la capacité n'est pas suffisante), la capacité est étendue. Par défaut, la capacité est étendue à 1,5 fois l'original.
Dans le même temps, les données de la baie d'origine doivent être copiées dans la nouvelle baie

Conclusion: retard de la création des tableaux, économie de mémoire

3. Analyse du code source de LinkedList

Liste LinkedList = new LinkedList (); // Les premier et dernier attributs du type Node sont créés en interne, la valeur par défaut est null
list.add (123); // 123 est encapsulé dans Node et l'objet de Node est créé.
Ce code reflète
Classe statique privée de la liste doublement liée de LinkedList Node {
E item;
Node next;
Node prev;

Node (Node prev, élément E, Node next) {
this.item = element;
this.next = suivant;
this.prev = prev;
}
}

4. analyse du code source du vecteur:

Lors de la création d'objets via le constructeur Vector () dans jdk7 et 8, la couche inférieure a créé un tableau de longueur 10. Lors de l'expansion, l'expansion par défaut est 2 fois la longueur du tableau d'origine

5. Méthodes courantes dans l'interface de liste

1. Ajoutez l'élément spécifié à la position spécifiée dans la collection.
public void add (index int, élément E)

2. boolean addAll (int index, Collection <? Extends E> c)
Insère tous les éléments de la collection c à la position spécifiée. Si la collection change, retourne true, sinon retourne false.

3. Renvoyez l'élément à la position spécifiée dans la collection.
public E get (int index)

4. Supprimez l'élément à la position spécifiée dans la liste et renvoyez l'élément supprimé.
public E remove (int index)

5. Remplacez l'élément à la position spécifiée dans l'ensemble par l'élément spécifié et renvoyez l'élément avant la mise à jour.
ensemble E public (index int, élément E)

6, int indexOf (Object o)
renvoie la position d'index de la première occurrence de l'objet o dans la collection de listes, s'il n'y a pas d'objet o dans la collection de listes, il renvoie -1

7.int lastIndexOf (Object o)
renvoie la position d'index du dernier objet o dans la collection de listes

8. List subList (int fromIndex, int toIndex)
renvoie l'ensemble des éléments de l'index fromIndex à toIndex, y compris la gauche et non la droite

Résumé: méthodes courantes
Ajouter: ajouter (objet o):
supprimer: supprimer (index int) / supprimer (objet o)
Modification: définir (index int, objet o)
Vérifier: obtenir (index int)
Insérer: ajouter (index int, E élément)
Longueur: taille ()
Traversal: ① Itérateur Itérateur ② forEach ③ for

Question d'entretien: Distinguer les deux méthodes de suppression dans la liste

 @Test
    public void test2(){
        List list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        updateList(list);
        System.out.println(list);//[1, 2]
    }
    private static void updateList(List list){
//        list.remove(2);
        list.remove(new Integer(2));
    }
    @Test
    public void test(){
        ArrayList list = new ArrayList();

        list.add(123);
        list.add(456);
        list.add(new String("Tom"));
        list.add(false);
        //详细可见Java集合框架(一)-----Collection接口中的Person类
        list.add(new Person("Tom", 20));
        list.add(456);
        //默认调用toString方法
        System.out.println(list);//[123, 456, Tom, false, Person{name='Tom', age=20}]

        //1.public void add(int index, E element)
        list.add(1,"BB");
        System.out.println(list);

        //2、boolean addAll(int index, Collection<? extends E> c)
        List list1 = Arrays.asList(1,2,3);
        list.addAll(list1);
        System.out.println(list.size());//9

        //3.public E get(int index)
        System.out.println(list.get(0));//123

        //4.int indexOf(Object o)
        int i = list.indexOf(456);
        System.out.println(i);//2(前面添加了一个BB),不存在-1

        //5.int lastIndexOf(Object o)
        System.out.println(list.lastIndexOf(456));

        //6.public E remove(int index):可以按照索引和对象两种方法来进行删除
        Object remove = list.remove(0);
        System.out.println(remove);//返回被删除的元素
        System.out.println(list);//[BB, 456, Tom, false, Person{name='Tom', age=20}]

        //7.public E set(int index, E element)
        list.set(1,"C");
        System.out.println(list);

        //8、List<E> subList(int fromIndex, int toIndex)
        List list2 = list.subList(2, 4);//返回被指定的元素,原来的没有变化
        System.out.println(list2);//[Tom, false]
    }
6. Questions d'entrevue: ArrayList LinkedList Vector

Similitudes: les trois classes implémentent l'interface List et les caractéristiques de stockage des données sont les mêmes: stockage de données ordonnées et reproductibles
Différences: voir points 1, 2, 3 et 4 ci-dessus

Publié 19 articles originaux · loué 0 · visites 482

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43244120/article/details/105496895
conseillé
Classement