我已经提供了一个预先编写的程序,但有几种方法除外,其中一种方法是trimtoSize()
。我知道它已经存在但是为此我必须自己编写。我必须这样做,所以在数组中有空的空间我必须使用相同的值创建一个新的数组,并使大小准确。我已经能够使用size()
和data.length
来比较大小,但我不确定如何创建一个新的数组然后使用,因为该函数没有返回任何内容(它是无效的)。
这是我到目前为止所拥有的。
public void trimToSize(){
Array<Integer> temp = new Array<Integer>();
if(size() < data.length){
int max = size();
for(int i=0; i<size();i++){
temp.add(data[i]);
}
}}
正如我之前所说,我不知道如何返回temp,并且它将保持与之前相同的最大容量,因为它是使用构造函数创建的。有没有办法在不更改构造函数的情况下更改容量?
答案 0 :(得分:0)
在没有看到其余代码的情况下我无法确定,但似乎这只是类的一部分,并且该类是一个名为data的Integer数组... 如果这个假设是真的,那么这应该有效..
public void trimToSize() {
int size = 0;
for(int i = 0; i < this.data.length; i++) {
if(this.data[i] != null) {
size++;
}
}
Interger[] temp = new Interger[size];
for(int i = 0, j = 0; i < this.data.length; i++) {
if(this.data[i] != null) {
temp[j] = this.data[i];
j++;
}
}
this.data = temp;
}
答案 1 :(得分:0)
以下是我从您的问题中理解的内容......您有一个不完整的预定义类,它模仿ArrayList
的行为。您必须自己定义的一种行为是trimToSize()
。根据{{3}}
这只是为了节省记忆。所以,我认为这是一门课程......
public static class MyArrayList {
private Object[] array;
private int capacity;
private int size;
private int index;
public MyArrayList(int capacity) {
this.capacity = capacity;
array = new Object[capacity];
index = 0;
}
public int size() {
return size;
}
public int add(Object item) {
if (index == capacity) {
increaseSize();
}
array[index] = item;
index++;
size++;
return index;
}
public Object get(int index) {
if (0 <= index && index < size) {
return array[index];
} else {
throw new IndexOutOfBoundsException();
}
}
public void trimToSize() {
if (size < capacity) {
Object[] newArray = new Object[size];
System.arraycopy(array, 0, newArray, 0, size);
array = newArray;
capacity = size;
}
}
private void increaseSize() {
capacity++;
Object[] newArray = new Object[capacity];
System.arraycopy(array, 0, newArray, 0, array.length);
array = newArray;
}
}
以下是此课程的用法:
public static void main(String[] args) throws Exception {
MyArrayList myArrayList = new MyArrayList(5);
myArrayList.add(1);
myArrayList.add(2);
myArrayList.add(3);
for (int i = 0; i < myArrayList.size(); i++) {
System.out.println(myArrayList.get(i));
}
myArrayList.trimToSize();
myArrayList.add(4);
}
在实例化容量为5的MyArrayList
之后,您会看到数组中有5个元素。其中三个分别具有值1,2和3,而后两个为空。
但是在trimToSize()
调用之后,将从数组中删除两个空项。
然后,当添加数字4时,容量会动态增加。
这绝对不是你为工作做的事情,而且对于基础编程课来说似乎是先进的,但是你有它。我只希望如果这是一堂课(我基本上已经完成了你的功课),你的导师就足以向你解释这种行为了。我之前曾是一名兼职教授,并且见过许多教授,IMO在解释编程理论和将概念应用于代码时非常糟糕。
在查看您的个人资料后,我发现您从未接受任何人的回答,这完全浪费了其他时间来帮助您。