Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:创建一个类的列表(list<;class>;),并对其进行迭代_Java_Data Structures - Fatal编程技术网

Java:创建一个类的列表(list<;class>;),并对其进行迭代

Java:创建一个类的列表(list<;class>;),并对其进行迭代,java,data-structures,Java,Data Structures,我来自C#背景,我正试图弄清楚如何像在C#中使用类那样使用它们。如果这不是在Java中使用它们的方法,我想知道正确的方法 基本上,我想做的是: 创建一个列表并用数据填充。 反复浏览所述列表 以下是我迄今为止的尝试: 是我想要的类对象: public class ClassName { public ClassName(String _str, int _a, int _b, int _c, int _d, long _e) { str = _str;

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

基本上,我想做的是:

  • 创建一个列表并用数据填充。
  • 反复浏览所述列表
  • 以下是我迄今为止的尝试:

  • 是我想要的类对象

    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;
    }
    
  • 这是在主类文件中引用它的方式:

    // Why would I use this instead of List<T>?
    ArrayList<ClassName> hList = new ArrayList<ClassName>();
    
    hList.add(new ClassName("string", 1, 2, 3, 4, 2432342322));
    
  • 这就是我在Eclipse中遇到的错误:

    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;
    }
    
    构造函数类名(String,int,int,int,int,long)未定义

    …这令人困惑。Eclipse要求我添加我已经添加的内容。当我选择“快速修复”选项时,它与上面的构造函数做了相同的事情,但是没有
    type=type
    的东西。也许我处理得不对

    假设这是一种正确的迭代方式,下面是我认为有效的方法:

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

    那么,如何在Java中创建一个适当的列表并对其进行迭代呢?

    您在类的构造函数中添加了一个额外的int,它需要1个字符串、3个int和1个long,您试图用1个字符串、4个int和1个long创建它。 迭代列表的方法是

      for (ClassName element:hList){
            //something meaningful here 
            System.out.println(element.currentDate);
      }
    
    您还可以使用Java8功能:)

    我 用下划线命名并不常见。我建议改用
    这个
    。而且,
    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;
    }
    
    二, 三, 构造函数
    类名(String,int,int,int,int,long)
    未定义

    您的构造函数有三个
    int
    s和一个
    long
    ;您试图通过四个
    int
    s和一个
    long

    四, 假设这是一种正确的迭代方式,下面是我认为有效的方法:

    for (int i = 0; i < hList.size(); i++)
    {
        System.out.println(hList[i].currentDate);
    }
    
    for (int i = 0; i < hList.size(); i++)
    {
        System.out.println(hList[i].currentDate);
    }
    
    如果您确实想要
    i
    ,请将
    [i]
    更改为
    。获取(i)
    。Java没有运算符重载,因此
    []
    仅在数组上可用,而不是像
    List
    这样的类或接口

    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i).currentDate);
    }
    
    for(int i=0;i
    您要传递4个int,而构造函数附带使用3个int参数,
    ArrayList hList=new ArrayList()通常按
    List hList=new ArrayList()执行。这使您的代码更加灵活,因为您不必依赖于
    List
    @njzk2的特定实现,所以有一个论点是双向的,但我看到的是
    List
    通常是首选的。就我个人而言,我觉得在合理的情况下保持代码通用性的习惯超过了限制超出需要的好处。@njzk2我不同意。返回
    List
    比返回
    ArrayList
    要好。它使API保持通用性,并允许您在不影响调用方的情况下更改要返回的列表的具体类型。从上下文中应该清楚地知道
    列表是只读的还是可写的,如果不是,API文档应该指定它。这就是处理可选方法的方式,而不是通过避免
    收集
    列表
    @njzk2您的最后一个括号可能是我们采取不同做法的根本原因:
    列表
    有缺陷。我同意你的看法。它应该保证O(1)个随机访问,
    链接列表
    应该扩展
    集合
    ,而不是
    列表
    。在我看来,事情就是这样。我认为一个非O(1)<代码> GET()/<代码>方法被打破。因此,当我希望允许调用者按索引查找项目而不必担心速度时,我返回
    List
    。这样我就可以从
    ArrayList
    自由切换到
    Arrays.asList()
    到番石榴的
    ImmutableList
    。我认为这个策略是有效的,因为我知道没有人使用过
    LinkedList
    。所以这就是Java的foreach循环!非常感谢。我确实考虑过使用
    this.var
    ,但我不确定它是否有效。也许我应该试一下!让我们假设我确实需要索引(我想知道如何正确地使用这两个索引),当我使用
    hList[I].var
    时,我得到了这样一个错误:
    表达式的类型必须是数组类型,但它解析为ArrayList
    ,在java中,你不能通过这样的索引访问
    列表的后备数组(假设它甚至是数组)。你必须使用
    list.get(i)
    而不是
    list[i]
    。确保你使用的是
    java.util.list
    而不是
    java.awt.list
    。在C和java之间的翻译中,另一件经常丢失的事情是java的
    list
    相当于C的
    IList
    。这是一个接口而不是一个类。既然你在教授约定(投票赞成),你也可以提到公共字段是不被鼓励的。您的
    println(item)
    应该是
    println(item.currentDate)
    以与示例一致,或者
    println(item.getCurrentDate())
    如果您决定在示例中使用访问器。Nit:1长。对不起,我要说的是,它们是不同类型的。
     for (ClassName item: list) {
         System.out.println(item.currentDate);
     }
    
    for (int i = 0; i < list.size(); i++) {
        System.out.println(list.get(i).currentDate);
    }