2

arraylist に 1 つの追加属性を格納する最良の方法は何ですか? オブジェクトの ArrayList をメソッドに渡し、追加のフラグで ArrayList を取得するとします。

ArrayList<MyObject> list = new ArrayList<MyObject>();
//fill
list = myMethod(list);

そして、各オブジェクトのブール値を取得したいのですが、オブジェクトに直接保存したくありません。したがって、myMethod の前のデータ: Apple、Banana、Grapefruit myMethod の後: Apple=>true、Banana=>false、Grapefruit=>false。

オブジェクトにないときにその追加の属性を保存するにはどうすればよいですか? 最適なデータ型は何ですか? ArrayList ではそれができませんよね?

4

5 に答える 5

3

You can create a custom wrapper around Object that has a field of type object and a boolean field. This is the best solution as you will be able to choose a meaningful name for the field. Alternatively you can use the built-in class Pair and create a List<Pair<MyObject, Bool>>.

于 2013-05-22T14:37:35.910 に答える
1

フィールドと、要素がフラグでList<MyObject>あるフィールドを持つクラスを使用して、. これは面倒なので、ブール値フラグを に追加するだけです。クラスを変更できない場合は、クラスを拡張してクラスにフラグを追加します。拡張できない場合は、フィールドとフラグを持つラッパー クラスを作成します。List<Boolean>MyObjectList<MyObject>MyObjectbooleanExtendedMyObject extends MyObjectMyObjectMyObjectboolean

于 2013-05-22T14:36:24.857 に答える
1

Set<MyObject>- のメンバーシップは、そのオブジェクトの値にSet対応します。true

を使用したと仮定すると、 およびが実装されているHashSetことを確認する必要があります。別の方法として、 、 などでそれぞれを一意に識別し、それらの ID のを維持することもできます。MyObjectequalshashCodeMyObjectStringLongSet

于 2013-05-22T14:40:23.223 に答える
1

ArrayList を拡張して新しいプロパティを与えることができます。例えば:

public class MyArrayList<E> extends ArrayList<E>{

    private boolean value;

    public boolean isValue() {
        return value;
    }

    public void setValue(boolean value) {
        this.value = value;
    }
}

そこには ArrayList のすべての機能があり、追加のブール値フィールドがあります。

編集:

あなたのBoolean値がOriginalobjectとは何の関係もないのなら、単にWrapperclassを書いてみませんか? これを解決するには、次の 2 つの可能性があります。

  1. Baseclass を拡張するMyObject
  2. 2 つのプロパティを持つ新しいクラスを作成します。1 つは のインスタンス用で、もう 1 つはbooleanインスタンス用です。MyObject
于 2013-05-22T14:40:57.317 に答える