【问题标题】:Use of ArrayList in Java to store Name and AgeJava中使用ArrayList存储姓名和年龄
【发布时间】:2011-04-27 06:05:10
【问题描述】:

我想在 ArrayList 中同时添加 String 和 Integer 类型的值。

例如,我有一个数组列表,我想在单个 arralist 中添加人员姓名和相应人员的年龄。

我怎样才能做到这一点。我怎样才能得到这个?实际上,我正在从数据库中检索数据,并希望将所有员工姓名和年龄保存在一个数组列表中。比如多维数组列表。

【问题讨论】:

  • 哇,很多答案都在说同样的话。

标签: java


【解决方案1】:

创建一个包含年龄和姓名的人员类,然后创建一个该类型的 ArrayList。

class Person {
  private String mName;
  private int mAge;
  public Person(int age, String name) {
     mName = name;
     mAge = age;
  }
  public String getName() {
     return mName;
  }
  etc ........
}

ArrayList<Person> arr = new ArrayList<Person>();
arr.add(new Person(10, "joe"));

【讨论】:

  • 这是一个很好的答案——你会发现你实际上总是需要一个 Person 类——你没有正确设计你的代码。将这对值存储在同一个集合中的愿望是一个提示,可以准确地告诉您这一点。每当您对姓名和/或年龄进行任何操作时,您都应该向“Person”添加方法,您甚至可能会发现您有更多属于这里的值。
【解决方案2】:

你应该创建一个类来代表一个人,然后将那些添加到一个列表中。在列表中混合对象类型是一种不好的做法。你可以从一个简单的 person 类开始:

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }
}

然后创建一个这样的列表:

List<Person> people = new ArrayList<Person>();

并将您从数据库中读取的人员添加到列表中:

people.add(new Person(name, age));

【讨论】:

  • 好的,朋友。但是假设我有 200 条记录,而不是需要 1000 个对象。我认为这会降低我的表现。我实际上是在 android 中做这个项目?
  • 我本来打算投票的,但注意到了公共变量。瑞安的回答更完整(虽然老实说,我经常这样开始 - 只是随着 Person 演变成一个拥有自己的方法和更多属性的真正类,我总是希望我一开始就将变量设为私有)
  • @Durga Dutt 不,这正是您编写优秀 OO 的方式。也永远不要根据感知到的性能问题做出假设——在你做任何事情之前进行测试。一般来说,由于它是一种 OO 语言并且针对 OO 编码进行了优化,因此您可能会发现它的性能优于其他解决方案。
  • @Durga:几乎可以肯定,对于这么多记录而言,这不会成为性能问题。 @Bill 是对的,在您知道需要之前不要优化。而且我非常怀疑您是否需要针对这种情况。
  • @Bill:是的,我第一次错过了私有字段和 getter 方法。我已经更新了完整的答案。我什至可能也会将它们设为最终版本,但我想可能需要二传手,对于这个例子来说这并不重要。
【解决方案3】:

您可以使用简单的ArrayList 并将intInteger 的盒装类型与String 一起添加。

【讨论】:

    【解决方案4】:

    你可以创建一个 Person 类

    class Person{
     String name;
     int age;
     //Add the getteres and setters
    }
    

    然后如下声明一个arrayList。

    ArrayList<Person> p = new ArrayList<Person>();
    

    然后为每个人创建一个人对象并填充arrayList,如下所示。

    p.add(personObj);
    

    【讨论】:

      【解决方案5】:

      您可以创建一个ArrayList&lt;Object&gt;IntegerString 都是 Object 的子类,因此都可以添加到 ArrayList&lt;Object&gt;

      也就是说,在我看来你不太可能真的想要这样做。 ArrayList 是一个列表。如果您在列表中存储的东西在某种意义上不是同一类东西,这通常是一种难闻的气味(即:表明设计不佳)。

      您所描述的元素之间的对应关系表明您实际上需要一个员工对象列表,其中每个员工对象都有一个姓名和一个年龄。

      如果名称是唯一的,另一种可能性是使用Map。如果您关心维护秩序,可以使用LinkedHashMap

      【讨论】:

        【解决方案6】:
        class Employee{
        int age;
        String name;
        //+acessor method
        }
        
        Lit<Employee> list = new ArrayList<Employee>();
        

        【讨论】:

          【解决方案7】:

          为确保编译器不会报错,请使用泛型指定您想要将对象添加到 ArrayList;这将允许您向其中添加 Integer 和 String 类型:

          ArrayList&lt;Object&gt; myList = new ArrayList&lt;Object&gt;();

          然后您可以将任一类型的对象添加到其中。

          但是,Java 是强类型的,因此需要将两种类型添加到一个 ArrayList 中对我来说是一个设计问题。

          【讨论】:

            猜你喜欢
            • 2018-01-27
            • 2021-08-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-03
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多