哪个集合最适合实施此计划?

时间:2015-06-10 08:43:06

标签: java collections

我有KitchenProduct中的每个Kitchen都有一个到期日,

这是在创建后初始化x

 x =  for wine 3 years
      for cheese 10 days 
      for eggs 2 days

询问应该来自Kitchen - 厨房中的哪个产品首先到期?

请有人准备帮我实施或给我一个指导方针吗?我只是进入Java编程世界的6周,挑战自己。

4 个答案:

答案 0 :(得分:7)

最合适的数据结构是PriorityQueue,其Comparator类按到期日排序Product个对象。

如果你想要一个更通用的类,那么TreeSet(具有相同的比较器类)将完成这项工作。 (但是有一个障碍。你的比较器需要一个打破平局,以便两个具有相同失效日期的Product个对象不被视为相等。如果你不这样做,那么{{1对象将被视为副本,而不是添加到集合中。)

答案 1 :(得分:0)

您可以通过几种方式完成此操作,但最简单的方法是

1)Kitchen类可以列出Products每个产品的有效期(天),您需要购买/制造日期。

2)向产品添加辅助方法,将产品/生产日期按到期时间滚动。

3)在您的产品上实施可比较的产品,您可以获得有序列表

您可以找到有关如何实施可比较here

的示例

编辑

如果您想要的不只是到期订单;考虑使用Visitor pattern以最少的数量来检索产品等其他信息。

答案 2 :(得分:0)

就像你自己解释一样 -

  1. 产品将是包含属性截止日期的类。
  2. Kitchen将是一个包含产品ArrayList的类。
  3. 然后你会有一个功能查询,它将覆盖列表中的所有产品,并返回产品的截止日期最短。
  4. 产品类 -

    class Product {
        private int daysTillExpiration = 0;
        public int getDaysTillExpiration() {
            return daysTillExpiration;
        }
        public void setDaysTillExpiration(int daysTillExpiration) {
            this.daysTillExpiration = daysTillExpiration;
        }
    }
    

    厨房课 -

    class Kitchen {
        private ArrayList<Product> products;
        public Product inquire() {
            int min = products.get(0).getDaysTillExpiration();
            Product res = products.get(0);
            for(Product prod : products) {
                if(prod.getDaysTillExpiration() < min) {
                    min = prod.getDaysTillExpiration();
                    res = prod;
                }
            }
            return res;
        }
    }
    

答案 3 :(得分:0)

我假设您正在做的是创建一个厨房对象,然后您正在创建食物并将它们添加到您已创建的厨房对象中。

将它们添加到您的厨房&#34; part是您可以使用集合来存储数据的地方。

List<Product> list = new ArrayList<Product>();

Product只是一个界面,允许您轻松地将项目添加到集合中,然后您可以获取集合并迭代元素。

如果您不了解其中任何一项,谷歌为何/如何使用数组列表,请查看泛型(https://docs.oracle.com/javase/tutorial/java/generics/why.html),然后Google如何从类中获取对象(来自您的ArrayList)厨房类),然后谷歌如何迭代ArrayList。

相关问题