我有List<String>
,我使用Collections.sort(...)
按字母顺序排序。现在我有一个引用String
,我想从List
删除所有字符串,这些字符串是“低于”(按字母顺序排列)而不是我的引用字符串。有没有什么好方法可以做到这一点,还是我应该逐个浏览列表并将每条记录与参考值进行比较?
修改
既然有人在这里要求工作解决方案,那就是。 originalList
为List<String>
...此解决方案将丢失重复项
String filterString = "...";
TreeSet<String> tSet = new TreeSet<String>(originalList);
List<String> filteredResources = new ArrayList<String>(tSet.tailSet());
答案 0 :(得分:4)
如果没有重复项,那么您可以这样做:
答案 1 :(得分:0)
一旦它被排序,使用ListIterator迭代列表并执行比较将是微不足道的。一旦你比较未命中,你知道你可以停止迭代,因为你的列表已经排序。
但请注意,排序是一项相对昂贵的操作,因此从头到尾迭代列表执行比较会更有效。
您还可以使用一种算法来检查中间(list.size()/2
)元素,然后再次向上或向下移动结果集的一半,依此类推,直到找到收敛点。
E.g。使用列表"f"
查找{"a", "b", "c", "d", "e", "f", "g"}
会对中间元素"d"
执行比较,然后查看后半部分"f"
的中间{"e", "f", "g"}
元素立即找到,算法可以停止。
答案 2 :(得分:-1)
这是我能想到的最佳方式。