Alustaa Lista Java Yhden Rivi

tässä postitse, aiomme keskustella eri menetelmiä alustaa lista Java yhdellä rivillä.

Javaa kritisoidaan usein sen verbaalisuudesta.,structing it, storing it in a variable, invoking add() method on it n times, and then maybe wrapping it to make it unmodifiable:

1
2
3
4
5
6
7

List<String> list = new ArrayList<>();
list.,lisää (”C”);
luettelo.lisää (”C++”);
lista.lisää (”Java”);
lista = kokoelmat.unmodifiableList(lista);

tässä postitse, aiomme keskustella eri menetelmiä alustaa lista yhden ilmaisun.

matriisit.asList()

Arrays.asList() palaa kiinteä-koko-luettelosta tukena määritelty array. Koska taulukkoa ei voida muokata rakenteellisesti, ei ole mahdollista lisätä osia luetteloon tai poistaa siitä elementtejä., The list will throw an UnsupportedOperationException if any resize operation is performed on it.

1
List<String> fixedLengthList = Arrays.,asList(”C”, ”C++”, ”Java”);

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(Arrays.,asList(”C”, ”C++”, ”Java”));

Java Kokoelmat

Kokoelmat-luokka sisältää useita staattisia menetelmiä, jotka toimivat kokoelmat ja palauttaa uuden kokoelman tukena määritelty kokoelma.

⮚ kokoelmat.addAll()

Collections.addAll() lisää kaikki määritellyt elementit määritelty kokoelma. Lisättävät elementit voidaan määritellä erikseen tai ryhmänä., When elements are specified individually, this method provides a convenient way to add a few elements to an existing collection:

1
2

List<String> list = Collections.EMPTY_LIST;
Collections.,addAll(lista = new ArrayList<String>(), ”C”, ”C++”, ”Java”);

⮚ Kokoelmat.unmodifiableList()

Vaihtoehtoisesti voit kansoittavat kokoelma, käyttäen copy constructor toisesta kokoelma. Yksi tällainen menetelmä on Collections.unmodifiableList() palauttaa unmodifiable näkymä määritettyyn listaan. Kaikki yritykset muuttaa palautettua listaa johtavat UnsupportedOperationException.

⮚ kokoelmat.,singletonList()

Jos haluamme Listan, joka sisältää vain yhden elementin, voimme käyttää Collections.singletonList(), joka palauttaa muuttumaton lista, jotka sisältävät tätä elementtiä. Listalla heitetään UnsupportedOperationException jos sille tehdään jokin muokkausoperaatio.

1
List<String> lista = Collections.,singletonList(”Java”);

Kaksinkertainen Ahdin Alustus

Toinen vaihtoehto on käyttää ”Double Ahdin Alustus”. Tämä luo anonyymin sisäisen luokan, jossa on vain instanssin alustaja. Tämä tekniikka olisi parasta välttää, koska se maksaa ylimääräistä luokan kussakin käyttö ja se omistaa myös piilotettu viittauksia liittäen esimerkiksi ja kaikki kiinni esineitä. Tämä voi aiheuttaa muistivuotoja tai serialisaatiovaikeuksia.,v>2

3
4
5
List<String> lista = new ArrayList<Merkkijono>() {{
add(”C”);
add(”C++”);
add(”Java”);
}};

Java 8

Java 8 Stream API voidaan rakentaa pieni luettelot, hankkimalla stream-staattinen tehdas menetelmiä ja kertyvät input-elementtejä uuden luettelon käyttämällä keräilijöille., For example,

⮚ Collectors.toList()

Collectors.toList() returns a Collector that accumulates the input elements into a new List.

1
2

List<String> list = Stream.of(”C”, ”C++”, ”Java”)
.collect(Collectors.toList());

⮚ Collectors.,toCollection()

The streams collectors make no guarantee on the type of the List returned by toList(). To ensure the returned List is ArrayList, we can use toCollection(Supplier) as shown below:

1
2

List<String> list = Stream.,of (”C”,” C++”,” Java”)
.collect(keräilijät.toCollection(ArrayList::uudet));

⮚ Keräilijöille.collectingAndThen()

voisimme mukauttaa Keräilijä suorittaa ylimääräisiä viimeistely muutosta., Esimerkiksi, voimme mukauttaa toList() keräilijä aina tuottaa unmodifiable lista:

Java 9

Java-9 teki kätevä luoda esiintymiä luettelo, jossa on pieni määrä elementtejä tarjoamalla Lists.of() staattinen tehdas menetelmiä joka luo kompakti, unmodifiable esiintymät se., For example,

1
List<String> unmodifiableList = List.of(”C”, ”C++”, ”Java”);

Java 9 provides 12 overloaded versions of this method –

Note there is a var-args version which can handle any number of elements., Nyt ilmeinen kysymys on, miksi Java 9 on sisällyttänyt niin monia ylimääräisiä menetelmiä, kun vain var-args voi riittää? Syy on siinä, että juoksuajan suoritusetu on hiuksenhieno. Var-argsin versio kulkee todennäköisesti hitaammin kuin varargeja käyttämättömät overloadingit. Tämä johtuu siitä, että jokainen vetoaminen varargs menetelmä aiheuttaa array allokointi ja alustus eikä unohda GC yläpuolella.

kohti Javadoc, Lista tapauksissa luoma List.of() on seuraavat ominaisuudet:

  1. Ne ovat rakenteellisesti muuttumaton., Osia ei voi lisätä, poistaa tai korvata. Soittamalla mutaattorin menetelmä aiheuttaa aina UnsupportedOperationException heitetään. Kuitenkin, jos sisältyvät elementit ovat itse mutable, tämä voi aiheuttaa luettelon sisällön näyttää muuttuvan.
  2. he kieltävät null-alkuaineet. Yritykset luoda niitä null-elementeillä johtavat NullPointerException.
  3. ne ovat sarjamuotoisia, jos kaikki alkuaineet ovat sarjamuotoisia.
  4. elementtien järjestystä luettelossa on sama kuin järjestys jos argumentteja, tai elementtejä edellyttäen, array.,
  5. Ne ovat arvopohjaisia. Soittajien ei pitäisi tehdä oletuksia palautettujen tapausten henkilöllisyydestä. Tehtaat voivat vapaasti luoda uusia instansseja tai käyttää olemassa olevia uudelleen. Siksi identiteetti-herkkä toiminta näissä tapauksissa (viittaus tasa-arvoa (==), identiteetti hash-koodi, ja synkronointi) ovat epäluotettavia ja olisi vältettävä.,

If we need a List that can expand or shrink, we can use –

1
List<String> list = new ArrayList<>(List.,on(”C”, ”C++”, ”Java”));

huomaa, että toisin kuin staattiset metodit, luokat, staattiset metodit, rajapinnat eivät ole perinnöllinen, joten se ei ole mahdollista vedota niitä kautta täytäntöönpanoa luokan, kautta eikä esimerkiksi käyttöliittymän tyyppi.

Guava

Guava tarjoaa myös useita staattinen apuohjelma menetelmiä, jotka liittyvät Luetteloon tapauksissa.,

Alustaa Lista käyttäen Guava Java

Apache Commons Collections

Apache Commons Collections ListUtils luokka tarjoaa unmodifiableList(), joka palauttaa unmodifiable lista tukena annetaan luettelo. Se heittää NullPointerException jos annettu lista on tyhjä ja UnsupportedOperationException jos joku muuttaa operaatio suoritetaan se.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *