3

存储具有多个元素的元素的最佳方法是什么?就像在 6d 数组中一样。我已经看到了一些类似 ArrayList(ArrayList(ArrayList(ArrayList))) 的内容,但不知道如何或大部分原因将其配置为这样或如何访问元素!

例如,我想创建一个存储以下信息的数组(列表):

房屋 ID、门牌号、街道名称、居民、业主名字、业主姓氏

我希望能够对主记录元素中的任何子元素进行排序和搜索。

我所做的是创建一个数组列表,其中包含每个数组列表。基本上我有一个名为 HouseArray 的类,它有一个名为 CreateArray 的方法。从我的课堂 GUI 中,我有

houses = new HouseArray();
houses.CreateArray();

在 HouseArray 类中,我的方法 CreateArray 有

ArrayList<Integer> entryID;
ArrayList<Integer> houseNum;
ArrayList<String> streetName;
ArrayList<Integer> residents;
ArrayList<String> firstName;
ArrayList<String> lastName; 

entryID = new ArrayList();
houseNum = new ArrayList();
streetName = new ArrayList();
residents = new ArrayList();
firstName = new ArrayList();
lastName = new ArrayList(); 

然后我使用 AddEntry 方法将数据放入每个数组列表中。

this.entryID.add(12345);
this.houseNum.add(9876);
this.streetName.add("My Street");
this.residents.add(4);
this.firstName.add("John");
this.lastName.add("Jones");

我不知道如何能够对这些混乱进行排序并保持条目同步,而无需手动编写大量代码来完成这一切。此外,我希望能够汇总居住在特定街道名称上的居民人数,或居住在拥有名字或姓氏的房屋中的居民人数。

我在正确的轨道上还是有更好的方法来做到这一点?自学java,所以不确定这是否算作作业。

4

5 回答 5

4

例如,我想创建一个存储以下信息的数组(列表):

房屋 ID、门牌号、街道名称、房屋颜色、业主名字、业主姓氏

最好的方法是创建一个Class名称 itHouse并将这些属性作为它的state.

class House {

private long houseId;
private long hNo;
private String streetname;
private String color;
private String owner;
private String firstName;
public House(long houseId, long hNo, String streetName, String color, String owner, String firstName){
  //initialize your instance variables here

}

 public void setHouseId(long houseId){
  this.houseId = houseId;
  }
 //do the same thing for reamining attributes
 //getters and setters for all the attributes.
}

现在,创建一个包含 House 对象的 java.util.List。

List<house> houseList = new Arraylist<>();
//and populate the list with house objects.
House house1 = new House(123,223,"Bond Street", "Green","James Bond", "James");
list.add(house1);

这种方法是Object-Oriented做事的更多方式,因为House它代表一个具有state和的对象。behaviour但是,如果您想对 arrayList 中的 House 元素进行排序,则必须覆盖 equals 和 hashcode 方法。

于 2012-11-09T15:09:27.863 回答
2

我认为另一种方法是创建House具有这些属性的类。

实例化 house 对象并添加到 arraylist。您可以覆盖 equals 和 hashcode 方法来执行排序。

例子:

class House{
int houseNum;
String street;

...

//get/set for above properties.
}

并将其添加到列表中:

House houseObj = new House();
list.add(houseObj);
于 2012-11-09T15:08:38.767 回答
1

你具体在哪里看到的along the lines of ArrayList(ArrayList(ArrayList(ArrayList)))??这看起来很奇怪。从来没有过这样的设计。。

如果要存储多个字段,则使用所有这些字段创建一个自定义类,并拥有该类的 ArrayList。

例如: -

class House{
    private int houseId;
    private int houseNumber;
    private String streetName;
    private String owner;
    private String firstName;

    // Constructors

    // Getters and Setters
}

并创建一个ArrayList该类:-

List<House> myHouses = new ArrayList<House>();

然后,要将对象添加到您的列表中,只需使用普通add方法:-

myHouses.add(new House(houseId, houseNumber, ....));

并访问元素: -

for (House myHouse: myHouses) {
    System.out.println(myHouse.getHouseNumber());
}
于 2012-11-09T15:09:49.873 回答
1

我认为您不仅是 Java 新手。一般来说,您是新的面向对象编程。你是学生,这是某种家庭作业吗?如果是,请将其标记为这样。

对于您的特定数据,您的类应该是 House。

public class House
{
    int entryId;
    int houseNum;
    String streetName;
    String houseColor;
    String firstName;
    String lastName;
}

请注意,在上面的示例代码中,我假设您对 java 有足够的了解来添加访问修饰符,例如private,public等,并且对如何添加 getter 和 setter 方法(例如getEntryId(),setEntryId(int entryId)等)有足够的了解。

如果您的对象实际上更复杂,则最好创建诸如 , 等的AddressPerson

然后使用这个类,您确实创建了一个列表:

    List<House> houses = new ArrayList<House>();
    House myHouse = new House();
    // insert whatever data you want into "myHouse"
    houses.add( myHouse );

对列表中的对象进行排序,因为它在 a 中List,它是 Java 集合框架的一部分。您可以使用该Collections.sort()方法对其进行排序。但首先你需要了解它是如何工作的。

我会建议你以下页面:

于 2012-11-09T15:23:05.037 回答
1

我不知道如何整理这个烂摊子

首先,其他人已经指出你应该创建一个House类来组织“这个烂摊子”。

要对其进行排序,请实现Comparator接口,例如(假设您的House类有一个getEntryID方法):

public class HouseIDComparator implements Comparator<House> {

    @Override
    int compare(House house1, House house2) {
        return house1.getEntryID().compareTo(house2.getEntryID());
    }

}

这个比较器可以传递给Collections.sort(List<T>, Comparator<? super T>)排序。(请注意,还有一个带有一个参数的排序方法,用于实现Comparable接口的类型列表。但是,您可能不希望您的House类实现它,因为在什么基础上比较房屋并不明显,并且您你自己可能想使用几个不同的。)

至于对值求和,最好的方法是遍历列表中的所有元素并手动求和。

于 2012-11-09T15:27:15.377 回答