【问题标题】:Java new ArrayList of Object myListJava new ArrayList of Object myList
【发布时间】:2017-02-19 00:57:14
【问题描述】:

我有一个 ArrayList,例如冰箱

List<Food> fridge = new ArrayList<Food>();

简单的解释: 因为我想让我的冰箱井井有条,所以我想把我的食物放在单独的抽屉里。 我已经有了肉类、水果和面包课程。

我正在努力解决的问题是创建新的 ArrayList 来描绘不同的抽屉。

我的目标是让冰箱列出一个父列表,并将肉、水果、面包作为该列表的子列表。

冰箱(父)

---肉(儿童)

---水果(儿童)

---面包(儿童)

您对如何实现这一点有任何想法吗? 我很高兴有任何帮助

编辑: 我要添加到子列表的对象包含字符串 obj.name 等信息;双 obj.weight;双 obj.price;我想将对象添加到子列表中并能够再次读取子列表。

【问题讨论】:

  • 您可以为每种类型的食物创建一个ArrayList,然后将fridgeArrayListArrayLists 创建一个ArrayList
  • 正如@SusannahPotts 所说,您的孩子必须是冰箱内的 ArrayLists
  • 您应该为每种食物创建一个ArrayList,然后为每种食物创建一个TreeMap,包含这些ArrayList。 Map&lt;String,List&lt;Food&gt;&gt; fridge = new TreeMap&lt;&gt;().
  • 你可以创建一个Fridge 类...

标签: java arraylist extends


【解决方案1】:

"fridge" 不应该是一个简单的 ArrayList,因为它需要有自己更复杂的状态和行为。相反,它应该是一个完整的类,应该包含 3 个(或更多)ArrayList:meatList、fruitList 和 breadList,以及将项目放入每个列表的方法,以及检索项目的方法和打印方法或显示项目。

同样,Food 可以有 Meat、Fruit 和 Bread 的子类(尽管根据 Good Housekeeping,不应将面包放入冰箱 - 它会导致冷凝和潮湿)。

【讨论】:

  • 请注意,如果应该有一种方法可以按顺序迭代其内容,则该类可以实现List,或者如果应该有一种方法可以不按顺序迭代其内容,则可以实现Set
  • @Aaron:或者更好的是,实现 Iterable -- 一个更简单的接口,并且允许对所有内容进行迭代。
【解决方案2】:

你的“心智”模型是错误的。 冰箱远不止一个包含其他列表的列表。

想象一下您厨房里的“真正的冰箱”。它不仅仅是一些列表(按内容排序)!

因此,您应该首先尝试自己弄清楚在您的心智模型中“冰箱”的用途是什么。它应该为该类的用户提供哪种行为(界面)?!

示例:冰箱通过“类型”了解其内容是否真的相关?或者更重要的是如何对冰箱中的条目进行物理排序?

因此,除了来自 Hovercraft 的出色回答之外,您可能还想进一步退后一步,以便真正定义您在程序中使用的术语应该意味着什么

【讨论】:

  • 不确定谁对你投了反对票,因为你的答案是正确的。 1+
  • 告诉初学者“你做错了”而不告诉他们如何正确地做是没有帮助的。
  • @coladict 猜猜看:我已经在更新中解决了这个问题。
【解决方案3】:

我没有 100% 得到你想要的,但我猜你只是想存储你的食物数据。

1.) 只需制作一个列表列表:

 ArrayList<ArrayList<Food>> fridge;

每个内部列表都显示一个抽屉。肉类、水果等将是食物的子类。

2.) 制作一个带有钥匙作为抽屉“名称”的地图

 HashMap<String, ArrayList<Food>> fridge;

这样您就可以轻松获取“抽屉”内容。但是,与上述内容并没有太大变化。

3.)

创建一个 Fridge 类来存储你所有的东西。而且由于冰箱可以容纳的不仅仅是食物,因此创建一个接口来定义事物具有哪些可以存储的属性。

interface Storable{
   String getName(); int getId(); String getType(); void use();
     }....//whatever everything which will be stored has.
class Fridge{ 
    HashMap<String, ArrayList<Storable>> contents;
    void add(Storable food){
        this.contents.put(food.getType, food); //or instead of #getType use the class of the food.
  }

然后是您的食物、肉类等:

class Food implements Storable{
     //implement the inherited Methods 
 }

然后你又有一些选择,比如为每种类型创建一个类(肉类、面包等),或者只是在 Food 中创建一个描述它是什么的字段“类型”。这在很大程度上取决于你的“心智模型”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多