2010-06-28 4 views
0

데이터베이스에 65000 명의 직원 레코드가 있습니다. 난 모든 레코드를 retreiving이며 직원 개체로 목록에 캐시로 저장. 고객이 브라우저에서 emp id를 입력하면 목록을 반복하지 않고 하나의 조건에서 목록에서 레코드를 가져와야합니다. 어떻게 우리가 그것을 습득 할 수 있을까요?데이터 구조를 반복하지 않고 목록에서 특정 emp 개체를 검색하는 방법

indexOf (Object)를 사용하면 equals 메서드를 구현하여 달성 할 수 있지만 비즈니스 로직이 무엇인지 알아야합니다. 여러분의 의견을 알려주십시오.

class Employee 
{ 
private int id; 
private String name; 
Private String address; 


public void setAddress(){} 

public void setId(){} 

public void setName(){} 

// simillarly getMethods 
} 

답변

0

1) 차라리 목록보다 해시 맵을 기반으로 캐시를 구현하는 것이 :

Map cache = new HashMap<Integer, Employee>(); 

이 방법 당신은 매우 효율적으로 주어진 ID에 의해 Employee 객체를 검색 할 수 있습니다.

또한 매핑을 손상시킬 수 있으므로 직원 ID에 대한 설정자를 추가하지 않습니다. id는 생성자 매개 변수를 통해서만 설정하는 것이 좋습니다. 당신이 목록을 사용해야하는 경우

--EDIT--

:

2) 먼저 정렬 할 수 있습니다. 이렇게하면 이진 검색을 수행 할 수 있습니다 (Collections.binarySearch(..) 방법 참조). 이를 위해서는 Comparator 또는 Comparable 인터페이스를 구현하여 Employee 객체 간의 순서를 정의해야합니다. 또한 검색을 수행 할 때마다 필요한 ID가있는 더미 Employee 객체를 만들어야합니다.

3) 성능에 문제가 없다면 List.indexOf(..)을 사용하면됩니다. 이를 위해서는 Employee 클래스에 equals (..) 메소드를 구현해야한다.

4) 정말 루프를 사용하지 않으려면 인덱스 N에 ID가 N 인 Employee를 포함하는 스파 스 목록을 만들 수 있습니다. 이는 직원 ID 값 범위가 너무 크지 않은 경우에만 가능합니다. 이점은 최적의 검색 시간입니다.

+0

@Eyal지도를 사용하고 싶지 않습니다. 목록에 의해서만. –

+0

@Eyal 목록에서하는 방법을 알려주세요 !! –

+0

@Suresh S : @Eyal Schneider의 제안은 귀하의 경우에 가장 적합한 솔루션입니다. 왜 열쇠로 접근하기를 원한다면지도 위에리스트를 선호합니까? – FK82

관련 문제