John Squirrels
Nivå
San Francisco

Java-liste

Publisert i gruppen
Java Collection Framework inneholder svært nyttige grensesnitt og klasser som implementerer dem for arbeid med datastrukturer. Det kan sies at dette er et av de viktigste JDK-rammeverkene. List-grensesnittet er veldig populært. fordi uten alle slags lister i programmering er det uunnværlig. I denne artikkelen vil vi dekke dette grensesnittet, Java List-metoder og implementeringer.

Java List Interface

Det viktigste med en liste er at det er en ordnet samling. Du kan også kalle det en sekvens. I Java er lister homogene, det vil si at elementene i listen er av samme datatype. Java List-grensesnitt arver fra Collection, det arver alle operasjonene. I tillegg til dem er følgende operasjoner også mulige i List:
  • Posisjonell tilgang. Hvert element har en indeks og kan manipuleres basert på deres posisjon. i listen. Det vil si at du kan legge til, ekskludere og endre elementer.
  • Søk. Du kan finne et element i en liste etter innholdet og returnere dets indeks.
  • Iterasjon. Den sekvensielle karakteren til List tillater bruk av iterasjonsmetoder (listIterator).
  • Avstandsvisning. Underlistemetoden utfører vilkårlige områdeoperasjoner på listen.

Java-listemetoder

Ovennevnte operasjoner er eksponert i metodene til Java List-grensesnittet. Her er noen av dem:
Metode Beskrivelse
add(E element) Denne metoden legger til elementelement på slutten av denne listen.
add(int indeks, element) Metoden legger til et element ved en bestemt indeks i listen. Hvis en nødvendig parameter sendes, legger den til elementet på slutten av listen.
addAll(int-indeks, samlingssamling) Legger til alle elementene i den gitte samlingen til listen. Hvis en enkelt parameter sendes, legger den til alle elementene i den gitte samlingen på slutten av listen.
størrelse() Returnerer størrelsen på listen (antall elementer i listen).
get (int indeks) Returnerer elementet ved den angitte indeksen.
sett(int indeks, element) Erstatter elementer ved en gitt indeks med det nye elementet og returnerer elementet som ble erstattet av et nytt element.
remove(int index) Fjerner et element fra den angitte indeksen.
fjerne (element) Fjerner den første forekomsten av det gitte elementet i listen.
klar() Fjerner alle elementene fra listen.
indexOf(element) Returnerer den første forekomsten av det gitte elementet. Hvis elementet ikke er til stede i listen, returnerer -1 .
lastIndexOf(element) Returnerer siste forekomst av det gitte elementet. Hvis elementet ikke er til stede i listen, returnerer -1 .
lik (element) Sammenlign likheten til det gitte elementet med elementene i listen.
hashkode() Returner hashkodeverdien til den gitte listen.
er tom() Sjekker om listen er tom. Returnerer sann hvis listen er tom.
inneholder(element) Sjekker om listen inneholder elementet . Returnerer sann hvis listen inneholder elementet.
containsAll (samlingssamling) Sjekker om listen inneholder all samlingen av elementer.
sorter (sammenligningskomp) Sorterer elementene i listen på grunnlag av den gitte komparatoren.
subList(int fromIndex, int toIndex) Returnerer en visning av delen av denne listen mellom spesifisert fromIndex, inklusive, og toIndex, exclusive.

Listeimplementering

Fordi List er et grensesnitt, må programmer lage en konkret implementering av det. Du kan velge mellom følgende listeimplementeringer i Java Collections API:
  • java.util.ArrayList
  • java.util.LinkedList
  • java.util.Vector
  • java.util.Stack
Den mest populære implementeringen av List-grensesnittet kalt ArrayList. Mye sjeldnere, men du kan fortsatt se bruken av LinkedList i virkelige oppgaver, men Vector og Stack har blitt moralsk foreldet i lang tid, så du vil mest sannsynlig bare finne dem i prosjekter med gammel legacy-kode.

Listegrensesnitterklæring

Du kan erklære en liste i Java-program på en av følgende måter:

List<String> myList = new ArrayList();
List myList1 = new ArrayList();
List myList3 = new ArrayList<String>();
ArrayList arrayList = new ArrayList();
Det er best å erklære en ny liste via et grensesnitt. På samme måte kan du deklarere andre implementeringer av List. Den korteste veien:

Vector myVector = new Vector;
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
Med en slik erklæring bestemmes datatypen til elementene i slike lister under initialiseringen av listen, det vil si når elementer legges til der.

List myList = new ArrayList<String>();
Vector myVector = new Vector();
LinkedList linkedList = new LinkedList();
Stack stack = new Stack();
stack.add("Paul");
linkedList.add(1);
myVector.add(1.2f);
myList.add('a');
Nå kan bare strenger legges til stabelen vår, heltall til linkedList , flyter til myVector , og myList er en liste over tegn.

