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”)
保留或抑制它们。