Is there a way to create a list of primitive int or any primitives in java like following?
List myList = new ArrayList();
No there isn't any collection that can contain primitive types when Java Collection Framework is being used.
However, there are other java collections which support primitive types, such as: Trove, Colt, Fastutil, Guava
An example of how an arraylist with ints would be when Trove Library used is the following:
TIntArrayList list= new TIntArrayList();
The performance of this list, when compared with the ArrayList of Integers from Java Collections is much better as the autoboxing/unboxing to the corresponding Integer Wrapper Class is not needed.
This is not possible. The java specification forbids the use of primitives in generics. However, you can create ArrayList<Integer>
and call add(i)
if i
is an int thanks to boxing.
Is there a way to create a list of primitive int or any primitives in java
No you can't. You can only create List of reference types, like Integer
, String
, or your custom type.
It seems I can do
List myList = new ArrayList();
and add "int" into this list.
When you add int
to this list, it is automatically boxed to Integer
wrapper type. But it is a bad idea to use raw type lists, or for any generic type for that matter, in newer code.
I can add anything into this list.
Of course, that is the dis-advantage of using raw type. You can have Cat, Dog, Tiger, Dinosaur, all in one container.
Is my only option, creating an array of int and converting it into a list
In that case also, you will get a List<Integer>
only. There is no way you can create List<int>
or any primitives.
You shouldn't be bothered anyways. Even in List<Integer>
you can add an int
primitive types. It will be automatically boxed, as in below example:
List<Integer> list = new ArrayList<Integer>();
list.add(5);
You can use primitive collections available in Eclipse Collections. Eclipse Collections has List
, Set
, Bag
and Map
for all primitives. The elements in the primitive collections are maintained as primitives and no boxing takes place.
You can initialize a IntList like this:
MutableIntList ints = IntLists.mutable.empty();
You can convert from a List<Integer>
to IntList
like this:
List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);
Note: I am a contributor to Eclipse Collections.