亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在數百萬用戶對象的列表中搜索特定用戶?

如何在數百萬用戶對象的列表中搜索特定用戶?

慕桂英546537 2022-07-27 20:22:54
假設我有一個像下面這樣的用戶類,class User {  int id;  String emailAddress; } 假設我有數百萬這樣的用戶的列表。它可以是任何數組或數組列表或任何東西?,F在,給定一個具有 id 或 emailAddress 的用戶,我如何有效地搜索特定用戶,例如按 id 搜索或按 emailAddress 獨立搜索。
查看完整描述

2 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

我認為有兩種可能的方法可以解決您的問題,兩種解決方案都取決于您當前的架構。

  1. 如果您要從數據庫中獲取用戶數據,則只需進行兩種搜索方法。第一個搜索方法包含用戶 ID 的 where 子句,另一個搜索方法包含用戶電子郵件的 where 子句。

  2. 如果您沒有從數據庫中獲取用戶數據,那么您可以使用已經實現的各種搜索算法。下圖包含一些搜索和排序算法的時間復雜度。但對我來說,最好先使用合并排序對數據進行排序,然后再使用二進制搜索。

http://img1.sycdn.imooc.com//62e12e39000105f505000173.jpg

查看完整回答
反對 回復 2022-07-27
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

使用兩個映射,一個映射 id 到用戶,另一個映射 emailAddress 到用戶,簡單代碼如下:


public class UserCache {

    Map<Integer, List<User>> id2User = new ConcurrentHashMap<>();

    Map<String, List<User>> email2User = new ConcurrentHashMap<>();


    public void initMaps(List<User> users) {

        id2User.putAll(users.stream()

            .collect(Collectors.groupingBy(User::getId)));

        email2User.putAll(users.stream()

            .collect(Collectors.groupingBy(User::getEmailAddress)));

    }


    public List<User> getUsersById(String id) {

        return id2User.get(id);

    }


    public List<User> getUserByEmail(String email) {

        return email2User.get(email);

    }


    public void deleteUserById(String id) {

        List<User> users = id2User.remove(id);

        users.stream()

            .forEach(user -> email2User.remove(user.getEmailAddress()));

    }


    public void deleteUserByEmail(String email) {

        List<User> users = email2User.remove(email);

        users.stream()

            .forEach(user -> id2User.remove(user.getId()));

    }

}


查看完整回答
反對 回復 2022-07-27
  • 2 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號