2017-09-21 5 views
0

나는 내가이 모델의 목록을 가지고 모델찾기 지수

public class Portfolio { 

    private String id; 
    private String name; 

    public Portfolio() { 

    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
} 

을 만들었습니다. 나는 그것에 특정 항목의 위치를 ​​찾고 싶다. 내가 "내가"는 "-1"를 반환 값을 로그온 할 때
나는

Portfolio p = new Portfolio(); p.setId("1"); p.setName("Test"); int i = PortfolioList.indexOf(p); 

을 시도했습니다. 하지만 난 "페이지"개체의 ArrayList에서 사용할 수 있습니다 확신 해요.
난()
루프 를 사용하려는 해달라고. 우리 arraylist에 너무 많은 물건이 있다면, 물건을 찾는 데는 시간이 걸린다 고 생각합니다.

indexOf() 메서드를 사용하는 currect 방법은 무엇입니까?

+0

당신이'PortfolioList'을 만든 방법은? 그것은 질문에 대답하는 데 유용 할 수 있습니다. –

답변

1

확실 p 개체 목록에 존재하지 않는다. 목록에 indexOf을 실행하면 참조를 기반으로 개체를 찾습니다. 따라서 참조가 없으면 객체를 찾을 수 없습니다.

왜 당신이 for 루프를 방지하기 위해시겠습니까? 두 indexOffor 루프가 O (N)에있을 것이다.

그냥 id에 따라 목록의 각 값을 비교하는 for 루프를 작성. 이것이 여기서 가장 좋은 방법입니다.

1

클래스 Portfolio이 java.lang.Object의 equals() 메서드를 재정의하지 않는 것이 문제입니다. 따라서 indexOf()이 요소를 검색 할 때 Object의 equals() 구현을 사용합니다.이 두 객체가 실제로 동일한 인스턴스인지 여부 만 확인하면됩니다. 따라서 것, 그것은 ArrayList의에 저장된 동일한 인스턴스되지 않습니다,

https://javaranch.com/journal/2002/10/equalhash.html

당신은 당신의 코드에서 개체 p를 만든 감안할 때 다음과 같은 자원에 그에 대한 자세한 내용을 볼 수 있습니다 항상 돌아 오지 않는다.

당신의 Portfolio 클래스에 equals()의 구현을 직접 작성하는 방법이 있습니다. 그러나 지루한 일을 스스로 할 필요가 없습니다. 대신, 내가보기 엔 당신이 AutoValue 주석을 사용하는 것이 좋습니다

https://github.com/google/auto/blob/master/value/userguide/index.md

AutoValue 실제로 현재 Portfolio 클래스를 절감하고, 무료로 당신을 위해 equals()hashCode()을 만들 것입니다. 위의 링크를 살펴보면 이것이 도움이 될 것입니다.