Уже упоминалось, что такой структуры данных нет среди существующих коллекций.
В качестве альтернативного решения я могу предложить вам простую обертку над 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.
никогда не видел ничего подобного, но это не сложно реализовать самостоятельно, расширяя существующую реализацию и переопределяя методы, которые изменяют набор – Leo