2012-03-15 3 views
9

저는 파이썬 코드를 자바로 변환하려고 시도하고 있습니다. 목록의 기본값을 설정해야합니다. 기본값과 목록의 크기를 알고 내 목표는 기본값을 설정 한 다음 나중에 내 프로그램에서 변경하는 것입니다.항목 목록의 기본값을 설정하는 방법은 무엇입니까?

list = [0]*10 

내가 할 노력하고 있어요 : 파이썬에서 나는 단순히이 (0의 값으로 10 개 항목을 만들) 할

List<Integer> list1 = Arrays.asList(0*10); // it just multiples 0 by 10. 

그것은 작동 도다, 나는 이런 식으로 뭔가를 할 수있어 :

for(int i = 0;i<10;i++) 
{ 
    list1.add(0); 
} 

(for 루프 대신) 더 좋은 방법이 있는지 궁금합니다.

+0

목록 대신 배열을 사용할 수 있습니까? –

+0

@MarkByers 정말 중요한 것은 아니지만 그 목록이 더 나은 성능을 가지고 있다는 것을 읽었습니다. 크기가 고정되어 있으므로 그 경로를갔습니다. 그게 내가 사용하는 것보다 끔찍하게 중요하지는 않지만, 나는 배우기 때문에 올바른 일에 적합한 도구를 배우기를 원합니다. –

+1

@learningJava : 아니요, 다른 방법으로는 * 배열 *의 크기가 고정되어 있습니다. 그러나 목록은 일반적으로 더 많은 글꼴입니다. –

답변

18

Arrays.fill 루프를 피할 수 있습니다.

Integer[] integers = new Integer[10]; 
Arrays.fill(integers, 0); 
List<Integer> integerList = Arrays.asList(integers); 
+0

그 목록은 * 고정 * 크기가 될 것입니다. 그것에서 제거하십시오. 그것은 원하거나 될 수도 있습니다. –

+0

@ 존 쉘트, 맞아. 나는 "나는 기본값을 안다. 목록의 크기를 알기 때문에 ..."라고 해석했다. –

+0

이것은 정확합니다. 고정 크기로되어있어서 처음부터 목록을 선택했습니다. 나는 약간 혼란 스럽다. 나는 처음 두 라인을 이해하고, 10 개의 아이템을 가지고있는리스트를 만든 다음 배열을 사용했다. 모든 것을 0으로 채우면 왜 세 번째 라인이 필요한가? –

-1

자바에서는 그렇지 않습니다. 자바는 이런 종류의 물건에 관해서는 상대적으로 장황하다. 그래서 당신이 할 수있는 일은 많지 않다.

+0

위의 답에서 알 수 있듯이 이것은 거짓 진술입니다 –

2

알고있는 한 표준 라이브러리에는 아무 것도 없습니다. 그러나 이러한 메서드를 한 번 작성하고 원하는 곳에서 호출 할 수 있습니다. 예를 들어 :

public static <T> List<T> newArrayList(T value, int size) { 
    List<T> list = new ArrayList<T>(size); 
    for (int i = 0; i < size; i++) { 
     list.add(value); 
    } 
    return list; 
} 

당신이 목록의 크기를 변경하고 싶지는 않을 경우

(즉 추가하거나 요소를 제거), 마이크 사무엘의 대답은 아마도 더 효율적입니다. 또한이 변경 가능한 유형을 사용하는 경우, 당신은 당신이 원하는 것을 얻을 수 없을 수도 있습니다 :

List<StringBuilder> list = newArrayList(new StringBuilder(), 10); 
list.get(0).append("Foo"); 
System.out.println(list.get(5)); // Prints "Foo" 

을 ... 목록의 각 요소가 같은 개체에 대한 참조가 될 것 같은.

3

어쩌면 배열이 필요할까요?

int[] array = new int[10]; 

동적으로 크기를 변경해야하는 경우 목록이 필요합니다. 이 기능이 필요하지 않은 경우 배열이 사용자의 요구에 맞을 수 있으며 자동으로 모든 값을 0으로 초기화합니다.

0

당신이 시도 할 수 :

List<Integer> list1 = Arrays.asList(0, 0, 0, 0, 0, 0, 0, 0, 0, 0); 

10 제로가 있습니다. 컴파일 시간에 요소의 수를 알아야하지만 라인은 하나뿐입니다. 컴파일 할 때 요소의 수를 모르는 경우에는 제안 된 Arrays.fill() 접근 방식을 사용할 수 있습니다.

+2

코드의 관리자가 0이되지 않도록하십시오. 관리자가 코드와 일치한다고 가정 할 수 없으므로 주석은 도움이되지 않습니다. –

+0

나는 그것을 정말로 피하려고 노력했다. 나는 꽤 게으르다. 그렇게 많이 타이핑하는 것을 좋아하지 않는다. 또한 플러스 내 데이터는 몇 천 0입니다 그래서 내가 많이 입력하면 내 키보드 보증을 무효화 할 수 있습니다 :-) –

+0

그래, 그게 정말 적은 초기화 값에 대한 야생 촬영했다. 나는 코드도 좋아하지 않는다. –

0

for 루프를 사용합니다.

BTW ...변경 가능한 목록이 필요한 경우

List<Integer> list = Collections.nCopies(10, 0); 

: 0 * 10 = 0, 그래서 그냥 금액을 입력 당신은 당신이 대신 배열의 목록을 필요로하는 경우

+0

'list.size()'는 0을 반환합니다. –

7

Collections.nCopies

ArrayList<Integer> list = new ArrayList<Integer>(10); 당신의 친구입니다 대신 필요 , 포장 :

List<Integer> list = new ArrayList<>(Collections.nCopies(10, 0)); 
관련 문제