Как извлечь конкретный объект emp из списка, не просматривая структуру данных - PullRequest
0 голосов
/ 28 июня 2010

У меня есть 65000 записей сотрудников в базе данных. Я получаю все записи и сохраняю как объект сотрудника в списке в качестве кэша. когда клиент вводит emp 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
}

1 Ответ

0 голосов
/ 28 июня 2010

1) Я бы реализовал кэш на основе хеш-карты, а не списка:

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

Таким образом, вы можете очень эффективно получить объект Employee по заданному идентификатору.

ДополнительноЯ бы не добавил установщик для идентификатора сотрудника, так как это может повредить отображение.Попробуйте установить идентификатор только через параметр конструктора.

- EDIT -

Если вы ДОЛЖНЫ использовать список:

2) Возможно, вы захотите сначала отсортировать его.Это позволит выполнять бинарный поиск (см. Collections.binarySearch (..) методы).Это требует реализации Comparator или Comparable интерфейса, чтобы определить порядок между объектами Employee.Кроме того, вам нужно будет создавать фиктивный объект Employee с требуемым идентификатором каждый раз, когда вы хотите выполнить поиск.

3) Если производительность не является проблемой, просто используйте List.indexOf (..) * * тысяча двадцать-один.Это требует реализации метода equals (..) в классе Employee.

4) Чтобы сделать это действительно без циклов, вы можете создать разреженный список, содержащий Employee с идентификатором N в индексе N. Этовозможно только в том случае, если диапазон значений идентификатора сотрудника не слишком велик.Преимущество - оптимальное время поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...