如何采取在Java中一个有效的子列表? [英] How to take a valid sublist in Java?

查看:253
本文介绍了如何采取在Java中一个有效的子列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Java中,这奇怪的(我认为)的问题。
我有一个ArrayList,我想借此子列表。
但我得到的后续例外。

 包javatest;进口的java.util.ArrayList;公共类JavaTest {    公共静态无效的主要(字串[] args){
        ArrayList的<整数GT; ALIST =新的ArrayList<整数GT;();
        alist.add(10);
        alist.add(20);
        alist.add(30);
        alist.add(40);
        alist.add(50);
        alist.add(60);
        alist.add(70);
        alist.add(80);
        ArrayList的<整数GT;子=(ArrayList的&所述;整数&GT)alist.subList(2,4);
        对于(整数i:分)
            的System.out.println(ⅰ);
    }
}


  

运行:异常线程main
  java.lang.ClassCastException:
  java.util.RandomAccessSubList不能
  被转换为在的java.util.ArrayList
  javatest.JavaTest.main(JavaTest.java:17)
  Java结果:1。


什么是采取一个子列表的正确方法?

THX


解决方案

您应该为集合接口工作,尽可能。你向下转换的子表的结果,但是API指定它返回列表不可以 的ArrayList )。在这里,实施者选择返回不同类型,使他们的生活更轻松。

Furthemore,API文档指定子表将返回映射到原来的列表,所以要小心!

I have this weird (I think) problem in Java. I have an ArrayList and I want to take a sublist. But I get the follow exception.

package javatest;

import java.util.ArrayList;

public class JavaTest {

    public static void main(String[] args) {
        ArrayList<Integer> alist = new ArrayList<Integer>();
        alist.add(10);
        alist.add(20);
        alist.add(30);
        alist.add(40);
        alist.add(50);
        alist.add(60);
        alist.add(70);
        alist.add(80);
        ArrayList<Integer> sub = (ArrayList<Integer>) alist.subList(2, 4);
        for (Integer i : sub)
            System.out.println(i);
    }
}

run: Exception in thread "main" java.lang.ClassCastException: java.util.RandomAccessSubList cannot be cast to java.util.ArrayList at javatest.JavaTest.main(JavaTest.java:17) Java Result: 1

What is the correct way to take a sublist?

Thx

解决方案

You should work with the interfaces for Collections wherever possible. You're downcasting the result of sublist, but the API specifies that it returns List (not ArrayList). Here, the implementors are choosing to return a different type to make their lives easier.

Furthemore, the API documentation specifies that sublist will return a List mapped onto the original, so beware!

这篇关于如何采取在Java中一个有效的子列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