Java 在包含嵌套元素的列表中搜索元素的最佳方法是什么?
我有两门课:Java 在包含嵌套元素的列表中搜索元素的最佳方法是什么?,java,search,Java,Search,我有两门课: public class ChatGroup{ final public String name; private List<ChatContact> contacts; /* ---getters/setters/constructors-- */ } public class ChatContact implements Parcelable, Comparable { final public String name; f
public class ChatGroup{
final public String name;
private List<ChatContact> contacts;
/* ---getters/setters/constructors-- */
}
public class ChatContact implements Parcelable, Comparable {
final public String name;
final public String jid;
public Status status;
/* ---getters/setters/constructors-- */
}
公共类聊天组{
最终公共字符串名称;
私人名单联系人;
/*---获取者/设置者/构造函数--*/
}
公共类ChatContact实现可包裹、可比较{
最终公共字符串名称;
最终公共字符串jid;
公众地位;
/*---获取者/设置者/构造函数--*/
}
然后我有一个聊天组项目列表:
List<ChatGroup> chatGroupList = .....;
List chatGroupList=。。。。。;
正如您所看到的,每个聊天组都有一个聊天联系人列表,我需要的是在聊天组列表中搜索与查询匹配的聊天联系人(按用户名搜索)
我正在做的一个方法是,做一个辅助列表,搜索每个组,并查看“内部”是否存在聊天联系人,如果存在,我添加带有联系人的组:
private List<ChatGroup> searchContacts(String query) {
List<ChatGroup> filteredContacts = new ArrayList<>();
for (ChatGroup chatGroup : chatGroupList) {
ChatGroup auxChatGroup = new ChatGroup(chatGroup.name);
for (ChatContact chatContact : chatGroup.getContacts()) {
if (chatContact.name.toLowerCase().contains(query)) {
auxChatGroup.addContact(chatContact);
}
}
if (auxChatGroup.getContacts().size() > 0)
filteredContacts.add(auxChatGroup);
}
for (ChatGroup chatGroup : filteredContacts) {
Collections.sort(chatGroup.getContacts());
}
return filteredContacts;
}
私人列表搜索联系人(字符串查询){
List filteredContacts=new ArrayList();
用于(聊天组聊天组:聊天组列表){
ChatGroup auxChatGroup=新的聊天组(ChatGroup.name);
对于(ChatContact ChatContact:chatGroup.getContacts()){
if(chatContact.name.toLowerCase().contains(查询)){
auxChatGroup.addContact(chatContact);
}
}
如果(auxChatGroup.getContacts().size()>0)
filteredContacts.add(auxChatGroup);
}
用于(聊天组聊天组:filteredContacts){
Collections.sort(chatGroup.getContacts());
}
返回过滤器安装的触点;
}
所有这些都很完美。但是现在,这个列表中只有很少的组,每个组都有很少的联系人,但是在将来,元素的数量会很大,这可能是一个“缓慢”的解决方案
所以我的问题是,有另一种更快的方法来进行这种类型的搜索吗?不幸的是,如果你真的要搜索像“a”这样的东西,并且想要每个名字中任何一点都有字母a的人,那么这种类型的搜索并不能很好地索引 但是看看你的算法,我看到了一些可能的改进
ChatGroup auxChatGroup=null
并仅在找到与筛选器匹配的结果时创建对象。如果有很多房间,这将避免创建一些不必要的对象您总是按
名称搜索吗
还是也要按其他属性搜索?总是按名称搜索,因为我有一个视图,带有一个可扩展的列表,它以家长、每个组和孩子的身份显示每个组下面的联系人。并且用户必须能够在该列表中搜索。为什么要使用该名称进行包含搜索?你真的要去搜索像“a”这样的东西,并且想要每个名字中有字母a的人吗?这种类型的搜索没有很好的索引。是的。。我知道这不是一个好的搜索方式。最好在名字的开头搜索,但是,老板希望这样,所以…:/我会尽力说服他,但他太心胸狭窄了。