gpt4 book ai didi

java - 我应该使用哪个集合(键-值)?

转载 作者:搜寻专家 更新时间:2023-11-01 08:17:35 26 4
gpt4 key购买 nike

在我的应用程序中我有类:

public class Product {
private String name;
private float calories;
...
}

此外,我还有一份已添加到膳食中的产品列表,例如早餐。我将这些产品保存在 ArrayList 中。

abstract class Meal {

protected float amountCalories;
protected float amountFat;
protected float amountCarbohydrates;
protected float amountProtein;

protected List<Product> listOfProduct = new ArrayList<Product>(); // previously mentioned product list
...

}

接下来,我需要一个key-value机制,key就是用餐日期而产品列表的值(value)。哪个合集最合适,给我好效率?会是 HashMap 还是别的?

最佳答案

我猜你只使用日期,否则,如果它是日期/时间,将它用作 Meal 类中的属性会更有效。

要能够使用相同的键使用很多餐:

Map<Date, List<Meal>>

您可以使用 TreeMapHashMap。这两种实现都构成了 Java 集合框架的组成部分,并将数据存储为键值对。

  • HashMap 的工作原理是 hashing通常用作分桶哈希表,但当分桶变得太大时,它们会转换为 TreeNode 的节点,每个节点的结构与 java.util.TreeMap 中的节点类似。

  • TreeMap 扩展了 AbstractMap 类并实现了 NavigableMap 接口(interface)。 TreeMap 将 map 元素存储在红黑树中,这是一棵自平衡二叉搜索树

性能 HashMap

HashMap 是一种基于哈希表的实现,在内部使用基于数组的数据结构根据哈希函数组织其元素。

HashMap 为大多数操作(如 add()、remove() 和 contains())提供预期的恒定时间性能 O(1)。因此,它比 TreeMap 快得多。

在合理假设下,在哈希表中搜索元素的平均时间为 O(1)。但是,哈希函数的不正确实现可能会导致桶中的值分布不均,从而导致:

  • 内存开销——许多桶未被使用
  • 性能下降——碰撞次数越多,性能越低

性能 TreeMap

TreeMap 将其数据存储在分层树中,并能够在自定义比较器的帮助下对元素进行排序。

性能总结:

  • TreeMap 为大多数操作(如 add()、remove() 和 contains())提供 O(log(n)) 的性能
  • Treemap 可以节省内存(与 HashMap 相比),因为它只使用保存其项目所需的内存量,这与使用连续内存区域的 HashMap 不同
  • 一棵树应该保持平衡以保持其预期性能,这需要大量的努力,因此使实现复杂化

我们应该在任何时候使用 TreeMap:

  • 必须考虑内存限制
  • 我们不知道有多少项必须存储在内存中
  • 我们想以自然顺序提取对象
  • 是否会一致地添加和删除项目
  • 我们愿意接受 O(log n) 的搜索时间

See more: https://www.baeldung.com/java-treemap-vs-hashmap

关于java - 我应该使用哪个集合(键-值)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58064434/

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