2013-03-04 3 views
0

나는 100 개의 직원 오브젝트를 가지고 있습니다. 직원 개체의 이름, 나이, 급여가 있습니다. 특정 시점에 직원을 검색해야합니다.이 컬렉션에 가장 적합한 컬렉션

난 그냥 키에

HashMap<String, List> 

이름을 생각하고, 목록에있는 모든 개체. 나는지도 알고

는 수집되지 않습니다 : P

대신 맵의 최고의 컬렉션을 어떤 생각. 언제든지 검색 할 수 있습니다.

+2

HashMap의 문제점은 무엇입니까? – ppeterka

+0

같은 이름의 페론 있습니까? 그들의 이름에 속임수를 쓸 수 있니? – Kent

답변

0

비록 지도은 확장되지 않습니다 컬렉션 클래스; 그래도 Map은 Collection의 한 종류입니다. 따라서 귀하의 목적이 HashMap에 의해 제공되는 경우; 그러면 그것을 제안 할 것입니다. HashMap의이 맞지 않는 이유

Map<String, Employee> map = new HashMap<String, Employee>(); 
+0

Rai. 나는 이것이 수집의 방식으로 어떻게 실현 될 수 있는지 알고 싶다. 지도가 아닙니다. –

+1

이름을 사용하여 Employee를 검색하려는 경우; 그런 다음 HashMap으로 이동하십시오. –

2
먼저 모든 관련 필드 (이름, 나이, 급여 등)로 Employee 클래스를 만들어야합니다

은 그럼 당신은 HashMap 사용할 수 당신이 (가 모음 인 것처럼) 모든 직원을 반복 할 수 있도록하려면 사용자의 요구는, 그러나, 당신은 여전히 ​​사용할 수 있습니다

Map<String, List<Employee>> map = new HashMap<String, List<Employee>>(); 

// populate your map 

for (List<Employee> list : map.values()) { 
    for (Employee employee : list) { 
    // do something 
    } 
} 
0

나도 몰라 :

HashMap<String, Employee> map = new HashMap<String, Employee>(); 
0
,

직원 또는 직원특정 이름이고 일부는 점이어야합니다.

위의 줄과 같은 이름의 직원이 여러 명 있다고 생각했습니다. 이 경우 구아바의 Multimap을 제안합니다. 예 : 당신은 키와 직원 클래스의 이름 속성을 사용하려면 HashMultimap

+0

감사. 나는 같은 이름을 가진 사람들이있다 !! –

0

는 같은 이름을 가진 직원이없는 있는지 확인하십시오. 지도는 키를 사용하고, 경우에 따라 String을 사용하며 각 키는 고유해야합니다. 그들이 HashMap을 가지고 있다면 괜찮을거야 < 문자열 name, Employee>.

그들이 고유하지 않은 경우, 많은 직원이 같은 이름을 가질 수 그러나

(모든 속성으로 직원 클래스를 생성), 당신은 직원 클래스에 속성을 추가하는 것을 고려한다. 이 같은 키와

private int ID; 

하고 사용 비슷해 :

HashMap<int, Employee> 

HashMap의 시간 복잡도에 매우 좋다. 평균적으로 get() 호출은 시간 T (n) = O (1) (즉, 일정 시간)을 얻습니다. 전화와 동일하게 적용됩니다.

1

List<Employee>이 있고 이름이나 나이 등으로 목록을 필터링하려면 lambdaj이 좋습니다. 고정 수입으로

HasArgumentWithValue<Employee, String> matcher = Lambda.having(Lambda.on(Employee.class).getName(), Matchers.equalTo(name)); 
List<Employee> filteredEmployess = Lambda.filter(matcher, allEmployess); 

위의 코드는 다음과 같습니다 : 여기

는 예를 들어, 당신은 자신의 이름으로 모든 직원을 필터링 할 말을

List<Employee> filteredEmployess = filter(having(on(Employee.class).getName(), equalTo(name)), employees); 

당신은 더 많은 예를 찾을 수 있습니다 here

30 세 이상의 직원을 찾는 것이 유용 할 것입니다.

HasArgumentWithValue<Employee, Integer> matcher = Lambda.having(Lambda.on(Employee.class).getAge(), Matchers.greaterThan(30)) 
관련 문제