将元素存储到ArrayList但是会出现冗余?

时间:2013-08-06 01:29:33

标签: java arraylist storage redundancy

我编辑了这个问题: 我正在尝试将数据库的所有表的外键存储在arraylist Fkeys中。我有方法getFK检索现有表的外键(如果存在)

public ArrayList Fkeys = new ArrayList();
public ArrayList Vec = new ArrayList();

public ArrayList getFK () {
    try {

        /* Database connection */

       DBConnection connect = new DBConnection();
       connect.DBConnect();
       Connection con = connect.con;
       /* Getting some infos regarding keys*/
       DatabaseMetaData metadata = con.getMetaData();
       ResultSet clefs = metadata.getImportedKeys(null, null, "persons");

while(clefs.next()) {
    Vec.add(clefs.getString("FKCOLUMN_NAME"));
                   }
    Fkeys.add(Vec);


    clefs = metadata.getImportedKeys(null, null, "departments");

while(clefs.next()) {
    Vec.add(clefs.getString("FKCOLUMN_NAME"));
                   }
    Fkeys.add(Vec);
}

现在,当我执行此操作时,我得到了这样的结果:[[],[]]因为两个表人员和部门没有外键。 但是当我将这些行添加到关于具有3个外键的表学生的方法时

clefs = metadata.getImportedKeys(null, null, "students");

while(clefs.next()) {
    Vec.add(clefs.getString("FKCOLUMN_NAME"));
                   }
    Fkeys.add(Vec);

我得到了这个结果: [[id,person,depp],[id,person,depp],[id,person,depp]] 虽然它应该是: [[id,person,depp],[],[]] 我做错了什么?为什么Vec的内容存储在Fkeys的所有位置?

2 个答案:

答案 0 :(得分:1)

此循环似乎每次都向alist添加相同的内容......

    while(keys.next()) {
          alist.add(clefs.getString("FKCOLUMN_NAME"));  
    }

我不能确定这是问题所在('因为你不告诉我们clefs是什么!)......但它对我来说看起来很可疑。

答案 1 :(得分:0)

查看Sets,它们就像列表一样,但它们具有在对象内部唯一的能力。即如果你有:

Set<Integer> intSet = new HashSet<Integer>()
intSet.add(1);
intSet.add(1);
for (Integer i : intSet) {
     System.out.println(i);
}

最终输出应为:

1

设置不允许同一组中的多个相同对象。

此外,当您声明ArrayLists时,请务必记下每个ArrayList的类型,否则您的IDE应该大吼大叫,但我认为它默认为Object。如果你需要设置/列表中的3个字段,我建议使用自定义模型对象,并将其声明为List<CustomModelObject> listOfObjects = new ArrayList<CustomModelObject>();(如果需要Set的示例,请参见上面的示例)