TreeList
が存在しないので、例としてPersistentList
を使用してください。
あなたは、データベースに保存したい@Entity
を考えてみましょう:今すぐ
public class MyMagicEntity {
@OneToMany
List<MyChildEntity> children;
public void setChildren(final List<MyChildEntity> children) {
this.children = children;
}
}
、あなたがMyMagicEntity
を作成する際には、
final MyMagicEntity mme = new MyMagicEntity();
final List<MyChildEntity> children = new ArrayList<>();
children.add(new MyChildEntity("one"));
children.add(new MyChildEntity("two"));
children.add(new MyChildEntity("three"));
mme.setChildren(children);
//save to DB
ような何かをするだろうですから、ArrayList
を作成MyMagicEntity
に渡され、List
に割り当てられます。List
と同じ長さの実装であることには気を付けません。
は今、後であなたは:
final MyMagicEntity mme = //load from DB
final List<Children> children = mme.getChildren();
だから、children
何ですか?さて、JPAとHibernateを使用しているのであれば、実際にはPersistentList
であり、ArrayList
ではありません。
私たちがchildren
のメンバーにアクセスすると、Hibernateはデータベースからそれらを引き出します。このList
はまだList
です。あなたのプログラムはこれを知る必要はありません。
List
インターフェイスを使用せずにこれを実行できますか?いいえ!ので:
- は、あなたがこの
List
の根本的な振る舞いは完全に異なっている極端な例、であるがPersistentList
- Hibernateは
ArrayList
を作成することはできません作成することはできません、これはすべての種類に適用されます他の状況の。
例えば
:
ArrayList
とLinkedList
が、あなたは
- グアバを切り替えたいことがあり、異なる性能特性を持っているあなたが使用することをお勧めします
ImmutableList
持ってしたいことがあり
Collections.unmodifyableList
もimplements List
、使用する
List
は、ファイル でバックアップされている可能性があります
基本的な考えは、List
はどのようなリストでもできなければならないことを定義していますが、その仕組みは定義していません。
"ソート"を考えてください。 ArrayListは 'add'でソートされません。他の実装もそうするかもしれない。したがって、要件がソートされたアイテムに変更された場合は、実装を交換するだけで済みます。クライアントコードの実装を変更することなくクライアントコードの動作を変更しました(実装を選択する行は1行を除く)。もちろん:特定の実装に固有のメソッドを使用する必要がある場合、その実装にバインドされています。 – Fildor