2016-08-08 63 views
-1

尋找數據結構這將具有以下屬性:尋找數據結構

  1. 固定大小(例如一個Array)。
  2. 不能包含相同的元素(如HashSet)。
  3. 能夠從任何位置移除元素(如E remove(int i),位於ArrayList)。
  4. 將元素設置在任何位置,但只有它是空的,否則拋出異常。

有沒有這樣的數據結構?或者我需要實施自己?

+4

所以,你希望它固定大小......但刪除或添加元素的能力? – Tunaki

+0

爲什麼不創建自己的班級來完成這一切? – VatsalSura

+0

你確實看到他說他可以這麼做......他只是要求一個更有效的解決方案。 Yeesh – RobotKarel314

回答

2

也許是一個類T []HashSet<T>。如果HashSet包含要添加的元素,則它是重複的。如果T []有一個非空(或任何你標誌),該元素被佔用。要刪除,你需要從兩個數據結構中刪除。大小可以通過T []進行限制。

有了這所有的4個操作將是O(1)時間。

+0

爲什麼'HashMap'而不是'HashSet'?什麼是地圖值用於? – Andreas

+0

@Andreas true ...我認爲它會因爲某種原因有用(可能是通過值而不是索引來刪除)。 –

+0

所以你對問題的回答*「有沒有這樣的數據結構?或者我需要實現自己?」*是「**否**和**是**」?如果是這樣,也許你應該回答問題。 – Andreas

1

可以使用Arrays.asList做到這一點:

  • 這是一個定長的數據結構,由數組支持。
  • 您可以使用list.set(i, null)
  • 將元素設置爲null您可以使用list.contains(element)檢查列表中是否已包含元素。這將線性檢查內容;我假設名單會很小,所以這在實踐中很好。

例如:

List<Integer> ints = Arrays.asList(new Integer[5]); 

// Unset the value in the second slot, if it is non-null. 
if (ints.get(2) != null) { 
    ints.set(2, null); 
} 

// Add 123 to the first slot which is null. 
if (!ints.contains(123)) { 
    ints.set(ints.indexOf(null), 123); 
}