2011-06-30 44 views
0

从参数数组我已经实现数组列表与数组:Java创建

public class ArrayIndexList<E> { 
    private E[] A; 
    private int capacity = 5; // Initial Array Size 
    private int size = 0; 

    public ArrayIndexList() { 
     A = (E[]) new Object[capacity]; 
    } 

    public void add(int index, E element) { 
     /* if array is full: 
     * 1. double the array size 
     * 2. copy elements to the new array */ 
     if (size == capacity) { 
      capacity = capacity * 2; 
      E[] B = (E[]) new Object[capacity]; 
      for (int i = 0;i < size;i++) 
      B[i] = A[i]; 
      A = B; 
     } 

     // shift the elements up 
     for (int i = size - 1;i >= index;i--) 
      A[i + 1] = A[i]; 

     // add new element 
     A[index] = element; 
     size = size + 1; 
    } 

    public E remove(int index) { 
     E temp = A[index]; 

     //shift elements down 
     for (int i = index;i < size - 1;i++) 
      A[i] = A[i + 1]; 
     size = size - 1; 

     return temp; 
    } 
} 

这是工作,但编译器会发出警告:

Type safety: Unchecked cast from Object[] to E[] ArrayIndexList.java 

有什么不好的代码?

回答

1

你实际上是一种撒谎当你从Object[]转换为E[],因为数组在运行时保持它们的组件类型,所以它不是在现实中可以从Object[]转换为更具体的数组类型;但由于您处于类型参数E的范围内,因此E[]已被删除,因此不会导致错误。

这实际上是你可以做的最好的,因为唯一的其他选择是使用变量“A”是Object[]型的,但你必须投进去E每次你得到的东西出来的时候,这会产生更多未经检查的施放警告。你无法摆脱它,所以你只能压制它们。 (除非你包装一个预制的类型,做你的班级所做的那样,ArrayList,它本身也是一样的,并且必须在内部禁止这些警告)