Java 我应该使用哪个集合(键值)?
在我的申请表中,我有以下类别:Java 我应该使用哪个集合(键值)?,java,android,Java,Android,在我的申请表中,我有以下类别: public class Product { private String name; private float calories; ... } 此外,我还有一份添加到膳食中的产品列表,例如早餐。我将这些产品保存在ArrayList中 abstract class Meal { protected float amountCalories; protected float amountFat; protected float amou
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
...
}
抽象类{
受保护的漂浮热量;
受保护的漂浮脂肪;
受保护的碳水化合物;
保护蛋白;
受保护的产品列表listOfProduct=new ArrayList();//前面提到的产品列表
...
}
接下来,我需要一个键-值机制,其中键将是用餐日期
而产品列表的价值。哪一款最适合我,给我带来好印象
效率?它是HashMap还是其他什么?我猜您只使用日期,否则,如果它是日期/时间,则将其用作Dine类中的属性会更有效 要能够使用相同的键使用多顿饭:
Map<Date, List<Meal>>
Map
您可以使用TreeMap
或HashMap
。这两种实现都构成了Java集合框架不可分割的一部分,并将数据存储为键值对
- HashMap的工作原理是,并且通常充当一个带扣的哈希表,但是当bucket变得太大时,它们会被转换为树节点,每个节点的结构与java.util.TreeMap中的节点类似
- TreeMap扩展了AbstractMap类并实现了NavigableMap接口。树状图将地图元素存储在红黑树中,这是一种自平衡二叉搜索树
- 内存开销–许多存储桶仍然未使用
- 性能降级–碰撞次数越高,性能越低
- TreeMap为大多数操作(如add()、remove()和contains()提供了O(log(n))的性能
- 树映射可以节省内存(与HashMap相比),因为它只使用保存其项所需的内存量,而HashMap使用连续的内存区域
- 树应该保持其平衡以保持其预期性能,这需要相当多的工作,因此使实现复杂化
- 必须考虑内存限制
- 我们不知道需要在内存中存储多少项
- 我们希望按自然顺序提取对象
- 是否始终添加和删除项目
- 我们愿意接受O(logn)搜索时间
当你说“关键是吃饭的日期”时,是指时间还是日期?因为如果你只使用日期部分,你每天只能增加一顿饭。根据你提到的,HashMap将是合适的。但是如果你打算在多线程环境中使用它,你可能需要考虑一个并发的HASMAP()。这个键只是时间的一部分,没有时间,我知道我只能添加一顿饭,因为密钥必须是唯一的(从我所记得的)。这就是为什么我创建了抽象的Dine类,它们将继承该类,其他类如:早餐、午餐等。因此每顿饭都有自己的ArrayList和HashMap。我只是不知道HashMap是否是我需要的集合。那么,您是否要在
MEIN
类中定义此HashMap(或任何键值数据结构)?当然,ArrayList将位于MEIN抽象类中,以便每顿饭都有自己的产品列表。但是,HashMap数据结构不会在Dine类的内部,因为它对我来说似乎毫无意义。