Java List sublist
在java开发中,经常会有对列表的迭代循环遍历需求,其中出了查找、排重、统计意外就是截取需求,比如配置文件读取后找到相应的部分内容行等等
那么很容易会用到sublist方法,这是list自带的方法,我以前常用for循环去赋值给新的list 对象,但是昨天突发奇想试试sublist,结果出问题了。
我在read一个配置文件properties到list之后,有截取一部分行的需求,用了sublist,然后需要对sublist赋值的新的newlist对象进行add需求,结果
程序异常退出,没有报错,在junit里面try之后也看不到,突然感觉问题可能出在sublist方法,然后改回for遍历,ok了,很诡异。然后到网上查了一下
,真是不查不知道,一查吓一跳。也没太搞明白,搬运一下。
![](https://img2022.cnblogs.com/blog/1385728/202204/1385728-20220419095752501-1516346223.png)
这个图来自网络,他说sublist与原list是紧密关联的,所以我猜测我的add操作是对原list做了改变,那么我的sublist操作还是在对list遍历的for之内做的,
很多判断条件导致最终越界或者是异常了。
在此谨记一下。
点击查看代码
for (Object map : tList) {
String start = (String) ((Map) map).get("start");
String end = (String) ((Map) map).get("end");
String size = (String) ((Map) map).get("size");
// boolean b1 = false, b2 = false;
int s = 0, e = fileContents.size() - 1;
for (int i = 0; i < fileContents.size(); i++) {//对fileContents进行循环查找满足条件的行
// 正向
if (fileContents.get(i).indexOf(start.replaceAll(":", "-")) > -1) {
s = i;
break;
}
}
for (int i = fileContents.size() - 1; i > -1; i--) {//反向对fileContents进行循环查找满足条件的行
if (fileContents.get(i).indexOf(end.replaceAll(":", "-")) > -1) {
e = i;
break;
}
}
// System.out.println(s + "#" + e);
List<String> subList = new ArrayList<String>();//这个地方本来打算用fileContents.sublist(s,e)的,结果无法再add()
for (int i = s; i < e + 1; i++) {
subList.add(fileContents.get(i));
}
// fileContents.subList(s, e < fileContents.size() - 1 ? e + 1 : e + 1);
try {
String s1 = subList.get(subList.size() - 2);
// System.out.println(s1);
subList.add(s1);
s1 = subList.get(subList.size() - 2);
subList.add(s1);
} catch (Exception e2) {
System.out.println(e2.getMessage());
}
cropsFileListMap.put("第" + (cont + 1) + "题", subList);
// System.out.print("第" + (cont + 1) + "题:");
// System.out.println(subList);
cont++;
本文摘自 :https://www.cnblogs.com/