Java ArrayList的操作不安全或未经检查
我被指派制作一个程序,获取100个0-25之间的随机整数,并将它们存储在一个数组中。 然后,我必须调用两种方法来分割偶数和赔率(非常典型)。 因此,我尝试了ArrayList(我只是学会了它),它看起来很好(我一直在关注教程和在线内容),直到我遇到以下情况: java使用未经检查或不安全的操作 我的代码是:Java ArrayList的操作不安全或未经检查,java,arraylist,compiler-errors,Java,Arraylist,Compiler Errors,我被指派制作一个程序,获取100个0-25之间的随机整数,并将它们存储在一个数组中。 然后,我必须调用两种方法来分割偶数和赔率(非常典型)。 因此,我尝试了ArrayList(我只是学会了它),它看起来很好(我一直在关注教程和在线内容),直到我遇到以下情况: java使用未经检查或不安全的操作 我的代码是: import java.util.*; import java.awt.*; public class Unit8 { public static void
import java.util.*;
import java.awt.*;
public class Unit8
{
public static void main (String [] args)
{
//create an array for original 100 integers
//create a 2D array for evens and odds
//split them up using 2 methods
int[] originalArray = new int[100];
ArrayList even = new ArrayList(1);
ArrayList odd = new ArrayList(1);
for (int x = 0; x < originalArray.length; x++)
{
originalArray[x] = (int)(Math.random() * 25);
}
evensDivider(originalArray, even);
oddsDivider(originalArray, odd);
}
public static void evensDivider (int[] e, ArrayList even)
{
for (int y = 0; y < e.length; y++)
{
if (e[y]%2 == 0)
even.add(e[y]);
}
System.out.println("The evens are: " + even);
}
public static void oddsDivider (int[] o, ArrayList odd)
{
for (int z = 0; z < o.length; z++)
{
if (o[z]%2 == 1)
odd.add(o[z]);
}
}
import java.util.*;
导入java.awt.*;
公共课单元8
{
公共静态void main(字符串[]args)
{
//为原始的100个整数创建一个数组
//为偶数和赔率创建二维阵列
//使用2种方法将其拆分
int[]originalArray=新int[100];
ArrayList偶数=新的ArrayList(1);
ArrayList奇数=新的ArrayList(1);
对于(int x=0;x
}
错误具体发生在:
偶数加(e[y])代码>
及
odd.add(o[z])代码>
请帮我解决这个问题,我已经尽了最大努力让它清晰易懂。它对此表示不满
ArrayList even = new ArrayList(1);
这里有非通用版本的ArrayList
。换成
List<Integer> even = new ArrayList<Integer>(1);
List偶数=新的ArrayList(1);
这是泛型和类型安全的
另外(作为旁注)newarraylist(1)中的值1代码>指定列表的初始容量。该特性适用于您知道将向列表中添加大量元素的情况,在这种情况下,您将提供更大的数字,这将有助于避免调整大小的开销。传递一个小值(如1)是没有意义的。这是因为您将ArrayList
与原始类型一起使用。您正在向其添加特定类型
原始类型ArrayList应为Object类型的元素。若您添加任何其他类型,那个么编译器将不知道您存储的是什么类型。因此,它给您未检查或不安全的操作
,以警告您可能做错了什么
您最好创建一个Generic
ArrayList:-
List<Integer> evenNumbers = new ArrayList<Integer>();
PS:-如果您有接口类型的引用,则应始终具有接口类型的引用。我的意思是用List
代替ArrayList
而不是这个:
ArrayList even = new ArrayList(1);
试试这个:
List<Integer> evens = new ArrayList<Integer>(50);
List evens=新数组列表(50);
以下是优点:
- 这个
列表
只能保存数字(实际上是整数,也称为int),我假设这就是警告的来源
- 它有一个复数名,这更好地反映了它是什么,一个列表
- 它以50(而不是1)的大小实例化自己,这大约是您所期望的大小
替换此ArrayList偶数=新的ArrayList(1)代码>带ArrayList偶数=新的ArrayList(1)代码>
或者在属性/方法/类的顶部添加@SuppressWarnings(“rawtypes”)
。谢谢,我;我对java还是比较陌生的,尤其是ArrayList和List,再次感谢大家@提莫。。不客气。别担心。当你多练习的时候,你会慢慢得到东西的。谢谢你!我还没有投票的事情(没有足够的声誉),但我感谢你的回应!我试过这样的东西,但它跑不动,但现在没事了!我得到了它。谢谢在下面给出的链接中,更喜欢这里的答案。
List<Integer> evens = new ArrayList<Integer>(50);