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


97

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

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

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

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

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


성능이 문제라면 trove가 도움이 될 것입니다.
assylias 2013-08-02

기본 배열을 사용하여 목록을 만들 수는 있지만 시작할 배열의 크기를 알아야하며 Collections 개체와 함께 제공되는 다른 많은 기능을 잃게됩니다. 하지만 다음과 같이 할 수 있습니다. int [] array = new int [10];
테일러

답변:


144

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

1
따라서 JTable 메소드 setSelectedIndices는
말도 안됩니다

25

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

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

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

 TIntArrayList list= new TIntArrayList();

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


1
Guava에서 기본 컬렉션 구현을 찾을 수 없습니다. 링크를 제공해 주시겠습니까?
nimcap 2014

9

기본 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);

원시 유형에 대한 좋은 토론.
Kevin Bowersox

실제로는 기본 배열을 사용하여 기본 유형으로 목록을 만들 수 있습니다. int [] 배열 = 새로운 int [10];
테일러

1
@Taylor 그러나 그것은 동적으로 증가하는 목록이 아닙니다. 그것은 배열입니다. 그리고 나는 OP가 이미 그것에 대해 알고 있다고 가정합니다.
Rohit Jain


5

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


4

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의 기고자입니다.


3

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

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

0

Android 개발에 Java를 사용 SparseIntArray하는 경우 int와 사이의 오토 박싱 방지를 위해 사용 하는 것이 좋습니다 Integer.

자세한 내용 은 Android 개발자 문서SparseIntArray 에서 찾을 수 있으며 Android의 오토 박싱에 대한 좋은 설명은 여기에 링크 설명을 입력하십시오.


그것은 강력한 진술입니다. 확실히 SparseIntArray더 나은 옵션이긴하지만 알아 두어야 할 장단점이 있습니다. "구현은 항목의 많은 수를 포함 할 수있는 데이터 구조에 적합하기위한 것이 아닙니다 그것은 기존의 HashMap보다 늦어 ...."
앤디 토마스

네, 사실입니다. 그들은 내가 링크 한 비디오에서이 절충안을 꽤 잘 다룹니다. 그러나 OP는 그 특별한 가능성을 요구했고 저는 Android에서 실제로 가능하며 대부분의 사용 사례에도 권장된다는 점을 덧붙이고 싶었습니다. 정보를 추가해 주셔서 감사합니다!
Stefan Medack 2015

0

Integer [] 배열을 int [] 배열로 변환하는 방법이 있습니까?

Java 코어 라이브러리에서 이러한 완전한 누락은 내가 작업 한 거의 모든 프로젝트에서 발생하는 것 같습니다. 그리고 Trove 라이브러리만큼 편리 할 수도 있지만, LGPL 라이브러리를 정적으로 연결하는 Android 앱에 대한 LPGL을 충족하기위한 정확한 요구 사항을 구문 분석 할 수 없습니다 (서문에서 괜찮다고 말하고 본문은 동일하지 않은 것 같습니다). 그리고 이러한 클래스를 얻기 위해 아파치 소스를 찢어 버리는 것은 매우 불편합니다. 더 나은 방법이 있어야합니다.


-4

Java Collection은 Object의 컬렉션이어야합니다.

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

Integer는 원시 데이터 유형 int의 래퍼 클래스입니다.

여기에 JAVA 래퍼 클래스에서 더 많은 !

U는 integerList에서 int를 직접 저장하고 가져올 수 있습니다. integerList.add(intValue); int intValue = integerList.get(i)


1
첫 번째 줄은 컴파일되지 않고 마지막 두 줄은 어디에나 있습니다. 이것을 삼가 해주십시오.
The_Martian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.