gpt4 book ai didi

java - android - 比较两个非常大的ArrayList,其中一个从firebase检索

转载 作者:行者123 更新时间:2023-12-01 19:31:16 24 4
gpt4 key购买 nike

所以现在我正在尝试显示仅存在于 firebase 数据库“用户”表中的联系人,

所以第一步是获取我的所有联系人(不到一秒就完美完成)第二个是检索我的数据库中的所有用户,只是为了比较两个 Arraylist 以检查我的联系人是否存在于数据库中,如果存在则显示它们(这实际上是场景)

我已经这样做了,但我百分百确定这是一个太慢的算法! ,

如果数据库中有 200 万用户,并且我有 1000 个联系人,那么 1000 * 2,000,000 !!要显示我的联系人(Firebase 数据库中唯一存在的联系人)需要很长时间,

有什么解决办法吗?

这是我的代码

      `
// this means it will load the whole users from database !
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Users");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

contactsList.clear();

// this algorithm means that if there is one million records it will loop through
//all of them
// then add all of them to the list
// takes lots of time actually :(



for(DataSnapshot snapshot : dataSnapshot.getChildren()){
User user = snapshot.getValue(User.class);

for(Contacts contacts : PhonecontactsList){
// if this user phone eqauals the phone we saved in the phone array list
if(user.getPhone().equals(contacts.getPhone())){
// if the user doesn't exist in the list
if (!contactsList.contains(user)) {
// add them
contactsList.add(new User(
user.getId(),
contacts.getUsername(),
user.imageURL,
user.getStatus(),
user.getPhone(),
user.getTyping_to(),
user.getSearch(),
user.getTimestamp()

));
}


}
}


}

UsersAdapter usersAdapter = new UsersAdapter(getContext(), contactsList , false);
contactsRecycler.setAdapter(usersAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {

}
});

`

提前致谢!

最佳答案

从 Firebase 实时数据库等云托管数据库中获取全部 100 万条记录是一个非常糟糕的主意。通过移动连接传输所有这些记录不可能很快。最终用户还可能花费大量数据流量才能获得整套数据。

如果您只需要知道本地数据集中有哪些数据库记录,只需对本地数据集中的每个项目发出一个请求,然后显示存在的记录即可。您可以忽略其他一切。

关于java - android - 比较两个非常大的ArrayList,其中一个从firebase检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59708093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com