2016-11-09 2 views
-1

그래서 나는 코드의이 작은 조각을 얻었다.반환 값

import java.util.*; 

public static void main(String[] args) { 
    ArrayList<String> a = new ArrayList<String>(); 

    a.add(0, "zero"); 
    a.add(1, "one"); 

    if (a.indexOf("two") != 1) { 
     a.add(2, "two"); 
    } 
} 

if 문이있다.

그래서 API 문서에서 indexOf은 지정된 요소 (이 경우 "2")의 색인을 반환하지만이 요소가 목록에 없으면 -1을 반환합니다. != 1은이 반환 값 -14과 다르다는 것을 의미하므로 문이 true이고 if 블록의 명령어가 실행됩니다 (목록에 인덱스 2의 문자열 추가).

맞았습니까?

고마워요.

+2

올바른지, 더 좋은 코드는 먼저'contains' 메소드를 사용합니다 :'if (a.contains ("two") && a.indexOf ("two")! = 1)' –

+0

요소가 특정 위치에 있거나, 그것이 전혀 존재한다면? – shmosel

+0

@RoelStrolenberg 더 나은 코드는 O (n) 대신 O (2n)을 선호합니까? 잘 알고 있습니다. 그리고'contains'는'indexOf (o)> = 0;'으로 구현된다는 것을 알고 계십니까? 그래서 당신은'indexOf'를 두 번 호출하고 있습니다 ... – Tom

답변

0

네, 맞습니다. 그러나, 호기심 왜 사용하지 않는 :

또한
if (!a.contains("two")) { 
    a.add(2, "two"); 
} 

, 왜 당신은 단순히 명시 적으로 인덱스를 제공하지 않고 문자열을 추가하지 않는? 해당 ArrayList는 값이 항상 정렬됩니다.

a.add("zero"); 
    a.add("one"); 

    if (a.indexOf("two") !=1) { 
     a.add("two"); 
    } 

명시 적으로 색인을 제공하지만 조건부로 삽입해도 코드가 쉽게 잘못 될 수 있습니다.