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 even = new ArrayList(1);

或者在属性/ method / class的顶部添加@SuppressWarnings("rawtypes")