0

Trying to make a growable array ie, an array whose capacity can increase like that of an arraylist. I get a warning in the code below. Should I fix it or suppress it ? What are the consequences of suppressing it ?

import java.util.*;

public class GrowableArray<T>{
  private T[] array;
  //more variables

GrowableArray{
  this.array = (T[]) new Object[10]; // Warning - Type safety: Unchecked cast 
                                     //from Object[] to T[]
  //more code

 }     

//more code

For full code look below -

import java.util.*;  

public class GrowableArray<T>{  

    private T[] array;  
    private int increaseSizeBy;  
    private int currentIndex;//That is first free position available  
    private int lastIndex;  

    public GrowableArray(){       
        this.array = (T[]) new Object[10];  
        this.currentIndex = 0;  
        this.lastIndex = 10-1;  
        this.increaseSizeBy = 10;  
    }  


    public GrowableArray(int initialSize){  
        this.array = (T[]) new Object[initialSize];  
        currentIndex = 0;  
        lastIndex = initialSize - 1;  

    }  

    public void increaseSizeBy(int size){  
        this.increaseSizeBy = size;  

    }  


    public void add(T anObject){  

        if(currentIndex > lastIndex){ ;  
            //create a bigger array  
            int oldLength = array.length;  
            int newLength = oldLength + this.increaseSizeBy;  
            Object [] biggerArray = Arrays.copyOf(array, newLength);  
            array = (T[]) biggerArray;  
            currentIndex = oldLength;  
            lastIndex = array.length-1;  

        }else{  
            array[currentIndex] = anObject;  
            currentIndex++;  

        }  

    }  


    public void display(){  

        System.out.println();  

        for(int i = 0; i < this.currentIndex; i++){  
            System.out.print(array[i] + ", ");  

        }  

        System.out.println();  

    }  


    public static void main(String[]args){  

        GrowableArray<Integer> gArr = new GrowableArray<Integer>();  

        for(int i = 0; i <= 35; i++){  
            gArr.add(i);  

        }  

        gArr.display();  

        gArr.add(300);  
        gArr.add(301);  
        gArr.add(302);  
        gArr.add(303);  
        gArr.add(304);  
        gArr.add(305);  


        gArr.display();  

    }  


}  
4

1 回答 1

2

In Java 7 you can use varargs. No suppressing at all:

public class GrowableArray<T> {
  // Default empty to size 10.
  private static final int DefaultLength = 10;
  // My current array.
  private T[] array;

  // Empty constructor.
  GrowableArray () {
    // Passing no 2nd param at all forces jvm to manufacture an empty one for me - which is an array<T>.
    array = makeNew(DefaultLength);
  }

  // Make a new one of the right size.
  private T[] makeNew(int length, T... sample) {
    return Arrays.copyOf(sample, length);
  }
}
于 2013-04-14T00:22:05.853 回答