Java ArrayList get() 作为整数而不是对象

Java ArrayList get() as Integer rather than Object

Java 的新手。试图理解将我的 ArrayList 声明为 <Integer> 的意义。我仍然必须在我的方法中将我的 .get() 结果转换为 int 才能工作,否则它仍然是 returns 和 Object。例如:(int) deliv.get(j) int 排序方法的 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;
}

}

当你键入 parameterize ArrayList<Integer> 时,编译器知道 ArrayList 中的所有内容都是 Integer 类型,并且只允许你将 Integers 添加到列表中,因此 get() returns Integer。如果不进行参数化,编译器将允许您将任何 Object 添加到 ArrayList,因此调用 get() 将 return 一个 Object 并要求强制转换为 int.

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

static void sort(ArrayList deliv)

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

改成这样:

static void sort(ArrayList<Integer> deliv)

现在编译器知道它是一个整数数组列表。 所以你不需要将演员表添加到 get()

In Java Integet 是 int 的包装器-class。你不能将 int 设置为 ArrayList 的一种类型来工作,但你可以将 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);
            }
        }
    }
}

祝你好运