哪個集合將滿足下面的測試程序:地圖與位置索引
public class TestOrderedList {
// The class I'm looking for:
MapWithIndex<String,Person> ol = new MapWithIndex<String, Person>();
// class Person left out for brevity
public TestOrderedList() {
Person benny = new Person("Benny");
Person charles = new Person("Charles");
Person alvin = new Person("Alvin");
Person calvin = new Person("Calvin");
ol.put("Benny", benny); // should return 0
ol.put("Charles", charles); // should return 1
ol.put("Alvin", alvin); // should return 0
ol.put("Calvin", calvin); // should return 2
int index = ol.findIndex("Benny"); // should return 1
Person adam = new Person("Adam");
ol.put("Adam", adam); // should return 0 (new pos)
index = ol.findIndex("Benny"); // should return 2
ol.remove("Alvin"); // should return 1 (existing pos)
index = ol.findIndex("Benny"); // should return 1
}
}
集合不必是實現任何特定的接口,或可轉換爲另一個集合(然而這是可能這將是尼斯)。
它不必是線程安全的,但如果是....好!
返回-1找不到或錯誤的情況是OK的時候。
收集的目的是,我很快就需要知道在哪個位置一個新插入的記錄放入。此外,我想在一個記錄存在什麼位置查找。
收集並不需要支持重複鍵。
---更新----
我去ArrayList的解決方案,其中我把它插入之前做一個二進制查找排序(得到它應插入索引)。這樣,列表中的位置總是對應於行號(在與該列表同步的表中)。它快速簡單。我確定必須存在比我更強大的實現,儘管?!?!
該結構非常奇怪,因爲它返回插入元素的「位置」,但該位置不固定。像這樣的結構永遠不會是線程安全的。可能你需要解釋你在做什麼。 – gfelisberto 2014-10-27 23:24:57
好的,我可以補充說,在這種情況下,它不必是線程安全的。但是「put」方法應該返回該記錄插入的位置。 – 2014-10-27 23:27:14
可能是一個可索引的SkipList適合賬單。雖然ConcurrentSkipListMap可能會關閉,但JDK中沒有一個。 http://en.wikipedia.org/wiki/Skip_list#Indexable_skiplist – spudone 2014-10-27 23:32:11