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);
}
}
}
}
祝你好运
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);
}
}
}
}
祝你好运