ebben a bejegyzésben különféle módszereket tárgyalunk a lista inicializálására Java-ban egyetlen sorban.
a Java-t gyakran kritizálják a verbositás miatt.,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.,add (“C”);
lista.add (“C++”);
lista.add (“Java”);
list = gyűjtemények.unmodifiableList(lista);
|
ebben a bejegyzésben lesz különböző módszerek inicializálni lista egyetlen kifejezés.
tömbök.asList ()
Arrays.asList()
visszaadja a megadott tömb által támogatott rögzített méretű listát. Mivel egy tömb szerkezetileg nem módosítható, nem lehet elemeket hozzáadni a listához, vagy eltávolítani az elemeket., 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 Collections
Collections class áll több statikus módszerek működnek gyűjtemények és vissza egy új gyűjtemény által támogatott egy meghatározott gyűjtemény.
⮚ gyűjtemények.addAll()
Collections.addAll()
hozzáadja az összes megadott elemet a megadott gyűjteményhez. A hozzáadandó elemeket külön-külön vagy tömbként lehet megadni., 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(list = new ArrayList<String>(), “C”, “C++”, “Java”);
|
h5 > ⮚ gyűjtemények.unmodifiableList ()
Alternatív megoldásként egy gyűjteményt feltölthet egy másik gyűjtemény másolástervezője segítségével. Az egyik ilyen módszer a Collections.unmodifiableList()
a megadott lista módosíthatatlan nézetét adja vissza. A visszaküldött lista módosítására tett kísérletek UnsupportedOperationException
értéket eredményeznek.
⮚ gyűjtemények.,singletonList ()
Ha csak egyetlen elemet tartalmazó listát akarunk, akkor a Collections.singletonList()
– t használhatjuk, amely az elemet tartalmazó változatlan listát adja vissza. A lista egy UnsupportedOperationException
– t dob, ha bármilyen módosítási műveletet hajtanak végre rajta.
1
|
list< string > list = gyűjtemények.,singletonList (“Java”);
|
Double Brace Inicialization
egy másik alternatíva a”Double Brace Inicialization” használata. Ez létrehoz egy névtelen belső osztály csak egy példány inicializáló benne. Ezt a technikát a legjobban el kell kerülni, mivel minden használat során extra osztályba kerül, valamint rejtett hivatkozásokat tartalmaz a körülzáró példányra és az elfogott tárgyakra. Ez memóriaszivárgást vagy szerializációs problémákat okozhat.,v>2
Java 8
A Java 8-Patak API felhasználhatják kis listák által megszerzése patak a statikus gyári módszerek felhalmozódó a bemeneti elemek egy új lista segítségével a gyűjtők., 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.,(“C”, “C++”, “Java”)
.Gyűjtse össze(gyűjtők.toCollection(ArrayList:: új));
|
⮚.collectingAndThen ()
tudtunk alkalmazkodni a kollektor, hogy végre egy további befejező átalakulás., Például tudunk alkalmazkodni a toList()
gyűjtő, hogy mindig készítsen egy unmodifiable lista:
Java 9
Java 9 tette kényelmes, hogy hozzon létre esetben a lista kicsi számok elemek azáltal, hogy a Lists.of()
statikus gyári módszerek, hogy létrehoz kompakt, unmodifiable esetben ez., 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., Most a nyilvánvaló kérdés az, hogy a Java 9 miért tartalmaz olyan sok extra módszert, amikor csak a var-args elegendő? Ennek oka az, hogy van egy finom futási teljesítmény előny. A var-args verzió valószínűleg lassabban fut, mint a varargokat nem használó túlterhelések. Ennek az az oka, hogy a varargs-módszer minden meghívása tömb allokációt és inicializálást eredményez, és nem felejti el a GC overhead-et.
A Javadoc szerint a List.of()
által létrehozott Listapéldányok a következő jellemzőkkel rendelkeznek:
- strukturálisan változatlanok., Az elemeket nem lehet hozzáadni, eltávolítani vagy kicserélni. Bármely mutátor módszer hívása mindig a
UnsupportedOperationException
dobását eredményezi. Ha azonban a mellékelt elemek maguk is megváltoztathatók, akkor a lista tartalma megváltozhat. - letiltják a null elemeket. A null elemekkel történő létrehozásuk kísérlete a
NullPointerException
értéket eredményezi. - szerializálhatók, ha minden elem szerializálható.
- a listában szereplő elemek sorrendje megegyezik a megadott argumentumok vagy a megadott tömb elemeinek sorrendjével.,
- értékalapú. A hívóknak nem szabad feltételezéseket tenniük a visszaküldött példányok személyazonosságáról. A gyárak szabadon hozhatnak létre új példányokat, vagy újra felhasználhatják a meglévőket. Ezért az ilyen esetekre vonatkozó identitásérzékeny műveletek (reference equality (==), identity hash code, and synchronization) megbízhatatlanok, ezért kerülni kell őket.,
If we need a List that can expand or shrink, we can use –
1
|
List<String> list = new ArrayList<>(List.,a(“C”, “C++”, “Java”));
|
Kérjük, vegye figyelembe, hogy ellentétben a statikus módszerek osztályok, statikus módszerek felületek nem örökölt, így nem lehet idézni őket, keresztül egy végrehajtási osztály, sem a via egy példányát a felületet.
Guava
a Guava számos statikus segédprogramot is biztosít a listás példányokhoz.,
Inicialize List using Guava in Java
Apache Commons Collections
Apache Commons Collections ListUtils
class provides unmodifiableList()
ez egy módosíthatatlan listát ad vissza, amelyet az adott lista támogat. NullPointerException
, ha az adott lista null, és egy UnsupportedOperationException
, ha bármilyen módosítási műveletet hajtanak végre rajta.