A TreeList
doesn't exist, so lets use a PersistentList
as an example.
Lets say you have an @Entity
that you want to save to a database:
public class MyMagicEntity {
@OneToMany
List<MyChildEntity> children;
public void setChildren(final List<MyChildEntity> children) {
this.children = children;
}
}
Now, when you create MyMagicEntity
then you would do something like
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
So you created an ArrayList
that you passed into your MyMagicEntity
, which assigns it to the List
- it doesn't care that the underlying implementation is as long as it's a List
.
Now, later you do:
final MyMagicEntity mme = //load from DB
final List<Children> children = mme.getChildren();
So, what is children
? Well, if we are using JPA and Hibernate it is actually a PersistentList
, not an ArrayList
.
As we access the members of children
, Hibernate will go and pull them from the database. This List
is still a List
- your program doesn't have to know any of this.
Could you do this without using the List
interface? No! Because:
- you cannot create a
PersistentList
- Hibernate cannot create an
ArrayList
Whilst this is an extreme example, where the underlying behaviour of the List
is completely different, this applies in all sorts of other situations.
For example:
ArrayList
and LinkedList
have different performance characteristics, you may want to switch
- Guava has an
ImmutableList
which you may want to use
Collections.unmodifyableList
also implements List
, which you may want to use
- You could conceivably have a
List
backed by a file
The basic idea is that List
defines what any list must be able to do, but not how it is done.