在Java和许多其他语言中,人们可以通过说String.substring(begin, end)
之类的内容来获取字符串的子部分。我的问题是,是否存在内置功能,可以使用Java中的列表执行相同的操作,从而返回原始子列表?
答案 0 :(得分:6)
此方法称为subList
和exists for both array and linked lists。请注意,它返回的列表由现有列表支持,因此更新原始列表将更新切片。
答案 1 :(得分:1)
答案可以在List API中找到:List#subList(int, int)(无法弄清楚如何让链接正常工作......)
但请注意,这是基础列表的视图,因此如果更改原始列表,则会更改子列表,并且子列表的语义未定义如果您在结构上修改原始列表。所以我认为它并不严格意味着你正在寻找......
如果你想要一个结构独立的小组,我相信你必须做的事情如下:
ArrayList<something> copy = new ArrayList<>(oldList.subsection(begin, end));
但是,这将保留对子列表中原始对象的引用。如果您想要一个全新的列表,您可能必须手动克隆所有内容。
答案 2 :(得分:0)
该方法名为子列表,可以在javadocs中找到
http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#subList(int,int)
答案 3 :(得分:0)
您可以使用subList(start, end)
ArrayList<String> arrl = new ArrayList<String>();
//adding elements to the end
arrl.add("First");
arrl.add("Second");
arrl.add("Third");
arrl.add("Random");
arrl.add("Click");
System.out.println("Actual ArrayList:"+arrl);
List<String> list = arrl.subList(2, 4);
System.out.println("Sub List: "+list);
输出:
Actual ArrayList:[First, Second, Third, Random, Click]
Sub List: [Third, Random]
答案 4 :(得分:0)
如果您希望新方法与String
的子字符串完全一样,则可能只想创建一个新方法。
public static List<String> sub(List<String> strs, int start, int end) {
List<String> ret = new ArrayList<>(); //Make a new empty ArrayList with String values
for (int i = start; i < end; i++) { //From start inclusive to end exclusive
ret.add(strs.get(i)); //Append the value of strs at the current index to the end of ret
}
return ret;
}
public static List<String> sub(List<String> strs, int start) {
List<String> ret = new ArrayList<>(); //Make a new empty ArrayList with String values
for (int i = start; i < strs.size(); i++) { //From start inclusive to the end of strs
ret.add(strs.get(i)); //Append the value of strs at the current index to the end of ret
}
return ret;
}
如果myStrings
是以下ArrayList
中的Strings
:{"do","you","really","think","I","am","addicted","to","coding"}
,则sub(myStrings,1,6)
将返回{"you", "really", "think", "I", "am"}
和sub(myStrings,4)
将返回{"I", "am", "addicted", "to", "coding"}
。同样,通过执行sub(myStrings, 0)
,它会将myStrings
重写为新的ArrayList
,有助于解决问题。