我正在使用 swing 和 awt 库用 Java 编写通讯录应用程序。该应用程序由一个 JList 组成,该 JList 使用 TreeSet 作为抽象列表模型。
TreeSet 用于名为 Contact 的类,该类具有私有比较器类,可根据联系人的名字对联系人进行排序。这private boolean equals(Object o)
如果联系人具有与 O 相同的 mobileNumber(当然是在转换之后),则方法返回 true。
我想在此应用程序中添加搜索功能。我已经进行了搜索 JTextField 并添加了一个 keyListener,我想要做的是按下每个键后,列表会显示一组包含搜索词的缩小结果。 TreeSet 或任何其他集合中有此方法吗?我希望它类似于 iPod 中的音乐应用程序,例如,当您键入字母“f”时,它会列出所有包含字母 F 的歌曲,但只有当您键入“50 cent”时才会列出您想要的歌手的歌曲就会出现。
感谢您的帮助。
如果您想查找以文本开头的所有条目(例如“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]
自从to
参数为subset(from, to)
是独一无二的,你需要的东西显然会更大。在我的示例中,我只是添加了Character.MAX_VALUE
但您可能想要获得更好的上限。请注意,这取决于您的比较器,例如它如何处理大小写差异等。
如果您想使用通配符进行过滤,例如所有包含文本的文本(例如f
会翻译成*f*
),无论如何你都必须迭代并检查所有条目。在这种情况下,使用排序集不会获得任何优势。
编辑:将示例更新为您的数据(也添加我:))。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)