Hvordan ArrayList fungerer

Hvis du allerede er kjent med vanlige arrays, er du også litt kjent med ArrayList. Faktisk er ArrayList en dynamisk matrise, og inne i den er en vanlig matrise. Denne matrisen fungerer som et datalager. ArrayList lagrer kun referansetyper, eventuelle objekter, inkludert tredjepartsklasser, strenger, utdatastrømmer og andre samlinger. Wrapper-klasser brukes til å lagre primitive datatyper i ArrayList. Når du oppretter en liste, kan vi umiddelbart angi størrelsen, men i de fleste tilfeller gjør vi det ikke. Som standard er ArrayList-størrelse = 10. Hvordan ser det ut å legge til et nytt element i en ArrayList? Først av alt startes en sjekk for å se om det er nok plass i den interne matrisen og om ett element til vil passe. Hvis det er plass, legges det nye elementet til på slutten av listen, det vil si cellen som følger etter det siste elementet. Indeksen vil være arraylist.size(). Hvis vi nettopp har laget listen vår og den er tom, betyr dette at arrayList.size() = 0. Følgelig vil et nytt element bli lagt til cellen med indeks 0. Hvis det viser seg at det ikke er nok plass, vil en ny array opprettes inne i ArrayList med størrelsen (størrelsen på OldArray * 1.5) + 1. Etter samme prinsipp skjer en innsetting midt i listen, men samtidig blir alle elementene som følger det innsatte elementet. flyttet til høyre. Så hvis vi har 5 elementer i matrisen, og vi trenger å sette inn et element i celle nummer 2 (det vil si den tredje), så forblir 0 og 1 matriseelementer på plass, et nytt element vises i celle 2, og forgjengeren går til den tredje cellen og så videre. et nytt element vil bli lagt til cellen med indeks 0. Hvis det viser seg at det ikke er nok plass, opprettes en ny array inne i ArrayList med størrelsen (størrelsen på OldArray * 1.5) + 1. Av samme prinsippet skjer en innsetting midt på listen, men samtidig forskyves alle elementer som følger det innsatte elementet mot høyre. Så hvis vi har 5 elementer i matrisen, og vi trenger å sette inn et element i celle nummer 2 (det vil si den tredje), så forblir 0 og 1 matriseelementer på plass, et nytt element vises i celle 2, og forgjengeren går til den tredje cellen og så videre. et nytt element vil bli lagt til cellen med indeks 0. Hvis det viser seg at det ikke er nok plass, opprettes en ny array inne i ArrayList med størrelsen (størrelsen på OldArray * 1.5) + 1. Av samme prinsippet skjer en innsetting midt på listen, men samtidig forskyves alle elementer som følger det innsatte elementet mot høyre. Så hvis vi har 5 elementer i matrisen, og vi trenger å sette inn et element i celle nummer 2 (det vil si den tredje), så forblir 0 og 1 matriseelementer på plass, et nytt element vises i celle 2, og forgjengeren går til den tredje cellen og så videre. en innsetting skjer midt på listen, men samtidig forskyves alle elementer som følger det innsatte elementet mot høyre. Så hvis vi har 5 elementer i matrisen, og vi trenger å sette inn et element i celle nummer 2 (det vil si den tredje), så forblir 0 og 1 matriseelementer på plass, et nytt element vises i celle 2, og forgjengeren går til den tredje cellen og så videre. en innsetting skjer midt på listen, men samtidig forskyves alle elementer som følger det innsatte elementet mot høyre. Så hvis vi har 5 elementer i matrisen, og vi trenger å sette inn et element i celle nummer 2 (det vil si den tredje), så forblir 0 og 1 matriseelementer på plass, et nytt element vises i celle 2, og forgjengeren går til den tredje cellen og så videre.

Java-listeeksempel (arraylist-realisering)


import java.util.*;

public class ArrayListExample2 {
   public static void main(String[] args) {
       List<String> myFriendsList = new ArrayList();
       //we created list of some objects 
       System.out.println( "the size of myList before init = " + myFriendsList.size());
       myFriendsList.add("Alex");
       myFriendsList.add("Tanya");
       myFriendsList.add("Veloxy");
       myFriendsList.add("Alex");
       myFriendsList.add("Andrew");
       System.out.println(myFriendsList);
       System.out.println( "the size of myList after init = " + myFriendsList.size());

       myFriendsList.add("Ihor");
       System.out.println(myFriendsList);
       System.out.println("the size of my list = " +  myFriendsList.size());


       //here the program will print out the first appearance of "Alex" element
       System.out.println(myFriendsList.indexOf("Alex"));
       //program will print out the first appearance of "Alex" element starting from the element 0

       myFriendsList.remove(3);
       System.out.println(myFriendsList.get(3));
       System.out.println("after removing one of Alex's there is only one Alex: " + myFriendsList);
       System.out.println(myFriendsList.get(1));



       myFriendsList.clear();
       System.out.println("the size of the vector after clear method = " +  myFriendsList.size());

   }
}
Her er resultatet av dette programmet:
størrelsen på min liste før init = 0 [Alex, Tanya, Veloxy, Alex, Andrew] størrelsen på min liste etter init = 5 [Alex, Tanya, Veloxy, Alex, Andrew, Ihor] størrelsen på listen min = 6 0 Andrew etter fjerner en av Alex er det bare en Alex: [Alex, Tanya, Veloxy, Andrew, Ihor] Tanya størrelsen på vektoren etter clear-metoden = 0 Prosessen avsluttet med utgangskode 0

