Taille initiale de L'ArrayList

vous pouvez définir la taille initiale d'un ArrayList en faisant

ArrayList<Integer> arr=new ArrayList<Integer>(10);

Cependant, vous ne pouvez pas faire

arr.add(5, 10);

parce qu'il provoque une exception hors limites.

à quoi bon définir une taille initiale si vous ne pouvez pas accéder à l'espace que vous avez alloué?

la fonction add est définie comme add(int index, Object element) donc je n'ajoute pas à l'index 10.

186
demandé sur Null 2012-01-17 18:56:01

12 réponses

vous confondez la taille de la liste des tableaux avec sa capacité:

  • le size est le nombre d'éléments de la liste;
  • la capacité est le nombre d'éléments que la liste peut éventuellement contenir sans réattribution de ses structures internes.

lorsque vous appelez new ArrayList<Integer>(10) , vous définissez la capacité initiale de la liste , pas sa taille. En d'autres termes, lorsqu'elle est construite de cette manière, la liste des tableaux commence sa vie vide.

une façon d'ajouter dix éléments à la liste des tableaux est d'utiliser une boucle:

for (int i = 0; i < 10; i++) {
  arr.add(0);
}

après avoir fait cela, vous pouvez maintenant modifier les éléments à l'index 0..9.

297
répondu NPE 2012-01-17 15:18:52

Si vous voulez une liste de taille prédéfinie, vous pouvez également utiliser:

List<Integer> arr = Arrays.asList(new Integer[10]);
81
répondu Gert Jan Schoneveld 2014-08-28 19:04:34

si vous voulez utiliser des Collections.de remplissage(liste, obj); afin de remplir la liste avec un objet répété alternativement, vous pouvez utiliser le bouton

ArrayList<Integer> arr=new ArrayList<Integer>(Collections.nCopies(10, 0));

la ligne Copie 10 fois 0 dans votre ArrayList

32
répondu Farzan Skt 2016-04-09 15:23:10

"1519140920 de la" Capacité , d'un ArrayList n'est pas la même que celle de son taille . Taille est égal au nombre d'éléments contenus dans le ArrayList (et tous les autres List la mise en œuvre).

la capacité est juste la longueur du tableau sous-jacent qui est utilisé pour stocker les éléments du ArrayList , et est toujours plus grand ou égal à la taille de la liste.

en appelant set(index, element) sur la liste, le index se rapporte au nombre réel des éléments de la liste (=taille) (qui est zéro dans votre code, donc le AIOOBE est lancé), pas à la longueur du tableau (=capacité) (qui est un détail d'implémentation spécifique au ArrayList ).

la méthode set est commune à toutes les applications List , telles que LinkedList , qui n'est pas réellement implémenté par un tableau, mais comme une chaîne d'entrées liées.

Edit : vous utilisez en fait la méthode add(index, element) , pas set(index, element) , mais le principe est le même ici.

16
répondu Natix 2016-02-16 09:42:49

si vous voulez ajouter les éléments avec index, vous pouvez utiliser un tableau.

    String [] test = new String[length];
    test[0] = "add";
9
répondu user3692587 2014-08-13 13:53:59

10 est la capacité initiale de L'AL, pas la taille (qui est 0). Vous devriez mentionner la capacité initiale à une certaine valeur élevée quand vous allez avoir un grand nombre d'éléments, parce qu'il évite la surabondance de la capacité que vous continuez à ajouter des éléments.

8
répondu Bhesh Gurung 2012-01-17 14:57:54

je suppose qu'une réponse exacte à votre question serait:

la mise en place d'une taille initiale sur un ArrayList réduit le nr. parfois, la réattribution de la mémoire interne doit avoir lieu. La liste est soutenue par un tableau. Si vous spécifiez i.e. la capacité initiale 0, déjà à la première insertion d'un élément le tableau interne devrait être redimensionné. Si vous avez une idée approximative du nombre d'éléments que votre liste contiendrait, définir la capacité initiale réduirait le nr. de mémoire réallocations se produisant pendant que vous utilisez la liste.

6
répondu quaylar 2012-01-17 15:13:33

pour le moment, il n'y a aucun élément dans votre liste, donc vous ne pouvez pas ajouter à l'index 5 de la liste quand il n'existe pas. Vous confondez la capacité de la liste avec sa taille actuelle.

appelez Simplement:

arr.add(10)

pour ajouter le nombre entier à votre ArrayList

1
répondu Hunter McMillen 2012-01-17 15:01:36

bien que votre arraylist ait une capacité de 10, la vraie liste n'a pas d'éléments ici. La méthode add est utilisée pour insérer un élément dans la liste réelle. Puisqu'il n'y a pas d'éléments, vous ne pouvez pas insérer un élément dans l'index de 5.

1
répondu roll1987 2014-02-11 07:51:17

si vous voulez ajouter 10 produits à votre ArrayList vous pouvez essayer que:

for (int i = 0; i < 10; i++)
    arr.add(i);

si vous avez déjà déclaré une variable de taille de tableau vous utiliseriez la variable size au lieu du nombre "10'

1
répondu panther 2014-10-12 10:23:35

Cela pourrait aider quelqu'un -

ArrayList<Integer> integerArrayList = new ArrayList<>(Arrays.asList(new Integer[10]));
1
répondu Hrishikesh Kadam 2018-06-14 08:38:41

ArrayList myList = new ArrayList (10);

//  myList.add(3, "DDD");
//  myList.add(9, "III");
    myList.add(0, "AAA");
    myList.add(1, "BBB");

    for(String item:myList){
        System.out.println("inside list : "+item);
    }

/*déclarer la capasité initiale de arraylist n'est rien d'autre que d'économiser le temps de déplacement en interne; lorsque nous ajoutons l'élément en interne, il vérifier la capasité pour augmenter la capasité, vous pourriez ajouter l'élément à l'index 0 initialement puis 1 et ainsi de suite. * /

0
répondu sambhu 2015-03-11 14:15:01