第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在數(shù)百萬用戶對(duì)象的列表中搜索特定用戶?

如何在數(shù)百萬用戶對(duì)象的列表中搜索特定用戶?

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

2 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

我認(rèn)為有兩種可能的方法可以解決您的問題,兩種解決方案都取決于您當(dāng)前的架構(gòu)。

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

  2. 如果您沒有從數(shù)據(jù)庫中獲取用戶數(shù)據(jù),那么您可以使用已經(jīng)實(shí)現(xiàn)的各種搜索算法。下圖包含一些搜索和排序算法的時(shí)間復(fù)雜度。但對(duì)我來說,最好先使用合并排序?qū)?shù)據(jù)進(jìn)行排序,然后再使用二進(jìn)制搜索。

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

查看完整回答
反對(duì) 回復(fù) 2022-07-27
?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊

使用兩個(gè)映射,一個(gè)映射 id 到用戶,另一個(gè)映射 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()));

    }

}


查看完整回答
反對(duì) 回復(fù) 2022-07-27
  • 2 回答
  • 0 關(guān)注
  • 149 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)