【问题标题】:Arraylist of classes [closed]类的Arraylist [关闭]
【发布时间】:2012-12-04 02:33:26
【问题描述】:

好的,我需要一些帮助来解决一点语法问题。我有一个类,我希望它把它放到一个数组列表中,并使用 for 循环填充数组列表。 这是我想要的一个例子:

    public class w{
    int x;
    int y;
    }
    Arraylist m = new Arraylist();
    for(int i=0; i<n;i++)
  {
          m[i].add(w.x);
          m[i].add(w.y);

  }

是的,代码没有运行,它只是我想要它做的一个例子。我不知道语法,我想要一个带有类的数组列表,这些类可以通过给出 i 来检索,并且只能通过那个 'i' 来获取这两个变量; 任何帮助将不胜感激。非常感谢您抽出宝贵的时间,很抱歉描述得很糟糕,但我不能更具体。

【问题讨论】:

  • 您想在 ArrayList 中放入什么?名为w 的类的多个实例或w.x 和w.y 的值?
  • Dynamic Arraylist of Classes 的可能重复项
  • 您似乎对类和 ArrayList 的工作方式感到困惑。当您说m[i] 时,它暗示您需要一个ArrayList 数组。真的吗?当您说要将w.xw.y 添加到列表中时,这意味着您希望x 和y 是静态变量。您似乎更有可能想要创建一个包含多个 class w 实例的 ArrayList ,但这不是您的代码所建议的。请尝试更清楚地准确描述您想要什么。
  • 它已经解决了,但是你是对的。包含类 w 的多个实例的 Arraylist。是的,我将开始学习基本概念以避免混淆。

标签: java class arraylist


【解决方案1】:

目前尚不清楚您要完成什么,但也许这足以指导如何正确使用ArrayList。我将您的类名从 w 更改为 W 以匹配通常的 Java 编码约定。

public class W {
    int x;
    int y;
    public W(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

ArrayList<W> m = new ArrayList<W>(); // can be 'new ArrayList<>()` in Java 7
m.add(new W(1, 2));
m.add(new W(5,-3));
// etc.

for (int i=0; i<m.size(); i++) {
    W w = m.get(i);
    System.out.println("m[" + i + "]=(" + w.x + "," + w.y + ")");
}

for (W w : m) {
    System.out.println("next W: (" + w.x + "," + w.y + ")");
}

【讨论】:

  • 这似乎是对 OP 想要做什么的一个很好的猜测。
  • @jahroy - 绝对是SWAG :)
  • 是的,谢谢,这就是我一直在寻找的。对不起,混乱:)。
  • @VladAdrian - 如果这回答了您的问题,您应该通过单击复选标记将其标记为正确答案。
  • @TedHopp 如果您不想通过参数传递值来输入值,并且想专门分配每个字段,那么您会怎么做呢?
【解决方案2】:

您不能使用方括号表示法在 Java 中按索引访问集合。是否以及如何实现取决于特定的集合 API。对于List,还有第二个版本的 add 方法,它以索引作为参数。

List<Integer> m = new ArrayList<>();
    for(int i=0; i<n;i++)
  {
          m.add(i, w.x);
          m.add(i, w.y);

  }

【讨论】:

  • 所以这意味着我可以只做 m[i].w.x 并检索 x 的值?
  • 你可以用 m.get(i); 检索
  • 如果我只想要 x 的值?因为 get(i) 得到了他们两个?
  • 你无法再恢复 x,你覆盖了它。如果您想同时保留两者,也许将实际的 'w' 存储在列表中会更有用!
【解决方案3】:

ArrayList 不是传统意义上的数组;它是一个对象。您必须尊重如何访问 List 类型的元素,can be found with the Java 7 API

也就是说,您可以使用以下两个选项将值放入其中。

.add(E element) 将具有相同泛型类型的对象作为参数,并且

.addAll(Collection&lt;? extends E&gt; collection),它将另一个集合类型作为参数。如果您尝试将原始数组放入您的List,您可以将其与Arrays.asList() 结合使用。

一些最后的事情:

  • 更希望对接口进行编码而不是具体类型。这样一来,您就不必担心是否需要开始使用 LinkedList 而不是 ArrayList
  • 您应该输入您的列表,否则 Java 会警告您未检查的操作。如果您对放入 List 的内容感到厌烦,这些可能是不安全的。
  • 此外,如果不使用instanceof,您将无法从List 中检索特定字段/函数,因为存储在其中的所有内容都将是Object,这是不可取的。

【讨论】:

  • 您的 cmets 都是准确且准确的,但我认为他们会在 OP 上丢失,他们似乎对几个基本 Java 概念感到困惑。
【解决方案4】:

你可以这样使用它..

public class w{
    int x;
    int y;
    }
  w ref1=new w();
  w ref2=new w();
    Arraylist<w> m = new Arraylist<w>();  
    m.add(ref1);
    m.add(ref2);

或者你可以这样做

for(some condition)
{
    m.add(new w());
}

【讨论】:

    猜你喜欢
    • 2014-09-21
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多