Java ArrayList get()为Integer而不是Object

时间:2015-04-22 10:27:32

标签: java arrays arraylist integer

Java新手。试着理解将ArrayList声明为<Integer>的重点。我仍然必须在我的方法中将.get()结果作为int投射,然后它仍会返回Object。例如:(int) deliv.get(j) int Sort方法的for循环。有没有办法避免这个或我的代码是正确的方法?

问题:假设数组可以改变大小,因此不仅仅使用原始数组。所有数字都应该是成对的,寻找唯一缺少它的对值的数字。我对数组进行排序,然后在对中循环以寻找不匹配。感谢。

import java.util.*;
class StolenDrone{
public static void main(String[] args){
    ArrayList<Integer> deliv_id = new ArrayList<>();
    deliv_id.add(99);
    deliv_id.add(13);
    deliv_id.add(4);
    deliv_id.add(5);
    deliv_id.add(8);
    deliv_id.add(99);
    deliv_id.add(8);
    deliv_id.add(5);
    deliv_id.add(4);

    System.out.println("Array is: " + deliv_id);
    sort(deliv_id);
    System.out.println("Array is: " + deliv_id);
    int unique = findUnique(deliv_id);
    System.out.println("Unique ID is: " + unique);   
}

//Sort ArrayList into increasing order
static void sort(ArrayList deliv){
    int temp;
    for(int i = 0; i<deliv.size();i++){
        for (int j=0; j<deliv.size()-1;j++){
            if((int) deliv.get(j)> (int) deliv.get(j+1)){
                temp = (int) deliv.get(j+1);
                deliv.set(j+1, deliv.get(j));
                deliv.set(j, temp);
            }
        }
    }
}

//check pairs in ArrayList to find unique entry
static int findUnique(ArrayList deliv){
    for(int i = 0; i<deliv.size()-1;i+=2){
        if(deliv.get(i) == null){
            return -1; //no unique
        }
        if((int) deliv.get(i) != (int) deliv.get(i+1)){
            return (int) deliv.get(i);
        }
    }
    return -1;
}

}

3 个答案:

答案 0 :(得分:4)

当您键入parameterize ArrayList<Integer>时,编译器知道ArrayList中的所有内容都是Integer类型,并且只允许您将Integers添加到列表中,从而{{1} }返回get()。如果没有参数化,编译器将允许您向Integer添加任何Object,因此调用ArrayList将返回get()并要求转换为Object

要消除对强制转换的需要,您需要在函数声明中将int类型的参数更改为ArrayList

答案 1 :(得分:2)

static void sort(ArrayList deliv)

您的方法签名请求无类型的ArrayList。 编译器无法知道ArrayList中的内容,因此需要您转换结果。

将其更改为:

static void sort(ArrayList<Integer> deliv)

现在编译器知道它是一个整数的ArrayList。 因此,您无需将演员表添加到get()

答案 2 :(得分:2)

在Java中,Integet是int的包装类。您不能将int设置为可以使用的ArrayList类型,但是您可以将int类型设置为int类型,它将自动转换为Integer。要做好工作,你应该这样做:

static void sort(ArrayList deliv){
    int temp;
    for(int i = 0; i<deliv.size();i++){
        for (int j=0; j<deliv.size()-1;j++){
            if(deliv.get(j)> deliv.get(j+1)){ // You should not cast, Integer is Comparable
                temp = deliv.get(j+1).intValue();//Changes here
                deliv.set(j+1, deliv.get(j).intValue());//And here
                deliv.set(j, temp);
            }
        }
    }
}
祝你好运