W.K*_*K.S 4 java search treeset
我正在使用swing和awt库在Java中编写联系簿应用程序.Application包含一个JList,它使用TreeSet作为abstractListModel.
TreeSet用于名为Contact的类,它具有专用比较器类,可根据联系人的名字对联系人进行排序.private boolean equals(Object o)如果Contact具有与O相同的mobileNumber,则该方法返回true(当然,在转换之后).
我想在此应用程序中添加搜索功能.我已经搜索了JTextField并添加了一个keyListener,我想要做的是按下每个键后,列表会显示一组包含搜索词的缩小结果.TreeSet或任何其他Collection中是否有方法?我希望它与您在iPod中的音乐应用程序中的内容类似,例如,当您键入字母"f"时,它会列出包含字母F的所有歌曲,但只有当您键入"五十美分"时你想要的歌手出现的歌曲.
谢谢你的帮助.
Tho*_*mas 11
如果要查找以文本开头的所有条目(例如"f"),可以使用此subSet(from, to)方法,如下所示:
SortedSet<String> s = new TreeSet<String>(new Comparator<String>() {
public int compare( String s1, String s2 ) {
return s1.compareToIgnoreCase( s2 );
}
});
s.add( "Erich" );
s.add( "Erica" );
s.add( "Erin" );
s.add( "Dave" );
s.add( "Thomas" );
SortedSet<String> result = s.subSet( "e", "e" + Character.MAX_VALUE ); //"e" represents the user input
System.out.println(result);//prints [Erica, Erich, Erin]
result = s.subSet( "Eric", "Eric" + Character.MAX_VALUE );
System.out.println(result); //prints [Erica, Erich]
result = s.subSet( "Erich", "Erich" + Character.MAX_VALUE );
System.out.println(result); //prints [Erich]
Run Code Online (Sandbox Code Playgroud)
由于to参数subset(from, to)为独占,因此您需要的东西显然会更大.在我的例子中,我只是添加了Character.MAX_VALUE但你可能想要获得更好的上限.请注意,这取决于您的比较器,例如它如何处理案例差异等.
如果您想使用通配符过滤,例如包含文本的所有文本(例如,f将转换为*f*),您必须迭代并检查所有条目.在这种情况下,使用有序集合没有任何好处.
编辑:将示例更新为您的数据(同时添加我:)).
| 归档时间: |
|
| 查看次数: |
5008 次 |
| 最近记录: |