繁体   English   中英

Java ArrayList get()为Integer而不是Object

[英]Java ArrayList get() as Integer rather than Object

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;
}

}

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

要删除不需要蒙上你需要与类型参数改变ArrayListArrayList<Integer>函数声明。

static void sort(ArrayList deliv)

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

把它改成这个:

static void sort(ArrayList<Integer> deliv)

现在编译器知道它是一个整数的ArrayList。 所以你不需要添加强制转换为get()

在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);
            }
        }
    }
}

祝好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM