Create a List of primitive int?

后端 未结 10 1853
夕颜
夕颜 2020-11-27 12:43

Is there a way to create a list of primitive int or any primitives in java like following?

List myList = new ArrayList();
相关标签:
10条回答
  • 2020-11-27 13:09

    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.

    0 讨论(0)
  • 2020-11-27 13:09

    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.

    0 讨论(0)
  • 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);
    
    0 讨论(0)
  • 2020-11-27 13:15

    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.

    0 讨论(0)
提交回复
热议问题