Home Java Java-tips Data Collections Class or Interface

Ask Questions?

View Latest Questions


 
 

Class or Interface
Posted on: July 26, 2006 at 12:00 AM
Declare variables as class or interface type?

Java Notes

Class or Interface

Declare variables as class or interface type?

A common programming philosophy is to declare variables with a type that makes the least assumptions. This allows flexibility to make changes in the underlying type if this latter becomes necessary. For example, the most obvious way to declare x is

ArrayList x = new ArrayList(); // OK

But if x only uses the methods defined in the List interface, it would be better to do the following.

List x = new ArrayList();  // More flexible

This guarantees that x doesn't use any methods that aren't in the List interface. The advantage of this is that later the underlying implementation can be changed.

List x = new LinkedList();  // Changed underlying class

Because the performance characteristics of ArrayList and LinkedList are so different, it is probably not all that likely to make such a drastic change. You can also write your own data structure or use one of many externally defined List data structures which implement the List interface.

Why change the underlying class?

The two List classes, ArrayList and LinkedList both implement the same List interface methods and can be manipulated by the methods in the Collections class, but the performance of different operations may be very different, eg, insertion in the middle of an LinkedList is more efficient, but accessing a random element is more efficient using a ArrayList. If it becomes necessary to change the underyling class for performance reasons, it is easy to do if variables are declared by their interfaces (List, Map, and Set for the Collections classes).

Copyleft 2004 Fred Swartz MIT License

Related Tags for Class or Interface:
cperformanceflexprogrammingcomdomarrayclasslistcollectionsormforminterfacevariablesrandomdiffinsertiomapmethodsclassesinterfacesmakemethodvariabletypelinkipvicollectionarraylistnewsumchangeusingintriathisddloperaidsetelementifforieexamplewithphilosophyprogramlextoramexamxibsseciastssiwsbiboteilitfficanlihangvarulpeimmanchangesceinrmoperationsdifferentasmhilontreasonminoscaddminoslinkedoperationaceclesfacesdeclareemcommonallmeproflexibilitydosamexaxampsrmansussasoesscolatratiolatekisirinkhallsopcollectmplrayerlerleaandarcccollectrtsavaunderlyingtttwxissamssamrirenthstaccessabablatiaphatexifefaceeclpleplprmostmindodsonomogrolo