[java] 기본 int 목록을 만드시겠습니까?

다음과 같이 Java에서 기본 int 또는 기본 요소 목록을 만드는 방법이 있습니까?

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

내가 할 수있는 것 같아 List myList = new ArrayList();

이 목록에 “int”를 추가합니다. 그러나 이것은이 목록에 무엇이든 추가 할 수 있음을 의미합니다.

내 유일한 옵션은 int 배열을 만들고 목록으로 변환하거나 Integer 개체 목록을 만드는 것입니까?



답변

Java에서 모든 변수의 유형은 기본 유형 또는 참조 유형입니다. 일반 유형 인수는 참조 유형이어야합니다. 프리미티브는 확장 Object되지 않으므로 매개 변수화 된 유형에 대한 제네릭 유형 인수로 사용할 수 없습니다.

대신 Integer래퍼 인 클래스를 사용하십시오 int.

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

Java 7을 사용하는 경우 다이아몬드 연산자를 사용하여이 선언을 단순화 할 수 있습니다.

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

자바의 오토 박싱을 사용 하면 필요에 따라 기본 유형 int이가 Integer됩니다.

Autoboxing은 Java 컴파일러가 기본 유형과 해당 객체 래퍼 클래스간에 수행하는 자동 변환입니다.

따라서 다음이 유효합니다.

int myInt = 1;
List<Integer> list = new ArrayList<Integer>();
list.add(myInt);

System.out.println(list.get(0)); //prints 1


답변

Java Collection Framework를 사용할 때 기본 유형을 포함 할 수있는 컬렉션이 없습니다.

그러나 Trove , Colt , Fastutil , Guava 와 같은 기본 유형을 지원하는 다른 Java 컬렉션이 있습니다.

Trove Library를 사용할 때 int가있는 arraylist의 예는 다음과 같습니다.

 TIntArrayList list= new TIntArrayList();

이 목록의 성능은 해당 Integer Wrapper Class에 대한 autoboxing / unboxing이 필요하지 않기 때문에 Java Collections의 정수 ArrayList와 비교할 때 훨씬 좋습니다.


답변

기본 int 또는 Java의 기본 목록을 만드는 방법이 있습니까?

당신은 할 수 없습니다. 당신은 동일한 참조 유형의 목록을 만들 수 있습니다 Integer, String또는 사용자 정의 유형입니다.

List myList = new ArrayList();이 목록에 “int”를 추가 할 수있는 것 같습니다 .

int이 목록에 추가하면 자동으로 Integer래퍼 유형 으로 상자에 표시됩니다 . 그러나 최신 코드에서 원시 유형 목록 을 사용 하거나 해당 문제에 대한 제네릭 유형 을 사용하는 것은 좋지 않습니다 .

이 목록에 무엇이든 추가 할 수 있습니다.

물론 그것은 원시 유형을 사용하는 단점입니다. Cat , Dog , Tiger , Dinosaur 를 모두 하나의 컨테이너에 담을 수 있습니다 .

내 유일한 옵션, int 배열을 만들고 목록으로 변환

이 경우에도 List<Integer>유일 하게 얻을 수 있습니다. 당신이 만들 수있는 방법 List<int>이나 어떤 프리미티브도 없습니다.

당신은 어쨌든 귀찮게해서는 안됩니다. List<Integer>당신 도 int기본 유형을 추가 할 수 있습니다 . 아래 예와 같이 자동으로 박스에 표시됩니다.

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


답변

아파치 프레임 워크에서 ArrayIntList를 사용해보십시오. 기본 int를 보유 할 수 있다는 점을 제외하면 arraylist와 똑같이 작동합니다.

자세한 내용은 여기에서-

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


답변

이건 불가능 해. Java 사양은 제네릭에서 기본 요소를 사용하는 것을 금지합니다. 그러나 boxing 덕분에 if is an int를 만들고 ArrayList<Integer>호출 할 수 있습니다 .add(i)i


답변

Eclipse Collections 에서 사용 가능한 기본 컬렉션을 사용할 수 있습니다 . 이클립스 컬렉션이 List, Set, BagMap모든 프리미티브합니다. 기본 컬렉션의 요소는 기본 요소로 유지되며 권투가 발생하지 않습니다.

다음 과 같이 IntList 를 초기화 할 수 있습니다 .

MutableIntList ints = IntLists.mutable.empty();

a List<Integer>에서 다음 IntList과 같이 변환 할 수 있습니다 .

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

참고 : 저는 Eclipse Collections의 기고자입니다.


답변

컬렉션은 참조 유형 또는 윌 카드 를 지원하는 제네릭을 사용 합니다. 그러나 Integer래퍼를 사용할 수 있습니다.

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