ArrayList的不安全或不安全的操作



我被分配给一个程序,该程序在0-25之间获得100个随机整数,并将它们存储在数组中。然后,我必须调用两种方法来拆分evens和赔率(非常典型)。因此,我尝试了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]);

请帮助我,我尽了最大的努力使它清晰易懂。

这是因为您将ArrayListraw type一起使用。您正在向其添加特定类型。

原始类型Arraylist将期望类型对象的元素。如果添加任何其他类型,则编译器将不知道您正在存储哪种类型。因此,它会给您 unchecked or unsafe operations 警告您您可能做错了什么。

您应该最好创建一个Generic arrayList: -

List<Integer> evenNumbers = new ArrayList<Integer>();

另外,在您的method签名中更改它: -

public static void evensDivider (int[] e, List<Integer> evenNumbers)

ps : - 如果有一个,则应始终具有interface type的引用。我的意思是使用List代替ArrayList

它对此

充满信心
ArrayList even = new ArrayList(1);

您在那里有ArrayList的非生成版本。将其更改为

List<Integer> even = new ArrayList<Integer>(1);

是通用和类型的安全。

另外(作为旁注)new ArrayList(1);中的值1指定列表的初始容量。该功能在您知道您将在列表中添加大量元素的情况,在这种情况下,您将提供一些更大的数字,这将有助于避免调整大小的开销。通过一个小价值(像1一样)是没有意义的。

而不是:

ArrayList even = new ArrayList(1);

尝试以下操作:

List<Integer> evens = new ArrayList<Integer>(50);

这是:

  • List只能容纳数字(实际上,也称为ints),我认为这是警告来自的地方。
  • 它具有一个复数名称,可以更好地反映其本质,列表
  • 它以50(而不是1)的大小实例化,这是您期望的大小。

ArrayList<Integer> even = new ArrayList<Integer>(1);

替换此ArrayList even = new ArrayList(1);

在属性/方法/类的顶部添加@SuppressWarnings("rawtypes")

最新更新