在我的应用程序中,我有以下课程:
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
...
}
接下来,我需要一个键-值机制,其中键将是用餐日期 而产品清单的价值。哪个收藏最合适,给我带来好处 效率?是HashMap还是其他?
答案 0 :(得分:3)
我猜您只使用日期,否则,如果它是日期/时间,则将其用作Meal类中的属性会更有效。
要使用相同的键来使用多个食物:
Map<Date, List<Meal>>
您可以使用TreeMap
或HashMap
。两种实现都是Java Collections Framework不可或缺的一部分,并将数据存储为键值对。
HashMap按照hashing的原理工作,通常用作存储桶的哈希表,但是当存储桶太大时,它们将转换为TreeNodes的节点,每个节点的结构都类似于Java中的节点。 util.TreeMap。
TreeMap扩展了AbstractMap类并实现了NavigableMap接口。 TreeMap将地图元素存储在红黑树中,该树是自平衡二进制搜索树。
Performance HashMap
HashMap是基于哈希表的实现,在内部使用基于数组的数据结构根据哈希函数组织其元素。
HashMap为大多数操作(如add(),remove()和contains())提供预期的恒定时间性能O(1)。因此,它比TreeMap快得多。
在合理假设下,在哈希表中搜索元素的平均时间为O(1)。但是,哈希函数的不正确实现可能会导致值在存储桶中分布不均,从而导致:
性能树图
TreeMap将其数据存储在分层树中,并能够借助自定义比较器对元素进行排序。
其性能摘要:
我们应该在任何时候使用TreeMap: