在java中的数组中的任何点插入对象的方法

时间:2015-02-09 19:13:07

标签: java arrays object

除了数组之外,不使用任何数组列表或向量或任何其他类型的内置java数据结构,我需要编写一个方法,将动物对象插入任何位置并移动当前位置和其他位置在右边。

执行此操作时,我必须确保集合尚未达到其最大值。

我如何实际编写此方法?我的版本不会编译错误。我无法弄清楚这个问题。有人可以帮助我使用我当前的代码编写这个方法并提供解释吗?

private  Animal [] objects;
final int MAX_ANIMALS = 100;

public AnimalObject()
{
    objects = new AnimalObject[MAX_ANIMALS];
}

public AnimalObject(Animal[]a)
{
    objects = a;    
}


public void addAnimal(Animal a,int position)
{ 
    Animal [] newAnimal = new Animal[objects.length];
    for(int i =0; i < position; i++)
    {
        newAnimal[i] = objects[i];
    }
    newAnimal[position] = a;
    System.arraycopy(objects, position, newAnimal, position+1, objects.length - position);

    for(int i = position+1; i < newData.length; i++)
    {           
        newAnimal[i] = objects[i-1];    
    }

1 个答案:

答案 0 :(得分:0)

我不会尝试修复您的不完整代码,但我会提供一个可能的解决方案和一条建议。让我们从建议开始:不要重新发明轮子。除非你是以练习为例,否则请使用ArrayList。正是为了做到这一点。如果它是一个练习,我不确定你是否会通过在StackOverflow上寻找答案获得更多。最佳检查ArrayList源代码:)

至于一个可能的解决方案,这里有一个 - 我试图模仿你上面粘贴的内容(为了便于阅读而进行了小的命名调整):

public class AnimalsArray {

    final int MAX_ANIMALS = 100;
    private Animal[] animals;

    public AnimalsArray()
    {
        this.animals = new Animal[MAX_ANIMALS];
    }

    public AnimalsArray(Animal[]a)
    {
        this.animals = a;
    }

    public void addAnimal(Animal animal, int position) {
        Animal[] newAnimals = new Animal[animals.length + 1];
        for (int i = 0; i < position; i++) {
            newAnimals[i] = animals[i];
        }
        newAnimals[position] = animal;
        System.arraycopy(animals, position, newAnimals, position + 1, animals.length - position);
        this.animals = newAnimals;
    }
}

你显然想要添加更多方法(比如我猜测数组元素的检索)。但请注意,上述代码 HIGHLY 效率低下。添加元素时,数组每次

如果你想做到这一点,你应该:

  1. 数组的初始大小大于所需数组(空构造函数确实创建了一个最大容量数组,但是代码的“固定”版本会忽略它并且每次添加元素时都会分配一个新数组)。
  2. 当数组增长时(即你添加一个元素并且数组不足以添加新元素),你应该计算它应该增长多少 - 应该设计一个算法。当它增长时,你可以使用Arrays.copyOf方法来分配更大的数组
  3. 通过检查ArrayList,您可以获得有关如何完成任务的更多想法。除了更高效之外,它也是通用的,这不能说你的代码(这可以修复但是再次 - 使用ArrayList!)。