gpt4 book ai didi

java - 排序方式,哪个更好 - hashmap、treemap、自定义实现

转载 作者:行者123 更新时间:2023-12-01 09:16:46 25 4
gpt4 key购买 nike

我有一个数组列表 Subjects他们有参数 Date ,我想将它们分组为 Day 的排序数组(也许不是数组,但仍然是排序结构)对象,所以每个Day将有参数 Date并且对象将仅包含具有此日期的主题。所以我想做的就是按日期对它们进行分组,然后获取它们。我看到了使用 HashMap 进行分组的实现,但后来我对结构进行了分组但未排序,因此之后我应该将其转换为 ArrayList 等。或者也许我应该使用 TreeMap,它会做同样的事情,但给我返回排序的结构,或者最好的方法就是简单地编写我自己的排序器,它将得到 ArrayList<Subject>并返回ArrayList<Day> 。我也可以使用 LinkedHashMap这也可以工作

所以现在我不知道什么更好,我应该选择什么?重要的是,我很可能不会添加新值或从结构中删除值,我只会获取它们。

UPD:如果我使用 map ,则 Date将是关键和 Day对象将是值。

通过说“获取它们”,我的意思是迭代它们。

我所做的所有这些都是为了用这些信息填充我的 UI 元素,因此我很可能以后不会在我的结构中搜索某些内容

最佳答案

这就是我认为您所要求的,但希望我的回答能够有所帮助,即使它不完全是这样:

  1. 使用 Day 进行快速查找作为关键
  2. 应该对查找的结果进行排序(即对同一天的多次进行排序)
  3. 可以查看按 Day 排序的所有主题

这里有一个选择。使用Map关联 DaySubjects 的排序列表,所以Map<Day, List<Subject>> 。由于您不需要添加内容,因此您可以在开始时构建映射,然后在执行任何查找之前对其进行排序。概要如下:

Map<Day, List<Subject>> buildMap(List<Subject> subjects) {
Map<Day, List<Subject>> map = new HashMap<Day, List<Subject>>();
// create a list of subjects for each day
for (Subject subject : subjects) {
if (!map.containsKey(subject.getDate().getDay())) {
map.put(subject.getDate().getDay(), new ArrayList<Subject>());
}
map.get(subject.getDate().getDay()).add(subject);
}

// go through and sort everything now that you have grouped them
for (Day day : map.keySet()) {
Collections.sort(map.get(day));
}

return map;
}

如果您还需要能够“获取”整个 map 中排序的每个条目,您可以维护一个排序的日期列表。就像这样:

List<Day> buildSortedDaysList(Map<Day, List<Subject>> map) {
List<Day> sortedDays = new ArrayList<Day>(map.keySet());
// again, many ways to sort, but I assume Day implements Comparable
Collections.sort(sortedDays);
return sortedDays;
}

然后您可以将其包装在一个类中,我建议您为该类创建一个更好的名称:

class SortedMapThing {
Map<Day, List<Subject>> map;
List<Day> orderedDays;

SortedMapThing(List<Subject> subjects) {
map = buildMap(subjects);
orderedDays = buildSortedDaysList(map);
}

List<Subject> getSubject(Day day) {
return map.get(day);
}

List<Subject> getAllSubjects() {
List<Subject> subjects = new ArrayList<Subject>();
for (Day day : orderedDays) {
subjects.addAll(map.get(day));
}
return subjects;
}

}

此实现将工作放在首位,并为您提供高效的查找速度。如果我稍微误解了你的问题,你应该能够相应地调整它。如果我完全误解了你的问题......我会很难过。干杯!

关于java - 排序方式,哪个更好 - hashmap、treemap、自定义实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40496253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com