ArrayList的不安全或未检查的操作
我被分配制作一个程序,在0-25之间获得100个随机整数,并将它们存储在一个数组中。 然后,我必须使用两种方法来分割平均值和赔率(非常典型)。 所以我尝试了ArrayList的东西(我开始学习它)并且看起来很好(我在线跟踪教程和事情)直到遇到这个: Unit8.java使用未经检查或不安全的操作
我的代码是这样的:
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]); } }
}
错误发生在: even.add(e[y]);
和odd.add(o[z]);
请帮我解决这个问题,我已尽力使其清晰易懂。
这是因为您正在使用具有raw type
ArrayList
。 并且您正在添加特定类型。
原始类型ArrayList期望Object类型的元素。 如果添加任何其他类型,则编译器不会确切地知道您要存储的类型。 因此,它会为您提供unchecked or unsafe operations
以警告您可能做错了什么。
你应该更好地创建一个Generic
ArrayList: –
List evenNumbers = new ArrayList ();
另外,在method
签名中更改它: –
public static void evensDivider (int[] e, List evenNumbers)
PS : – 如果有的话,你应该总是有一个interface type
的参考。 我的意思是使用List
代替ArrayList
它抱怨这个
ArrayList even = new ArrayList(1);
你有那个非通用版本的ArrayList
。 将其更改为
List even = new ArrayList (1);
这是通用的和类型安全的。
另外(作为旁注) new ArrayList(1);
的值1 new ArrayList(1);
指定列表的初始容量。 该function适用于您知道将向列表中添加大量元素的情况,在这种情况下,您将提供更大的数字,这将有助于避免resize开销。 传递一个小值(如1)没有意义。
而不是这个:
ArrayList even = new ArrayList(1);
尝试这个:
List evens = new ArrayList (50);
以下是优点:
- 此
List
只能保存数字(整数,实际上也称为整数),我假设这是警告的来源。 - 它有一个复数名称,更好地反映了它的名称,列表
- 它实例化的大小为50(而不是1),这与你期望的大小有关。
替换此ArrayList even = new ArrayList(1);
with ArrayList
或者在属性/ method / class的顶部添加@SuppressWarnings("rawtypes")
。