Java中如何“sublist”一个List

在实际开发过程,我经常用到java.util.List这个类里的一个subList方法,但是使用过程中(web开发),却发现这样一个问题:分割list没有达到我的预期,示例代码如下:

public static void main(String[] args) {
    List<Person> listA = new ArrayList<Person>();
 
    for (int i = 0; i < 6; i++) {
        Person p = new Person();
        p.setName(String.valueOf(i));
        listA.add(p);
    }
 
    listA = subList(listA);
 
    for (int i = 0; i < listA.size(); i++) {
        System.out.println(listA.get(i).getName());
    }
}
 
public static List<Person> subList(List<Person> L) {
 
    return L.subList(0, 1);
}

打印出来是一条数据,但是如果将这个反映到页面,确发现还是6条数据,于是进行dubug操作,发现原来list中的数据其实都还在

没处理前:

处理后:

查询了JDK帮助文档,发现这么一句话

The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa.

也就是说,其实sublist后的list结构并没有像我所想的是分割完之后的list,还是原来的。

解决方法:

public static void main(String[] args) {
    List<Person> listA = new ArrayList<Person>();
 
    for (int i = 0; i < 6; i++) {
        Person p = new Person();
        p.setName(String.valueOf(i));
        listA.add(p);
    }
 
    listA = new ArrayList<Person>(subList(listA));
 
    for (int i = 0; i < listA.size(); i++) {
        System.out.println(listA.get(i).getName());
    }
}
 
public static List<Person> subList(List<Person> L) {
 
    return L.subList(0, 1);
}

在分割后重新new ArrayList<Person>,这样返回的list就是分割数据后的list。

转自:http://www.cnblogs.com/wentiertong/archive/2011/03/07/1973459.html