Een lijst maken met primitieve int?

Is er een manier om een ​​lijst met primitieve int of andere primitieven in java te maken, zoals het volgende?

List<int> myList = new ArrayList<int>();

Het lijkt erop dat ik List myList = new ArrayList();

kan doen

en voeg “int” toe aan deze lijst. Maar dan zou dit betekenen dat ik alles aan deze lijst kan toevoegen.

Is mijn enige optie, een array van int maken en deze omzetten in een lijst of een lijst met Integer-objecten maken?


Antwoord 1, autoriteit 100%

In Java is het type van een variabele ofwel een primitief type of een referentietype. Generieke typeargumenten moeten referentietypen zijn. Omdat primitieven Object niet uitbreiden, kunnen ze niet worden gebruikt als generieke typeargumenten voor een geparametriseerd type.

Gebruik in plaats daarvan de klasse Integer die een wrapper is voor int:

List<Integer> list = new ArrayList<Integer>();

Als u Java 7 gebruikt, kunt u deze verklaring vereenvoudigen met de diamant-operator:

List<Integer> list = new ArrayList<>();

Bij autoboxing in Java wordt het primitieve type int indien nodig een Integer.

Autoboxing is de automatische conversie die de Java-compiler maakt
tussen de primitieve typen en hun corresponderende objectwrapper
lessen.

Dus het volgende is geldig:

int myInt = 1;
List<Integer> list = new ArrayList<Integer>();
list.add(myInt);
System.out.println(list.get(0)); //prints 1

Antwoord 2, autoriteit 16%

Nee, er is geen verzameling die primitieve typen kan bevatten wanneer Java Collection Framework wordt gebruikt.

Er zijn echter andere Java-collecties die primitieve typen ondersteunen, zoals: Trove, Colt, Fastutil, Guave

Een voorbeeld van hoe een arraylist met ints zou zijn wanneer Trove Library wordt gebruikt, is het volgende:

 TIntArrayList list= new TIntArrayList();

De prestatie van deze lijst is, vergeleken met de ArrayList of Integers van Java Collections, veel beter omdat autoboxing/unboxing naar de corresponderende Integer Wrapper Class niet nodig is.


Antwoord 3, autoriteit 6%

Is er een manier om een ​​lijst met primitieve int of andere primitieven in java te maken

Nee, dat kan niet. U kunt alleen een lijst met referentietypen maken, zoals Integer, String of uw aangepaste type.

Het lijkt erop dat ik List myList = new ArrayList(); kan doen en “int” aan deze lijst kan toevoegen.

Wanneer u int aan deze lijst toevoegt, wordt deze automatisch in een kader geplaatst met het wrappertype Integer. Maar het is een slecht idee om onbewerkte typelijsten te gebruiken, of voor een generiek type wat dat betreft, in nieuwere code.

Ik kan alles aan deze lijst toevoegen.

Dat is natuurlijk het nadeel van het gebruik van onbewerkte tekst. Je kunt Kat, Hond, Tiger, Dinosaurus allemaal in één container hebben.

Is mijn enige optie, een array van int maken en deze omzetten in een lijst

In dat geval krijgt u ook alleen een List<Integer>. U kunt op geen enkele manier List<int> of andere primitieven maken.

Je zou je sowieso geen zorgen moeten maken. Zelfs in List<Integer> kunt u een primitief type int toevoegen. Het wordt automatisch in een kader geplaatst, zoals in onderstaand voorbeeld:

List<Integer> list = new ArrayList<Integer>();
list.add(5);

Antwoord 4, autoriteit 4%

Probeer de ArrayIntList uit het apache-framework te gebruiken. Het werkt precies als een arraylist, behalve dat het primitieve int kan bevatten.

Meer details hier –

https:// commons.apache.org/dormant/commons-primitives/apidocs/org/apache/commons/collections/primitives/ArrayIntList.html


Antwoord 5, autoriteit 3%

Dit is niet mogelijk. De Java-specificatie verbiedt het gebruik van primitieven in generieke geneesmiddelen. U kunt echter ArrayList<Integer> maken en add(i) aanroepen als i een int is dankzij boksen.


Antwoord 6, autoriteit 3%

Je kunt primitieve collecties gebruiken die beschikbaar zijn in Eclipse-collecties. Eclipse Collections heeft List, Set, Bag en Map voor alle primitieven. De elementen in de primitieve collecties worden als primitieven onderhouden en er wordt niet gebokst.

U kunt een IntList ziet er zo uit:

MutableIntList ints = IntLists.mutable.empty();

U kunt als volgt converteren van een List<Integer> naar IntList:

List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);

Opmerking: ik lever een bijdrage aan Eclipse Collections.


Antwoord 7, autoriteit 2%

Collecties gebruiken generieke geneesmiddelen die referentietypen of jokertekens. U kunt echter een Integer wrapper

. gebruiken

List<Integer> list = new ArrayList<>();

Antwoord 8

Als u Java gebruikt voor Android-ontwikkeling, wordt aanbevolen om SparseIntArray te gebruiken om autoboxing tussen int en Integer te voorkomen.

Je kunt meer informatie vinden over SparseIntArray in de Documentatie voor Android-ontwikkelaars en een goede uitleg voor autoboxing op Android voer hier de linkbeschrijving in


Antwoord 9

Is er een manier om een ​​Integer[]-array om te zetten in een int[]-array?

Deze grove omissie in de Java-kernbibliotheken lijkt op te komen in vrijwel elk project waar ik ooit aan werk. En hoe handig de Trove-bibliotheek ook is, ik ben niet in staat om de precieze vereisten te ontleden om te voldoen aan LPGL voor een Android-app die statisch een LGPL-bibliotheek koppelt (in de preambule staat ok, de body lijkt niet hetzelfde te zeggen). En het is gewoon onhandig om Apache-bronnen te rippen en te strippen om deze klassen te krijgen. Er moet een betere manier zijn.


Antwoord 10

Java-verzameling mag alleen verzamelingen van objecten zijn.

List<Integer> integerList = new ArrayList<Integer>();

Geheel getal is wrapperklasse van primitief gegevenstype int.

meer van JAVA-wrapperklassen
hier!

U kunt direct opslaan en int krijgen van/naar integerList als,
integerList.add(intValue);
int intValue = integerList.get(i)

LEAVE A REPLY

Please enter your comment!
Please enter your name here

19 − twelve =

Other episodes