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。

posted on 2011-03-07 12:11  問題兒童  阅读(8216)  评论(1)    收藏  举报

导航