List

Allikas: Teadmusbaas

List (ArrayList, LinkedList)

Listis on elemendid teatud järjestuses. Põhilise erinevusena massiivist saab listi pikkust programmi töö käigus vabalt muuta, elemente saab erinevatesse kohtadesse lisada ja neid eemaldada. Listi puhul saab elementi append-ida, sõnastikus saab küsida elementi tema (suvalist tüüpi) võtme järgi jne, st. meid huvitab eelkõige mida mingi andmestruktuur “teha oskab”. Reaalsetes programmides aga on tihti vaja teada ka ka seda kuidas seda tehakse. Seetõttu on loodud näiteks erinevaid listitüüpe, millega saab teha samu asju, aga mis sisemas töötavad erinevalt ning seetõttu sobivad eri situatsioonidesse paremini või halvemini (näiteks ühe tuntud listitüübi variatsiooni puhul toimib indekseerimine väga kiiresti aga teise puhul saab väga kiiresti listi algusesse uut elementi lisada). Listile omased operatsioonid on määratud liideses java.util.List. Konkreetse listi loomisel tuleb kasutada mõnd klassi, mis selle liidese realiseerib (nt. ArrayList, LinkedList). Näide:

  import java.util.List;
  import java.util.ArrayList;
  ...
  List<Integer> list = new ArrayList<Integer>();

Põhilised toimingud, mida saab listiga teha: elemendi võtmine indeksi järgi, nt. list.get(2) (NB! indeksid algavad 0-st) elemendi lisamine listi lõppu ( list.add(780); ) või määratud positsioonile ( list.add(3, 780); ) mitme elemendi lisamine ( list.addAll(mingiTeineList); ) elemendi eemaldamine indeksi järgi (list.remove(3)) sisalduvuse kontroll (list.contains(780)) sisalduvuse kontroll koos indeksi tagastamisega (list.indexOf(780)) pikkuse küsimine (list.size())

NB! erinevalt massiividest, ei saa listid sisaldada Java algtüüpi elemente (nt. int, boolean, char), nende asemel tuleb kasutada vastavaid mähisklasse (nt. Integer, Boolean, Character).

Näide - listi koostamine

  import java.util.List;
  import java.util.ArrayList;
  ...
  List<Integer> list1 = new ArrayList<Integer>(); 
  list1.add(1); 
  list1.add(2);
  list1.add(3); 

Liidese List realisatsioonid ArrayList on enamasti kõige efektiivsem viis listide realiseerimiseks - elementide hoidmiseks kasutatakse massiivi. LinkedList hoiab oma elemente mälus eraldi, kasutades listi kooshoidmiseks viitasid. LinkedList on efektiivne, kui on tarvis tihti lisada andmeid listi etteotsa või keskele (või kui on vaja elemente sealt eemaldada). Samas elemendi võtmine indeksi järgi on aeglasem kui ArrayList-i puhul.

Vector on peaaegu sama kui ArrayList, erinevused tulevad välja mitmelõimeliste programmide puhul. Ühelõimeliste programmide puhul soovitatakse kasutada ArrayListi.