假设您有以下内容:
class Person {
LocalDate bornOn;
LocalDate diedOn;
}
假设您有一堆“Person”实例,可以按任何您喜欢的方式存储。
编写一个高效的函数以列出在给定时间内还活着的所有人,这是最好的方法是什么?
数据结构应该也能够有效地进行可变操作,特别是在添加新元素方面。
例如,概念上类似于:
List<Person> alive(List<Person> people, LocalDate date) {
return people.stream().filter(x -> x.bornOn.compareTo(date) <= 0 && x.diedOn.compareTo(date) > 0).collect(Collectors.toList())
}
仅仅更有效率。
我的最初直觉是拥有两个NavigableMaps。
NavigableMap<LocalDate, Person> peopleSortedByBornOn;
NavigableMap<LocalDate, Person> peopleSortedByDiedOn;
可以使用给定日期的headMap() / tailMap()查询集合中的每个元素,这些查询的交集就是结果。
但是是否有更快或更方便的解决方案呢?也许甚至有一些广泛使用的Java 集合/映射类型可以支持这种操作吗?