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

标签 java android firebase firebase-realtime-database arraylist

所以现在我正在尝试显示仅存在于 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/

相关文章:

java - 在 WAR 文件中定义 Servlet 上下文

java - 如何找到四个点坐标(矩形)之间的点坐标

android - Handler.postDelayed(...) 不会延迟 Runnable

java - 如何减少 Firestore 集合中的读取次数?

java - 按日期对 Firebase 列表项进行排序和排序,就像在 Android 中的聊天应用程序中一样

java - 无法将 JSON 解析为 recyclerview

android - 在配置更改时更改 DialogFragment 中的布局和保存状态

android - 我可以向 Google Play 提交具有不同包名称和显示名称的相同 APK 吗?

android - Firebase Android NotificationCompat.PRIORITY_HIGH 在应用程序处于后台时无法正常工作

java - 从 Java 源文件生成代码