在数组列表中,如果你添加一个字符串,然后对它进行排序,然后想删除该字符串之前的所有内容,你会做什么?
答案 0 :(得分:4)
获取新添加元素的索引。使用此索引获取子列表并将子列表传递给removeAll
方法:
<强>卸下强>
//addition = newly added String
list.removeAll(new ArrayList<String>(list.subList(0,list.indexOf(addition))));
完整示例
public class ArrayListSortDelete {
public static void main(String[] args) {
String addition = "BB";
List<String> list = new ArrayList(Arrays.asList(new String[] { "A", "B", "C", "D" }));
list.add(addition);
Collections.sort(list);
System.out.println("Before");
for (String s : list) {
System.out.println(s);
}
//new ArrayList<String>() avoids concurrent modification.
list.removeAll(new ArrayList<String>(list.subList(0,list.indexOf(addition))));
System.out.println("After:");
for (String s : list) {
System.out.println(s);
}
}
}
答案 1 :(得分:3)
这应该没问题
ArrayList<String> yourList;
String query;
int index = yourList.indexOf(query);
for (int a=0; a<index; a++) {
yourList.remove(0);
}
答案 2 :(得分:0)
遍历列表并继续删除元素,直到找到String。
for (int i=0; i<list.size(); i++) {
if (!(list.get(i).equal("String"))) {
list.remove(0);
}
}
答案 3 :(得分:0)
您应该可以使用indexOf和subList来实现这一目标。
考虑阅读链接文档以获取更多信息。
代码示例:
list.subList(0, list.indexOf(searched_string)).clear();
答案 4 :(得分:0)
虽然Kevin Bowersox给出了答案,但我在这里给你一个替代方案:)
解释问题的另一种方法是:
给定数组列表和新元素,删除数组列表中小于新元素的所有元素,然后将新元素放入列表并对列表进行排序。
这是一种方式:
ArrayList<String> oList = .....;
List<String> newList = new LinkedList<String>(); // tmp list to store the result
String newElement = ...;
for (String s: oList) {
if (s.compareTo(newElement) >= 0) { // s >= newElement
newList.add(s);
}
}
newList.add(newElement);
// put the result back to oList
oList.clear();
oList.putAll(newList);
// sort the result
Collections.sort(oList);
// now oList contains what you want
您甚至可以在没有临时列表帮助的情况下在oList中就地执行此操作(但删除arrayList效率不高)。