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