已經提到,現有集合中沒有這樣的數據結構。
作爲一種替代解決方案,我可以給你一個簡單的包裝上HashMap
:
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
class TimeBasedSet<T> {
private static class StorageData {
StorageData(Date insertionDate, Date lastModificationDate) {
this.insertionDate = insertionDate;
this.lastModificationDate = lastModificationDate;
}
Date insertionDate;
Date lastModificationDate;
}
private Map<T, StorageData> storage = new HashMap<>();
public void add(T key) {
Date date = new Date();
StorageData storageData = new StorageData(storage.containsKey(key) ? storage.get(key).insertionDate : date, date);
storage.put(key, storageData);
}
public Date getInsertionTime(Object key) {
return storage.containsKey(key) ? storage.get(key).insertionDate : null;
}
public Date getLastModificationTime(Object key) {
return storage.containsKey(key) ? storage.get(key).lastModificationDate : null;
}
}
多數民衆贊成上面顯示是相當簡單的實現。我們將所有數據存儲在HashMap
中,其中密鑰爲某些參數化類型T
,值爲StorageData
類,其中包含存儲密鑰的插入時間和上次修改時間。
在add
方法我們創建StorageData
爲添加的密鑰。上次修改時間始終設置爲當前時間。插入時間也設置爲當前時間,但如果此密鑰已在Map
中,我們會適當地處理插入時間。然後我們將新的鍵值對放入Map
。
還爲每種類型的日期添加了兩個getters're。
從來沒有見過這樣的事情,但它不難實現你自己的,擴展現有的實現並覆蓋修改Set的方法 – Leo