存储具有多个元素的元素

时间:2012-11-09 15:06:27

标签: java sorting arraylist

存储具有多个元素的元素的最佳方法是什么?如在6d阵列中。 我已经看到了类似ArrayList(ArrayList(ArrayList(ArrayList)))的内容,但是没有关于如何或大部分为什么配置这样或者如何访问元素的线索!

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

房屋ID,门牌号码,街道名称,居民,所有者名字,所有者姓氏

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

我所做的是创建一个arraylist,其中包含每个元素的arraylist。基本上我有一个名为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方法将数据放入每个arraylist。

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");

我无法理解如何对这个混乱进行排序并保持条目同步,而无需手动编写大量编码来完成所有操作。此外,我希望能够将居住在特定街道名称上的居民数量总计或居住在拥有firstName或lastName的房屋中的居民总数。

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

5 个答案:

答案 0 :(得分:4)

  

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

     

房屋ID,门牌号码,街道名称,房屋颜色,所有者名字,   所有者姓氏

最好的方法是创建Class名称为House,并将这些属性设为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 Object的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代表具有statebehaviour的对象。但是,如果您想对House元素进行排序在您的arrayList中,您将不得不重写equals和hashcode方法。

答案 1 :(得分:2)

我认为另一种方法是使用这些属性创建House类。

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

示例:

class House{
int houseNum;
String street;

...

//get/set for above properties.
}

并将其添加到列表中:

House houseObj = new House();
list.add(houseObj);

答案 2 :(得分: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());
}

答案 3 :(得分:1)

我认为你不仅仅是Java新手。你是一个新的面向对象编程。你是学生,这是某种功课吗?如果是,请将其标记为。

对于您的特定数据,您的班级应为House。

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

请注意,在我上面的示例代码中,我假设您已经足够了解java以添加privatepublic等访问修饰符,并且对如何添加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 );

要对列表中的对象进行排序,因为它位于List中,它是Java的Collection Framework的一部分。您可以使用Collections.sort()方法对其进行排序。但首先你需要了解它的工作原理。

我建议您使用以下页面:

答案 4 :(得分: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接口的类型列表,还有一个带有一个参数的sort方法。但是,您可能不希望您的House类实现它,因为它不明显在什么基础上应该比较房屋,你自己可能想要使用几个不同的房屋。)

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