Java Arraylist得到

时间:2012-03-17 20:20:58

标签: java arraylist

我正在尝试让这个程序从数组列表中获取密码。

import java.util.ArrayList;

public class CompanyDatabase    {

public ArrayList<Person> getPeople() {
    ArrayList<Person> people = new ArrayList<Person>();
    String[] u = {"Joe","Stan","Leo","John","Sara","Lauren"};
    String[] p = {"pass4321", "asdfjkl", "genericpw", "13579", "helloworld", "companypass"};
    for(int j = 0; j < u.length; j++){
        Person temp = new Person(u[j],p[j]);
        people.add(temp);
    }
    return people;
}
}

import java.util.ArrayList;  
import java.util.Scanner;  
public class CompanyDatabaseDriver {  
    private static Scanner scan = new Scanner( System.in ) );  
    public static void main(String args[]) {  

            CompanyDatabase bcData = new CompanyDatabase();  
            ArrayList<Person> people = bcData.getPeople();    


          // what i tried
          System.out.println(bcData.getPeople());

          // also tried this
          System.out.println(people.get(1));



   }  

}  

输出

[Person@1c9b9ca, Person@c4aad3, Person@1ab28fe, Person@105738, Person@ce5b1c, Person@1bfc93a]

或只是

Person@1995d80

我尝试的第二件事。

每次运行程序时,特定的数字/字母组合似乎都会改变。有没有办法指定从数组列表中显示哪个字符串?

5 个答案:

答案 0 :(得分:3)

您所看到的是Object的默认toString()方法返回的字符串,该方法是类的名称,后跟其哈希码。您将希望覆盖此方法,并为Person类提供一个不错的toString()方法覆盖。

如,

// assuming Person has a name and a password field
@Override
public String toString() {
   return name + ": " + password; // + other field contents?
}

编辑:如果您只想在输出中显示一个字段,请使用Dave Newton的良好解决方案(1 +)。

答案 1 :(得分:3)

覆盖toString()

中的Person

答案 2 :(得分:1)

是;打印您想要查看的对象属性:

out.println(people.get(0).getFirstName());

答案 3 :(得分:1)

打印List时的默认实现是为此List中的所有对象调用toString。并且因为你没有覆盖toString方法,它将从Object类调用默认的toString,它将以十六进制表示法打印对象hashCode,因此你得到这个结果:

Person @ 1c9b9ca(classname @ hashcode),每次执行应用程序时都可以更改它,因为这个哈希码来自对象的内存地址。)

所以一个选项是覆盖你的类中的toString

@Override
public String toString() {
  return String.format("First name %s, Last name %s", firstName, lastName);
}

并致电

System.out.println(yourList);  // this will print toString for each object

另一个选项是在迭代List

时打印这些属性
for(Person person: persons) {
   System.out.println("Person first name: " + person.getFirstName() + " , Last Name: " + person.getLastName());
}

答案 4 :(得分:0)

在第一个打印语句中,您正在尝试打印对象..这就是为什么您总是会看到不同的数字/字母组合..