arraylist

时间:2015-05-14 19:56:52

标签: java arraylist binary-tree unsafe unchecked

我正在做一项任务,我必须创建一个可迭代的集合,在某些阈值之间保存二叉树的所有值。二叉树类有一个根变量,它是我编写的TreeNode类的一个对象。节点仅存储整数值。以下是我的方法:

public class Tree {
    public Iterable<Integer> listing(int low, int high) {
            ArrayList<Integer> list=new ArrayList<Integer>();
                 return root.listing(lo, hi, list);
        }
}

public class TreeNode {
    public ArrayList<Integer> listing(int low, int high, ArrayList list) {
        if(this.left!=null) {
            list=this.left.listing(low, high, list);
        }

        if(this.value>=low && this.value<=high) {
            list.add(this.value);
        }

        if(this.right!=null) {
            list=this.right.listing(low, high, list);
        }
        return list;
    }
}

它在本地工作得很好,但是我必须将它上传到使用Java 6的平台,并且我收到一个错误,它使用了未经检查或不安全的操作。 我在IDE中得到了同样的信息,但似乎暗示它并不重要。但是,我必须以某种方式解决这个问题。我试着阅读不安全/未经检查的操作,但我不确定我是否真的明白这里的问题是什么。 有没有办法解决这个问题而不改变整个代码?

2 个答案:

答案 0 :(得分:2)

您正在使用raw type

public ArrayList<Integer> listing(
        int low, int high, ArrayList list) {
//                         ^^^^^^^^^

它不安全,因为这让我可以传递任何类型的ArrayList

root.listing(lo, hi, new ArrayList<String>(Arrays.asList("abc")));

使用ArrayList<Integer>代替ArrayList

答案 1 :(得分:1)

这不是错误,这是一个警告,但正如您所说,您应该修复它。

问题在于你传递的是未绑定的ArrayList,理论上,它可以容纳任何类型的元素,而你只处理Integer s。因此,您可以将参数声明为ArrayList的{​​{1}}:

Integer

编辑:
顺便说一句,方法声明中不需要数组列表。因为你唯一关心的是public ArrayList<Integer> listing(int low, int high, ArrayList<Integer> list) { 接口而不是它的实现,你可以稍微清理一下声明:

List