用于在java中存储对象的数据集

时间:2011-07-01 18:49:11

标签: java android object data-structures

假设我有多个要存储的对象:

Person ------------ Employee ------------ Sales Engineer       
  |                    |
Customer          Field Engineer

所以:人,客户,员工,销售工程师,现场工程师。

我需要跟踪所有这些......存储它们的最佳方法是什么?在ArrayList中?自定义ArrayList?

它们的存储方式也可能会影响将来的扩展 - 将来,这些对象可能会由SQL Server中的字段生成。 (此外,这是一个Android应用程序 - 所以这可能是一个因素。)

4 个答案:

答案 0 :(得分:5)

你需要List<Person>。你的图表建议继承,所以你需要有一个超类的集合,让多态来完成剩下的工作。

您的代码可以执行此操作:

List<Person> people = new ArrayList<Person>();
// Any class that extends person can be added
people.add(new Customer());
people.add(new FieldEngineer());
for (Person person : people) {
    System.out.println(person);
}

您所表达的设计不允许工程师成为客户,或销售工程师进入现场,但这就是像您这样的情况下的继承诅咒。

如果您需要灵活性,更好的设计可能是保留Person类并以装饰器方式为Person指定角色。

装饰器会使用合成而不是继承来添加行为,如下所示:

public class Customer {

    private Person person;

    public Customer(Person p) { this.person = p; }

    public void buyIt() { // do something customer like here }
}

public class FieldEngineer {

    private Person person;

    public FieldEngineer(Person p) { this.person = p; }

    public void fixIt() { // do something field engineer like here }
}

答案 1 :(得分:4)

使用异构列表 - 在java中,您可以使用此类List <Person>

这样的泛型

答案 2 :(得分:2)

如果您不确定将来如何访问对象,可能会发现HashTable&lt; &gt;提供了广泛的灵活性。

由于它使用键值对,因此您可以快速检索特定对象,如果您认为有必要,.keys()方法可以迭代地遍历整个集合。

答案 3 :(得分:0)

我假设所有对象都是集合的一部分?

理想情况下,Person应该有一个get / setCustomer,而Employee应该有一个get / setFieldEngineer,然后结构应该是这样的:

class CustomerRelationship{
    public Employee employee;
    public SalesEngineer salesEngineer;
    public Person customer;
}

如果对象不是集合的一部分,而是Object的列表,那么您可能需要重新考虑您的设计。或者你可以在任何地方使用instanceof(坏)。