3

複数の要素を持つ要素を保存するための最良の方法は何ですか?6d配列のように。ArrayList(ArrayList(ArrayList(ArrayList)))の行に沿って何かを見てきましたが、それがどのように、またはほとんどの場合、そのように構成されるのか、または要素にアクセスする方法についての手がかりがありません!

例として、次の情報を格納する配列(リスト)を作成します。

家ID、家番号、通りの名前、居住者、所有者の名、所有者の名前

メインレコード要素のサブ要素のいずれかを並べ替えて検索できるようにしたいと思います。

私が行ったことは、これらのそれぞれの配列リストを含む配列リストを作成することです。基本的に、CreateArrayというメソッドを持つHouseArrayというクラスがあります。私のクラス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");

すべてを行うために多くのコーディングを手動で作成しなくても、この混乱を並べ替えてエントリの同期を維持する方法に迷っています。また、特定のstreetNameに住んでいる居住者の数を合計したり、firstNameまたはlastNameを所有している家に住んでいる居住者の数を合計したりできるようにしたいと思います。

私は正しい方向に進んでいますか、それともこれを行うためのより良い方法がありますか?自分でJavaを教えているので、これが宿題としてカウントされるかどうかはわかりません。

4

5 に答える 5

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 オブジェクトを保持する 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、より多くのことを行う方法です。ただし、arrayList で House 要素を並べ替えたい場合は、equals メソッドと hashcode メソッドをオーバーライドする必要があります。Housestatebehaviour

于 2012-11-09T15:09:27.863 に答える
2

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

私はこの混乱をどのように分類できるか途方に暮れています

Houseまず、 「この混乱」を整理するためのクラスを作成する必要があることをすでに指摘している人もいます。

並べ替えるには、インターフェースを実装します。たとえば、(クラスにメソッドがあるとComparator仮定して):HousegetEntryID

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>)、ソートのために渡すことができます。(インターフェイスを実装する型のリスト用に、1つの引数を持つsortメソッドもあることに注意してください。ただし、どの基準で家を比較する必要があるかが明確でないため、クラスにそれを実装さComparableせたくない場合があります。Houseあなた自身はいくつかの異なるものを使いたいかもしれません。)

値の合計については、リスト内のすべての要素をループして手動で合計するのが最善の方法です。

于 2012-11-09T15:27:15.377 に答える
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ていますpublicgetEntryId()setEntryId(int entryId)

オブジェクトが実際にはもっと複雑な場合はAddressPerson、 などのクラスを作成したほうがよい場合もあります。

次に、このクラスを使用して、リストを作成します。

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

リスト内のオブジェクトを並べ替えるには、ListJava の Collection Framework の一部であるためです。Collections.sort()メソッドを使用して並べ替えることができます。しかし、最初にそれがどのように機能するかを理解する必要があります。

次のページをお勧めします。

于 2012-11-09T15:23:05.037 に答える