Hvordan LinkedList fungerer

I en LinkedList er elementene faktisk lenker i samme kjede. Hvert element, i tillegg til dataene det lagrer, har en kobling til forrige og neste element. Disse koblingene lar deg navigere fra ett element til et annet. Iteratoren støtter traversering i begge retninger. Implementerer metoder for å hente, fjerne og sette inn i begynnelsen, midten og slutten av en liste. Lar deg legge til alle elementer, inkludert null. LinkedList implementerer to grensesnitt - ikke bare List, men også Deque. Dette gir muligheten til å lage en toveis kø fra alle elementer, til og med null. Hvert objekt plassert i den koblede listen er en node (node). Hver node inneholder et element, en lenke til forrige og neste node. Faktisk består den koblede listen av en sekvens av noder, som hver er designet for å lagre et objekt av typen som ble definert da det ble opprettet.

Kode eksempel


import java.util.*;
public class LinkedListTest {

       public static void main(String args[]){

           List myLinkedList= new LinkedList<Integer>();
           myLinkedList.add(1);
           myLinkedList.add(2);
           myLinkedList.add(4);
           System.out.println("three added elements: " + myLinkedList);
           myLinkedList.add(5);
           myLinkedList.remove(1);
           System.out.println(myLinkedList);
           myLinkedList.size(); //3
           
           //add new element at the specified position:
           myLinkedList.add(2,7);
           System.out.println(myLinkedList);
                }
       }
Utgangen er her:
tre tilføyde elementer: [1, 2, 4] [1, 4, 5] [1, 4, 7, 5]

Eksempel på vektorkode

Vector er også en dynamisk array-realisering og er veldig lik ArrayList, men synkronisert og har noen eldre metoder som samlingsrammeverket ikke inneholder. Her er et enkelt eksempel på denne klassebruken.

import java.util.Vector;

public class VectorExample1 {

   public static void main(String[] args) {
       Vector vector = new Vector();
       System.out.println("the size of the empty vector = " +  vector.size());
       vector.add("Alex");
       vector.add("Tanya");
       vector.add("Andrew");
       System.out.println(vector);
       vector.add("Alex");
       vector.add("Ihor");
       System.out.println(vector);
       System.out.println("the size of the vector = " +  vector.size());
       System.out.println("the first element of the vector = " + vector.firstElement());

       //here the program will print out the first appearance of "Johnny" element
       System.out.println(vector.indexOf("Andrew"));
       //program will print out the first appearance of "Johnny" element starting from the element 1
       System.out.println(vector.indexOf("Alex", 1));
       System.out.println(vector);
       vector.clear();
       System.out.println("the size of the vector after clear method = " +  vector.size());

   }
}
Utgangen er:
størrelsen på den tomme vektoren = 0 [Alex, Tanya, Andrew] [Alex, Tanya, Andrew, Alex, Ihor] størrelsen på vektoren = 5 det første elementet i vektoren = Alex 2 3 [Alex, Tanya, Andrew, Alex, Ihor] størrelsen på vektoren etter klarmetode = 0 Prosessen avsluttet med utgangskode 0

Java Stack klassekode Eksempel


import java.util.Stack;

public class StackTest {
   public static void main(String[] args) {
       Stack stack = new Stack();
       System.out.println(stack.isEmpty());
       stack.add("Paul");
       stack.add("Johnny");
       stack.add("Alex");
       System.out.println(stack.isEmpty());
       stack.push("Andrew");
       System.out.println(stack);
       stack.pop();
       System.out.println(stack);
   }
}
Stack har ikke bare add() og remove() metoder, men også push og pop, de er klassiske for slik datastruktur. Stabelen følger regelen "først inn, sist ut" - dette er en slik anti-kø. Derfor åpner pop-operasjonen elementet som sist ble plassert på stabelen. Her er resultatet av vårt eksempel:
sant usant [Paul, Johnny, Alex, Andrew] [Paul, Johnny, Alex]
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION