List og ArrayList i Java
La oss starte introduksjonen til datastrukturen List. Nedenfor finner du et flytskjema som illustrerer hierarkiet for Collections og Lists. Det kan virke som et stort og komplekst diagram, men vi skal gå gjennom det steg for steg.
I denne delen skal du utforske en spesifikk type samling kalt lister. Du skal se nærmere på ulike listetyper, inkludert ArrayList, LinkedList og Stack.
Siden alle lister arver fra List-grensesnittet, kan du opprette objekter ved å bruke foreldregrensesnittet. Men vi skal se nærmere på dette senere.
For nå skal vi diskutere den første typen liste – ArrayList.
Ovenfor ser du syntaksen for å opprette en ArrayList<>. Det er én del du kanskje ikke er kjent med – generics. Vi skal gå gjennom generics og hvordan de opprettes senere.
Foreløpig er det viktig å huske at når du oppretter en ArrayList, må du angi datatypen inne i vinkelklammer. Husk også at lister ikke kan brukes med primitive datatyper. I stedet bruker vi wrapper-klasser.
Nå skal vi opprette en liste i kode og legge til noen objekter ved hjelp av add()-metoden.
Main.java
1234567891011121314package com.example; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> numberList = new ArrayList<>(); numberList.add(10); numberList.add(15); numberList.add(5); System.out.println(numberList); } }
Som du ser, er add()-metoden svært enkel – den legger bare til den angitte verdien i listen.
Husk også at du må importere List og ArrayList fra java.util-biblioteket. Dersom du bruker IntelliJ IDEA, importeres disse bibliotekene automatisk, så du trenger ikke å bekymre deg for det.
Nå skal vi se på et eksempel der vi oppretter en liste med vår egen datatyp:
Main.java
1234567891011121314151617181920212223242526272829303132333435package com.example; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { Dog bob = new Dog("Bob", 2); Dog ben = new Dog("Ben", 1); Dog brian = new Dog("Brian", 5); List<Dog> dogList = new ArrayList<>(); dogList.add(bob); dogList.add(ben); dogList.add(brian); System.out.println(dogList); } } class Dog { String name; int age; public Dog(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
Som du kan se, opprettet vi vår egen klasse Dog og en ArrayList med denne datatypen. Når vi skrev ut listen, viste den alle objektene som var lagret i den.
Hva om du har et array og trenger å konvertere det til en liste? Du kan gjøre dette ved å bruke asList()-metoden fra Arrays-klassen.
Denne metoden lar oss opprette en liste som inneholder de samme elementene som det opprinnelige arrayet. Dette er spesielt nyttig når vi ønsker å bruke listemetoder på et array. Syntaksen er enkel:
Arrays.asList(arrayName);
Og du kan bruke den direkte når du initialiserer en ny liste, for eksempel:
Main.java
12345678910111213141516171819202122232425262728293031323334package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { Dog bob = new Dog("Bob", 2); Dog ben = new Dog("Ben", 1); Dog brian = new Dog("Brian", 5); Dog[] dogs = {bob, ben, brian}; List<Dog> dogList = new ArrayList<>(Arrays.asList(dogs)); System.out.println(dogList); } } class Dog { String name; int age; public Dog(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
Akkurat som du kan konvertere et array til en liste, kan du også konvertere en liste til et array ved å bruke toArray()-metoden.
ArrayList<>-metoder
La oss gå gjennom de grunnleggende listemetodene. Så langt kunne du enkelt ha erstattet lister med arrays, men her er den viktigste forskjellen—metodene.
Metoden add() er en overloadet metode, noe som betyr at den har flere varianter. En av dem lar oss legge til et element på en bestemt indeks.
Når du setter inn et element midt i en liste, vil alle elementene til høyre forskyves én posisjon for å gi plass til det nye elementet.
For eksempel, hvis du legger til et element i begynnelsen av listen, vil alle eksisterende elementer forskyves én posisjon til høyre.
La oss se på et eksempel:
Main.java
123456789101112131415161718package com.example; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> numbers = new ArrayList<>(); for (int i = 0; i < 5; i++) { // Filling `numbers` list with 5 values numbers.add(i); } System.out.println("`numbers` before modifying: " + numbers); numbers.add(2, 10); // Adding 10 on the second index System.out.println("`numbers` after first modifying: " + numbers); numbers.add(0, 5); System.out.println("`numbers` after second modifying: " + numbers); } }
Måten verdiene forskyves på når et element settes inn, kan visualiseres i følgende illustrasjon:
Henting av elementer
Naturligvis, hvis det er mulig å legge til objekter i en liste på en bestemt indeks, kan du også hente objekter ved deres indeks ved å bruke metoden get(int index).
Her er et eksempel:
Main.java
12345678910111213141516171819package com.example; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<String> names = new ArrayList<>(); names.add("Alice"); names.add("Bob"); names.add("Charlie"); names.add("David"); names.add("Eva"); // Retrieving element by index String element = names.get(2); // Retrieving the 3rd element (index starts from 0) System.out.println("The element at index 2 is: " + element); } }
Fjerning av elementer
Du kan legge til, du kan hente ut, men kan du slette?
Selvfølgelig! Du kan fjerne elementer ved å bruke metoden remove(int index).
Denne metoden er også overbelastet, noe som betyr at det finnes en annen måte å fjerne et element på. Du kan bruke metoden remove(Object obj), som sletter den første forekomsten av det angitte elementet.
La oss nå forestille oss at du har en stor liste over alle studentene på kurset vårt. Men én student oppførte seg dårlig og ble utvist. Du kjenner ikke den eksakte indeksen, så du må fjerne dem etter navn. Men det er et problem—koden er litt ødelagt, og navnet deres kan forekomme flere ganger i listen.
La oss skrive et program som fjerner alle forekomster av denne studenten fra listen:
Main.java
123456789101112131415161718package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String[] names = {"Bob", "Alice", "Charlie", "David", "Eva", "Frank", "Grace", "Hank", "Ivy", "Jack", "Katherine", "Leo", "Mia", "Nathan", "Olivia", "Paul", "Quinn", "Rachel", "Sam", "Tom", "Ursula", "Victor", "Wendy", "Xander", "Yvonne", "Zack", "Bob", "Emily", "Bob", "Jake", "Isabel", "Liam", "Nora", "Bob", "Sophia", "Bob", "Daniel", "Gabrielle", "Mike"}; // Expelled student: Bob List<String> students = new ArrayList<>(Arrays.asList(names)); System.out.println("Is Bob present in the list? " + students.contains("Bob")); while (students.contains("Bob")) { students.remove("Bob"); } System.out.println("Is Bob still present in the list after the removal operation? " + students.contains("Bob")); } }
Du har kanskje lagt merke til at vi brukte en annen liste-metode—contains(Object obj). Denne metoden sjekker om det angitte elementet finnes i listen og returnerer true eller false.
Ved å bruke contains(), setter vi betingelsen for while-løkka, slik at vi kan fjerne alle forekomster av en student som "Bob" fra listen.
Forresten, du kan forenkle denne prosessen betydelig ved å bruke metoden removeAll(Collection<?> c):
Main.java
123456789101112131415161718package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String[] names = {"Bob", "Alice", "Charlie", "David", "Eva", "Frank", "Grace", "Hank", "Ivy", "Jack", "Katherine", "Leo", "Mia", "Nathan", "Olivia", "Paul", "Quinn", "Rachel", "Sam", "Tom", "Ursula", "Victor", "Wendy", "Xander", "Yvonne", "Zack", "Bob", "Emily", "Bob", "Jake", "Isabel", "Liam", "Nora", "Bob", "Sophia", "Bob", "Daniel", "Gabrielle", "Mike"}; // Expelled student: Bob List<String> students = new ArrayList<>(Arrays.asList(names)); System.out.println("Is Bob present in the list? " + students.contains("Bob")); List<String> expelledStudents = new ArrayList<>(); expelledStudents.add("Bob"); students.removeAll(expelledStudents); System.out.println("Is Bob still present in the list after the removal operation? " + students.contains("Bob")); } }
Metoden removeAll() tar en samling som parameter, som inneholder verdier som skal fjernes fra listen metoden ble kalt på.
I denne tilnærmingen opprettet vi en samling med utviste studenter og la til "Bob" i den. Dette gjør koden vår lett å utvide—du kan enkelt legge til flere bråkmakere i listen over utviste studenter etter hvert.
Oppdatering av en verdi etter indeks
La oss gå tilbake til listemetoder—nå er det tid for oppdateringsmetoden.
Siden add()-metoden bare flytter alle elementene til høyre når en ny verdi settes inn, trenger vi en annen måte å oppdatere en eksisterende verdi etter indeks.
Metoden set(int index, Object value) gjør nettopp dette:
Main.java
12345678910111213141516package com.example; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> example = new ArrayList<>(); for (int i = 1; i <= 5; i++) { example.add(i); } System.out.println("List before modification: " + example); example.set(2, 28); System.out.println("List after modification: " + example); } }
Dette er ganske enkelt—vi har erstattet elementet på andre indeks med tallet 28.
Andre metoder
Du har allerede gjennomgått de vanligste metodene, men det finnes mange flere. Siden de sjelden brukes, vil vi ikke fokusere på hver enkelt.
I stedet kan du finne alle metodene du trenger—sammen med fullstendig dokumentasjon og detaljerte forklaringer—ved å åpne ArrayList-klassen i IntelliJ IDEA.
For å gjøre dette, importer ArrayList-biblioteket, hold nede Command key (Ctrl for Windows), og klikk på ArrayList. Dette viser deg alle feltene og metodene som er tilgjengelige i klassen, slik at du kan utforske eventuelle metoder du kan ha gått glipp av.
1. Hvilken metode kan vi bruke for å legge til et element ved indeks?
2. Hvilken metode kan vi bruke for å hente et element ved indeks?
3. Hvilken metode kan brukes for å fjerne den første forekomsten av et element?
4. Hvilken metode kan brukes for å erstatte et element ved indeks?
5. Hvilken metode kan brukes for å sjekke om et element er til stede?
6. Kan vi opprette en liste fra et array?
7. Hvordan kan vi opprette en liste fra et array?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Fantastisk!
Completion rate forbedret til 4
List og ArrayList i Java
Sveip for å vise menyen
La oss starte introduksjonen til datastrukturen List. Nedenfor finner du et flytskjema som illustrerer hierarkiet for Collections og Lists. Det kan virke som et stort og komplekst diagram, men vi skal gå gjennom det steg for steg.
I denne delen skal du utforske en spesifikk type samling kalt lister. Du skal se nærmere på ulike listetyper, inkludert ArrayList, LinkedList og Stack.
Siden alle lister arver fra List-grensesnittet, kan du opprette objekter ved å bruke foreldregrensesnittet. Men vi skal se nærmere på dette senere.
For nå skal vi diskutere den første typen liste – ArrayList.
Ovenfor ser du syntaksen for å opprette en ArrayList<>. Det er én del du kanskje ikke er kjent med – generics. Vi skal gå gjennom generics og hvordan de opprettes senere.
Foreløpig er det viktig å huske at når du oppretter en ArrayList, må du angi datatypen inne i vinkelklammer. Husk også at lister ikke kan brukes med primitive datatyper. I stedet bruker vi wrapper-klasser.
Nå skal vi opprette en liste i kode og legge til noen objekter ved hjelp av add()-metoden.
Main.java
1234567891011121314package com.example; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> numberList = new ArrayList<>(); numberList.add(10); numberList.add(15); numberList.add(5); System.out.println(numberList); } }
Som du ser, er add()-metoden svært enkel – den legger bare til den angitte verdien i listen.
Husk også at du må importere List og ArrayList fra java.util-biblioteket. Dersom du bruker IntelliJ IDEA, importeres disse bibliotekene automatisk, så du trenger ikke å bekymre deg for det.
Nå skal vi se på et eksempel der vi oppretter en liste med vår egen datatyp:
Main.java
1234567891011121314151617181920212223242526272829303132333435package com.example; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { Dog bob = new Dog("Bob", 2); Dog ben = new Dog("Ben", 1); Dog brian = new Dog("Brian", 5); List<Dog> dogList = new ArrayList<>(); dogList.add(bob); dogList.add(ben); dogList.add(brian); System.out.println(dogList); } } class Dog { String name; int age; public Dog(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
Som du kan se, opprettet vi vår egen klasse Dog og en ArrayList med denne datatypen. Når vi skrev ut listen, viste den alle objektene som var lagret i den.
Hva om du har et array og trenger å konvertere det til en liste? Du kan gjøre dette ved å bruke asList()-metoden fra Arrays-klassen.
Denne metoden lar oss opprette en liste som inneholder de samme elementene som det opprinnelige arrayet. Dette er spesielt nyttig når vi ønsker å bruke listemetoder på et array. Syntaksen er enkel:
Arrays.asList(arrayName);
Og du kan bruke den direkte når du initialiserer en ny liste, for eksempel:
Main.java
12345678910111213141516171819202122232425262728293031323334package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { Dog bob = new Dog("Bob", 2); Dog ben = new Dog("Ben", 1); Dog brian = new Dog("Brian", 5); Dog[] dogs = {bob, ben, brian}; List<Dog> dogList = new ArrayList<>(Arrays.asList(dogs)); System.out.println(dogList); } } class Dog { String name; int age; public Dog(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Dog{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
Akkurat som du kan konvertere et array til en liste, kan du også konvertere en liste til et array ved å bruke toArray()-metoden.
ArrayList<>-metoder
La oss gå gjennom de grunnleggende listemetodene. Så langt kunne du enkelt ha erstattet lister med arrays, men her er den viktigste forskjellen—metodene.
Metoden add() er en overloadet metode, noe som betyr at den har flere varianter. En av dem lar oss legge til et element på en bestemt indeks.
Når du setter inn et element midt i en liste, vil alle elementene til høyre forskyves én posisjon for å gi plass til det nye elementet.
For eksempel, hvis du legger til et element i begynnelsen av listen, vil alle eksisterende elementer forskyves én posisjon til høyre.
La oss se på et eksempel:
Main.java
123456789101112131415161718package com.example; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> numbers = new ArrayList<>(); for (int i = 0; i < 5; i++) { // Filling `numbers` list with 5 values numbers.add(i); } System.out.println("`numbers` before modifying: " + numbers); numbers.add(2, 10); // Adding 10 on the second index System.out.println("`numbers` after first modifying: " + numbers); numbers.add(0, 5); System.out.println("`numbers` after second modifying: " + numbers); } }
Måten verdiene forskyves på når et element settes inn, kan visualiseres i følgende illustrasjon:
Henting av elementer
Naturligvis, hvis det er mulig å legge til objekter i en liste på en bestemt indeks, kan du også hente objekter ved deres indeks ved å bruke metoden get(int index).
Her er et eksempel:
Main.java
12345678910111213141516171819package com.example; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<String> names = new ArrayList<>(); names.add("Alice"); names.add("Bob"); names.add("Charlie"); names.add("David"); names.add("Eva"); // Retrieving element by index String element = names.get(2); // Retrieving the 3rd element (index starts from 0) System.out.println("The element at index 2 is: " + element); } }
Fjerning av elementer
Du kan legge til, du kan hente ut, men kan du slette?
Selvfølgelig! Du kan fjerne elementer ved å bruke metoden remove(int index).
Denne metoden er også overbelastet, noe som betyr at det finnes en annen måte å fjerne et element på. Du kan bruke metoden remove(Object obj), som sletter den første forekomsten av det angitte elementet.
La oss nå forestille oss at du har en stor liste over alle studentene på kurset vårt. Men én student oppførte seg dårlig og ble utvist. Du kjenner ikke den eksakte indeksen, så du må fjerne dem etter navn. Men det er et problem—koden er litt ødelagt, og navnet deres kan forekomme flere ganger i listen.
La oss skrive et program som fjerner alle forekomster av denne studenten fra listen:
Main.java
123456789101112131415161718package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String[] names = {"Bob", "Alice", "Charlie", "David", "Eva", "Frank", "Grace", "Hank", "Ivy", "Jack", "Katherine", "Leo", "Mia", "Nathan", "Olivia", "Paul", "Quinn", "Rachel", "Sam", "Tom", "Ursula", "Victor", "Wendy", "Xander", "Yvonne", "Zack", "Bob", "Emily", "Bob", "Jake", "Isabel", "Liam", "Nora", "Bob", "Sophia", "Bob", "Daniel", "Gabrielle", "Mike"}; // Expelled student: Bob List<String> students = new ArrayList<>(Arrays.asList(names)); System.out.println("Is Bob present in the list? " + students.contains("Bob")); while (students.contains("Bob")) { students.remove("Bob"); } System.out.println("Is Bob still present in the list after the removal operation? " + students.contains("Bob")); } }
Du har kanskje lagt merke til at vi brukte en annen liste-metode—contains(Object obj). Denne metoden sjekker om det angitte elementet finnes i listen og returnerer true eller false.
Ved å bruke contains(), setter vi betingelsen for while-løkka, slik at vi kan fjerne alle forekomster av en student som "Bob" fra listen.
Forresten, du kan forenkle denne prosessen betydelig ved å bruke metoden removeAll(Collection<?> c):
Main.java
123456789101112131415161718package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { String[] names = {"Bob", "Alice", "Charlie", "David", "Eva", "Frank", "Grace", "Hank", "Ivy", "Jack", "Katherine", "Leo", "Mia", "Nathan", "Olivia", "Paul", "Quinn", "Rachel", "Sam", "Tom", "Ursula", "Victor", "Wendy", "Xander", "Yvonne", "Zack", "Bob", "Emily", "Bob", "Jake", "Isabel", "Liam", "Nora", "Bob", "Sophia", "Bob", "Daniel", "Gabrielle", "Mike"}; // Expelled student: Bob List<String> students = new ArrayList<>(Arrays.asList(names)); System.out.println("Is Bob present in the list? " + students.contains("Bob")); List<String> expelledStudents = new ArrayList<>(); expelledStudents.add("Bob"); students.removeAll(expelledStudents); System.out.println("Is Bob still present in the list after the removal operation? " + students.contains("Bob")); } }
Metoden removeAll() tar en samling som parameter, som inneholder verdier som skal fjernes fra listen metoden ble kalt på.
I denne tilnærmingen opprettet vi en samling med utviste studenter og la til "Bob" i den. Dette gjør koden vår lett å utvide—du kan enkelt legge til flere bråkmakere i listen over utviste studenter etter hvert.
Oppdatering av en verdi etter indeks
La oss gå tilbake til listemetoder—nå er det tid for oppdateringsmetoden.
Siden add()-metoden bare flytter alle elementene til høyre når en ny verdi settes inn, trenger vi en annen måte å oppdatere en eksisterende verdi etter indeks.
Metoden set(int index, Object value) gjør nettopp dette:
Main.java
12345678910111213141516package com.example; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { List<Integer> example = new ArrayList<>(); for (int i = 1; i <= 5; i++) { example.add(i); } System.out.println("List before modification: " + example); example.set(2, 28); System.out.println("List after modification: " + example); } }
Dette er ganske enkelt—vi har erstattet elementet på andre indeks med tallet 28.
Andre metoder
Du har allerede gjennomgått de vanligste metodene, men det finnes mange flere. Siden de sjelden brukes, vil vi ikke fokusere på hver enkelt.
I stedet kan du finne alle metodene du trenger—sammen med fullstendig dokumentasjon og detaljerte forklaringer—ved å åpne ArrayList-klassen i IntelliJ IDEA.
For å gjøre dette, importer ArrayList-biblioteket, hold nede Command key (Ctrl for Windows), og klikk på ArrayList. Dette viser deg alle feltene og metodene som er tilgjengelige i klassen, slik at du kan utforske eventuelle metoder du kan ha gått glipp av.
1. Hvilken metode kan vi bruke for å legge til et element ved indeks?
2. Hvilken metode kan vi bruke for å hente et element ved indeks?
3. Hvilken metode kan brukes for å fjerne den første forekomsten av et element?
4. Hvilken metode kan brukes for å erstatte et element ved indeks?
5. Hvilken metode kan brukes for å sjekke om et element er til stede?
6. Kan vi opprette en liste fra et array?
7. Hvordan kan vi opprette en liste fra et array?
Takk for tilbakemeldingene dine!