0

何百もの従業員オブジェクトがあります。従業員オブジェクトには、名前、年齢、給与があります。ある時点で、特定の名前の従業員または従業員を取得する必要があります。

考えてるだけ

HashMap<String, List>

名前をキーに、すべてのオブジェクトをリストに追加します。

私は map がコレクションではないことを知っています:P

地図の代わりに最高のコレクションのアイデア。いつでも取り出せるように。

4

6 に答える 6

2

Employee最初に、関連するすべてのフィールド(名前、年齢、給与など)を含むクラスを作成する必要があります。次に、次を使用できますHashMap

 Map<String, Employee> map = new HashMap<String, Employee>();
于 2013-03-04T15:06:49.820 に答える
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);

あなたはここでより多くの例を見つけることができます

年齢については、30歳を超える従業員を見つけると便利です。

HasArgumentWithValue<Employee, Integer> matcher = Lambda.having(Lambda.on(Employee.class).getAge(), Matchers.greaterThan(30)) 
于 2013-03-05T12:24:56.720 に答える
0

Employeeクラスの name 属性をキーとして使用する場合は、同じ名前の従業員がいないことを確認してください。マップはキー (あなたの場合は文字列) を使用し、各キーは一意である必要があります。そうであれば、HashMap< String name, Employee> で問題ありません。

(すべての属性を持つEmployeeクラスを作成します)

ただし、それらが一意でない場合、多くの従業員が同じ名前を持つ可能性があるため、Employeeクラスに属性を追加することを検討する必要があります。何かのようなもの

private int ID;

次のようにキーとして使用します。

HashMap<int, Employee>

HashMap は、時間の複雑さが非常に優れています。平均して、get()呼び出しは時間 T(n) = O(1) (つまり一定時間) を取得します。プットコールも同様です

于 2013-03-04T15:20:26.780 に答える
0

ある時点で、特定の名前の従業員または従業員を取得する必要があります。

上記の行から、同じ名前の従業員が複数いると思いました。この場合は、guava のMultimapをお勧めします。例: HashMultimap

于 2013-03-04T15:12:12.040 に答える
0

MapはCollectionクラスを拡張しませんが。ただし、Map は Collection の一種です。したがって、目的がHashMapによって提供される場合; それからそれのために行くことを提案します。

 HashMap<String, Employee> map = new HashMap<String, Employee>();
于 2013-03-04T15:04:07.410 に答える
0

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
  }
}
于 2013-03-04T15:11:29.810 に答える