Java ArrayList错误、未检查和不安全操作

Java ArrayList错误、未检查和不安全操作,java,arraylist,Java,Arraylist,这段代码不会为我编译,有人能修复它或看到它的问题吗? 我不断收到错误arraylistv2.java使用未检查或不安全的运算符, 当我添加-Xlint时,它指向 private T[] seq = (T[])(new Object[1024]); // 1024 arbitrary 至于问题,有什么想法吗 class ArrayList<T> { private T[] seq = (T[])(new Object[1024]); // 1024

这段代码不会为我编译,有人能修复它或看到它的问题吗? 我不断收到错误
arraylistv2.java使用未检查或不安全的运算符
, 当我添加-Xlint时,它指向

private T[] seq = (T[])(new Object[1024]); // 1024 arbitrary
至于问题,有什么想法吗

    class ArrayList<T>
      {
        private T[] seq = (T[])(new Object[1024]); // 1024 arbitrary
        private int numItems = 0; // seq[0..numItems-1] significant

        public int size() { return(numItems); }

        public T get(int i)
        {
        if(i < 0 || i >= numItems)
            throw new IndexOutOfBoundsException();
        else
            return seq[i];
        }

        public T set(int i, T t)
        {
            if(i < 0 || i >= numItems)
                throw new IndexOutOfBoundsException();
            else
            {
                T temp = seq[i];
                seq[i] = t;
                return temp;
            }
        }

        public boolean add(T t)
        {
            add(numItems,t);
            return true; // for compatibility reasons only
        }

        public void add(int i, T t)
        {
        if(i < 0 || i > numItems)
            throw new IndexOutOfBoundsException();
        if(numItems == seq.length)
            resize(); // extend seq
        for(int k = numItems; k > i; k--) // shift seq[i..] to right
            seq[k] = seq[k-1];
        seq[i] = t;
        numItems++;
    }

    private void resize()
    { // seq is full -- double its size
    T[] temp = (T[])(new Object[seq.length * 2]); // bigger array
    for (int i = 0; i < seq.length; i++) // copy over items
        temp[i] = seq[i];
    seq = temp; 
    }
}

public class arraylistv2{
    public static void main(String [] args){

        ArrayList<String> arraylist1 = new ArrayList<String>();
        arraylist1.add(1,"orange");
        arraylist1.add(2,"apple");

        int i = arraylist1.size();
        System.out.println(arraylist1);

    }


}
类数组列表
{
私有T[]seq=(T[])(新对象[1024]);//1024任意
private int numItems=0;//seq[0..numItems-1]有效
public int size(){return(numItems);}
公共不获取(int i)
{
如果(i<0 | | i>=numItems)
抛出新的IndexOutOfBoundsException();
其他的
返回序号[i];
}
公共T集(int i,T T)
{
如果(i<0 | | i>=numItems)
抛出新的IndexOutOfBoundsException();
其他的
{
温度=顺序[i];
seq[i]=t;
返回温度;
}
}
公共布尔加法(T)
{
增加(单位:t);
返回true;//仅出于兼容性原因
}
公共无效添加(int i,T T)
{
如果(i<0 | | i>numItems)
抛出新的IndexOutOfBoundsException();
if(numItems==序列长度)
resize();//扩展seq
对于(int k=numItems;k>i;k--)//将seq[i..]向右移位
序号[k]=序号[k-1];
seq[i]=t;
numItems++;
}
私有void resize()
{//seq已满--是其大小的两倍
T[]temp=(T[])(新对象[seq.length*2]);//更大的数组
对于(int i=0;i
消息“arraylistv2.java使用未经检查或不安全的运算符”是一个警告,而不是错误。换句话说,代码中没有编译时错误。因此,它应该编译得很好(尽管有一些警告消息)

您的代码中实际上存在运行时错误:

Exception in thread "main" java.lang.IndexOutOfBoundsException
  at arraylistv2$ArrayList.add(arraylistv2.java:45)
  at arraylistv2.main(arraylistv2.java:5)
最后,从
object[]
T[]
的类型转换在这里的代码中似乎是不必要的:

private T[] seq = (T[])(new Object[1024]);
我建议将其保留为
对象[]
。自定义ArrayList类的所有方法都使用泛型类型T,因此无法将任何其他类型的对象放入
seq
中。下面是我不久前编写的自定义ArrayList类的示例:

希望有帮助


另外,我还应该指出,通常最好问一些具体的问题,而不是粘贴完整的代码清单。你会有更多的人以这种方式回答你的问题。不是每个人都像我一样有很多空闲时间;)

我认为没有必要使用
array.newInstance
方法创建通用数组。在这种情况下,类型转换应该足够了。很抱歉,我是新的,当我更改它时,我仍然会收到警告,我应该将代码行更改为什么?我想确保我完全理解您建议我更改的内容,谢谢我的意思是您可以更改
private T[]seq=(T[])(新对象[1024])
私有对象[]seq=新对象[1024]
以避免警告,并且仅在
get
方法中从
Object
T
进行类型转换。关于您收到的警告消息,可以使用
@SuppressWarnings(“unchecked”)
保留或抑制它们。