Java:创建一个类列表(List <Class>),并迭代它

Mar*_*alo 2 java data-structures

我来自C#背景,我正试图弄清楚如何在C#中使用它们的方式.如果这不是在Java中使用它们的方式,我想知道正确的方法.

基本上,这就是我想要做的:

  1. 创建一个列表并用数据填充它.
  2. 通过列表迭代

这是我到目前为止的尝试:

  1. 这是我想要的类对象:

    public class ClassName
    {
        public ClassName(String _str, int _a, int _b, int _c, int _d, long _e)
        {
            str = _str;
            a = _a;
            b = _b;
            c = _c;
            d = _d;
            e = _e;
        }
        public String str;
        public int a;
        public int b;
        public int c;
        public int d;
        public long e;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这是它在主类文件中引用的方式:

    // Why would I use this instead of List<T>?
    ArrayList<ClassName> hList = new ArrayList<ClassName>();
    
    Run Code Online (Sandbox Code Playgroud)
  3. 这就是我试图填充类对象的方式:

    hList.add(new ClassName("string", 1, 2, 3, 4, 2432342322));
    
    Run Code Online (Sandbox Code Playgroud)

这是我在Eclipse中遇到的错误:

The constructor ClassName(String, int, int, int, int, long) is undefined

......这令人费解.Eclipse要求我添加我已经添加的内容.当我选择"快速修复"选项时,它与上面的构造函数做同样的事情,但没有type = type东西.也许我没有正确处理这个问题?

假设这是迭代的正确方法,这就是我认为可行的方法:

for (int i = 0; i < hList.size(); i++)
{
    System.out.println(hList[i].currentDate);
}
Run Code Online (Sandbox Code Playgroud)

那么,我如何创建一个正确的列表并在Java中迭代它?

Joh*_*ica 6

一世

public ClassName(string _str, int _a, int _b, int _c, long _d)
{
    str = _str;
    a = _a;
    b = _b;
    c = _c;
    d = _d;
}
Run Code Online (Sandbox Code Playgroud)

使用下划线命名并不常见.我推荐使用this.此外,String大写,大括号通常在行的末尾.

public ClassName(String str, int a, int b, int c, long d) {
    this.str = str;
    this.a = a;
    this.b = b;
    this.c = c;
    this.d = d;
}
Run Code Online (Sandbox Code Playgroud)

II

// Why would I use this instead of List<T>?
ArrayList<ClassName> hList = new ArrayList<ClassName>();
Run Code Online (Sandbox Code Playgroud)

一个更通用的类型,如List,CollectionIterable在左侧更好,与C#相同.我建议反对匈牙利表示法:list优先于hList.此外,您可以省略右侧类型名称并使用菱形运算符(<>)来推断类型.

List<ClassName> list = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

III

构造函数ClassName(String, int, int, int, int, long)未定义.

你的构造函数有三个ints和一个long; 你试图传递四个int和一个long.

IV

假设这是迭代的正确方法,这就是我认为可行的方法:

for (int i = 0; i < hList.size(); i++)
{
    System.out.println(hList[i].currentDate);
}
Run Code Online (Sandbox Code Playgroud)

如果您不需要索引变量,则每个循环的A更好i.

 for (ClassName item: list) {
     System.out.println(item.currentDate);
 }
Run Code Online (Sandbox Code Playgroud)

如果你想要,i那么[i]改为.get(i).Java没有运算符重载,因此[]仅在数组上可用,而不是类或接口List.

for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i).currentDate);
}
Run Code Online (Sandbox Code Playgroud)

  • 确保使用的是`java.util.List`而不是`java.awt.List`. (3认同)
  • 你不能像那样通过索引访问java中的`List`的后备数组(假设它甚至是*是一个数组).你必须使用`list.get(i)`而不是`list [i]`. (2认同)
  • 在C#和Java之间的翻译经常丢失的另一件事是Java的`List`等同于C#的`IList`.这是一个*界面*不是一个类. (2认同)