2016-09-27 34 views
0

我正在创建一个具有数组的类,并且我想实现方法add,removereplace如何添加项目而不使用内置方法

但我不想使用任何内置的内部。

public class MySet { 

    public int set[]; 
    private int size = 0; 

    public MySet(int size) { 
     this.set = new int[size]; 
    } 

    public boolean add(int item) { 
     for (int i = 0; i < this.size(); i++) { 
      if (this.set[i] != 0) { 
       // add to array 
      } 
     } 
     this.size++; 
     return true; 
    } 

    public int size() 
    { 
     return this.size; 
    } 
} 

当您在Java中初始化一个固定大小的数组时,每个项目等于0。具有if this.set[i] != 0的部分是我坚持添加项目的地方。

我应该用指针的while循环吗?如:

public boolean add(int item) { 
    int index = 0; 
    while (index <= this.size()) { 
     if (this.set[index] != 0 || index <=) { 
      // increase pointer 
      index++; 
    } 
    this.set[index] = item; 
} 

但是,如果我有一个数组如[7,2,0,1]在列表中,它不会得到在循环的最后一个项目,这是我需要的。

那么,这通常如何完成?

+3

你需要跟踪你目前有多少物品。每次添加增加此值。每次删除时,减少此值。 –

+0

我推荐看看ArrayList是如何实现的,因为这基本上就是你想要做的。您需要注意内部数组的增长和收缩,并确定何时需要更多空闲空间来重新分配它。 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/java/util/ArrayList.java#ArrayList – nasukkin

回答

4

您应该保留size的填充元素的当前索引,看起来像您一样。当您添加set[size]= item并增加大小时。一旦size达到阵列的预先分配的大小,您需要创建一个增加大小的新阵列(例如可以选择大小的两倍)并将旧阵列复制到新阵列。

+0

这是有道理的。 你会如何建议我检查重复?遍历整个数组? – AAA

+0

那么,如果你正在尝试实现一个动态数组,那你为什么还可以重复一次。那些允许重复。除非你想要一套?在这种情况下,您可以通过整个阵列来处理O(n)复杂性,或者选择使用一些哈希算法并以这种方式实现。在这种情况下,你的算法必须更复杂。 –

相关问题