有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在尝试从自定义泛型数组中删除元素时遇到类型不兼容的问题

我想对ArrayList进行自己的表示

在我的类中MyList<T>我正在创建T[] array= (T[]) new Object[size];

在尝试删除元素时,我必须制作另一个数组来比较元素

所以我做了T[] tmpArr=(T[])array;

我想重写除一个元素之外的所有元素,我想删除其中一个元素,但我有错误

当我尝试array[i]=tmpArr[i+1]array= tmpArray任何铸造都不起作用时,我该怎么做? 错误在else if和else中

public void remove() {
        T[] tmpArray= (T[]) new Object[realSize];
        for(int i=0;i<size;++i){
            tmpArray[i]=(T)array[i];
        }
        for(int i=0;i<size;++i) {
            if (i == current - 1) {

            } else if (i > current - 1) {
                array[i] =tmpArray[i + 1];
            } else {
                array[i] = (T) tmpArray[i];
            }
        }

    }

共 (1) 个答案

  1. # 1 楼答案

    这无法工作,因为new Object[int]不创建T[],因此无法将其强制转换为一个。那么你能做些什么呢?只需要一个Object[]而不是一个T[]

    public class ArrayList<T>
        private Object[] array = new Object[0];
    
        public void remove() {
            array = Arrays.copyOf(array, array.length - 1);
        }
    
        // Ensures only T objects are place inside Object[] array.
        public void add(T object) {
            array = Arrays.copyOf(array, array.length + 1);
            array[array.length - 1] = object;
        }
    
        // Actually save, because only T objects can be place inside Object[] array
        public T get(int index) {
            @SuppressWarnings("unchecked")
            T obj = (T) array[index];
            return obj;
        }
    }
    

    不要只是复制这个。这只是一个例子,每次大小改变时(通过添加或删除)都会创建一个新数组,这是非常低效的