如何从List中删除“低于”指定元素的元素

时间:2011-02-23 09:35:24

标签: java list collections

我有List<String>,我使用Collections.sort(...)按字母顺序排序。现在我有一个引用String,我想从List删除所有字符串,这些字符串是“低于”(按字母顺序排列)而不是我的引用字符串。有没有什么好方法可以做到这一点,还是我应该逐个浏览列表并将每条记录与参考值进行比较?

修改 既然有人在这里要求工作解决方案,那就是。 originalListList<String> ...此解决方案将丢失重复项

String filterString = "...";
TreeSet<String> tSet = new TreeSet<String>(originalList);
List<String> filteredResources = new ArrayList<String>(tSet.tailSet());

3 个答案:

答案 0 :(得分:4)

如果没有重复项,那么您可以这样做:

  1. 使用TreeSet constructor that takes a collection
  2. 创建一个TreeSet
  3. 现在只需致电TreeSet.tailSet(refString)

答案 1 :(得分:0)

一旦它被排序,使用ListIterator迭代列表并执行比较将是微不足道的。一旦你比较未命中,你知道你可以停止迭代,因为你的列表已经排序。

但请注意,排序是一项相对昂贵的操作,因此从头到尾迭代列表执行比较会更有效。


您还可以使用一种算法来检查中间(list.size()/2)元素,然后再次向上或向下移动结果集的一半,依此类推,直到找到收敛点。

E.g。使用列表"f"查找{"a", "b", "c", "d", "e", "f", "g"}会对中间元素"d"执行比较,然后查看后半部分"f"的中间{"e", "f", "g"}元素立即找到,算法可以停止。

答案 2 :(得分:-1)

这是我能想到的最佳方式。

  1. 对列表进行排序
  2. 从最低点开始逐个浏览列表。
  3. 到达一个点,直到列表元素高于你拥有的那个。
  4. 突破循环。
  5. 记下此索引并使用此索引使用subList函数拆分列表。