如何在Java中创建对象数组列表

如何在Java中创建对象数组列表,java,arrays,list,class,object,Java,Arrays,List,Class,Object,具有以下特征: static class Girl{ public String age; public String name; public String id; } static Girl[] girl; 那么我无法在我的主要功能中执行此操作: ResultSet r = s.executeQuery("select count(*) from children"); r.next(); girl_count=r.getInt(1); girl = new

具有以下特征:

static class Girl{
    public String age;
    public String name;
    public String id;
}

static Girl[] girl;
那么我无法在我的主要功能中执行此操作:

ResultSet r = s.executeQuery("select count(*) from children");   
r.next();
girl_count=r.getInt(1);
girl = new Girl[girl_count];

r = s.executeQuery("select * from children");   
int i = 0;
while(r.next()){
    i = r.getString("id");
    if(girl[i]==null)girl[i]=new Girl();
    girl[i].age=r.getString("age");
    girl[i].name=r.getString("name");
    girl[i].id=r.getString("id");
}
上面的代码不起作用,我想知道的是:

System.out.println(girl[3]);
尤其是这一行:

 girl = new Girl[girl_count];

有人能帮我更正这个代码吗或者找出我在这里遗漏了什么?

Java最佳实践表明,类名应该以大写字母开头,变量/字段名应该以小写字母开头。我相信,在这种情况下,您的代码无法编译,因为您有一个名为'girl'的类和一个同名的varaiable

将类更改为大写字母:

static class Girl{ ...}

从那里开始。错误消息的理解也会简单得多。

来自评论:您需要一个地图来描述您想要实现的目标:

Map<Integer, Girl> girls = new HashMap<Integer, Girl>();

while(r.next()){
    int i = r.getInt("id"); // note the getInt()
    Girl g = girls.get(i); //attempt to get girl from map by ID, returns null if not found

    if(g==null) { // check if null
        g=new Girl(); // create
        girls.put(i,g); //put into map
    }
    g.age=r.getString("age");
    g.name=r.getString("name");
    g.id=r.getString("id");
}
重复女孩的例子:哇,我写的是我写的吗???我有一个妻子

此外,您还可以使用
.keySet()
方法对键进行迭代

或者,如果您也需要ID:

for(Map.Entry<Integer,Girl> entry: girls.entrySet()) {

   Integer id = entry.getKey();
   Girl girl = entry.getValue();
   System.out.println(girl.name); //here you can do anything to the Girl, what morality permits...

}
for(Map.Entry:girls.entrySet()){
整数id=entry.getKey();
Girl=entry.getValue();
System.out.println(girl.name);//在这里,只要道德允许,你可以对这个女孩做任何事情。。。
}

然而当结果集中有更多女孩具有相同id时(无论如何都不可能),它会覆盖所述女孩的属性,使其不具有确定性…

您预期会发生什么以及会发生什么?假设id从0到
女孩计数-1
,这段代码很好(忽略输入错误和明显的编译错误)。但是,当您以这种方式打印一个girl对象时,您将获得默认的
toString
实现(很可能是随机输出)。看一看,类和变量不应该使用完全相同的名称。(如果你使用了正确的命名约定,这是不可能的。)这行不行<代码>int i=r.getString(“id”)请阅读我从rolfl的回答中收到的命令我计划做的是创建大量的class girl对象,并通过girl[id]。name或girl[id]。age有一个预定义的id列表,但如果没有
girl=new girl[girl_count],我似乎无法做到这一点
这限制了我,因为ID没有排序,它可以是54,2,13,1,99等等。@punked开始做建议的更改,然后评论如果这不能解决你的问题OK,所以我做了代码更改,大写字母确实有所帮助,但现在我得到
java.lang.ArrayIndexOutOfBoundsException
如果(girl[i]==null)girl[i]=新来的女孩()您的代码中仍然存在一些编译错误,@ppeterka上面提到的行已断开,这将永远无法编译:
int i=r.getString(“id”)
。修复你的代码,然后还要相信数据库中每个女孩的ID值必须小于女孩的长度。这听起来很有希望,我现在就试试这正是我想要的!非常感谢(佩特卡66:))还有一件事,我现在如何迭代它?像(女孩:女孩){}?@punked我在地图上添加了一些关于迭代的细节。谢谢你,这真的很有帮助!
for(Girl girl: girls.values()) {
   System.out.println(girl.name); //here you can do anything to the Girl, what morality permits...

}
for(Map.Entry<Integer,Girl> entry: girls.entrySet()) {

   Integer id = entry.getKey();
   Girl girl = entry.getValue();
   System.out.println(girl.name); //here you can do anything to the Girl, what morality permits...

}