2016-09-27 31 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)複雜性,或者選擇使用一些哈希算法並以這種方式實現。在這種情況下,你的算法必須更復雜。 –

相關問題