1. What is Java Collections Framework? List out some
benefits of Collections framework?
Collections
are used in every programming language and initial java release contained few
classes for collections: Vector, Stack, Hashtable, Array. But looking at the larger scope and usage, Java
1.2 came up with Collections Framework that group all the collections
interfaces, implementations and algorithms.
Java Collections have come through a long way with usage of Generics and Concurrent Collection classes for thread-safe operations. It also includes blocking interfaces and their implementations in java concurrent package.
Some of the benefits of collections framework are;
Java Collections have come through a long way with usage of Generics and Concurrent Collection classes for thread-safe operations. It also includes blocking interfaces and their implementations in java concurrent package.
Some of the benefits of collections framework are;
· Reduced development effort by using
core collection classes rather than implementing our own collection classes.
· Code quality is enhanced with the use
of well tested collections framework classes.
· Reduced effort for code maintenance by
using collection classes shipped with JDK.
· Reusability and Interoperability
2.What is the
benefit of Generics in Collections Framework?
Java
1.5 came with Generics and all collection interfaces and implementations use it
heavily. Generics allow us to provide the type of Object that a collection can
contain, so if you try to add any element of other type it throws compile time
error.
This avoids ClassCastException at Runtime because you will get the error at compilation. Also Generics make code clean since we don’t need to use casting and instanceof operator
This avoids ClassCastException at Runtime because you will get the error at compilation. Also Generics make code clean since we don’t need to use casting and instanceof operator
3. What are the basic interfaces of Java
Collections Framework?
Collection is the root of the collection hierarchy. A
collection represents a group of objects known as its elements. The Java
platform doesn’t provide any direct implementations of this interface.
Set is a collection that cannot contain duplicate
elements. This interface models the mathematical set abstraction and is used to
represent sets, such as the deck of cards.
List is an ordered collection and can contain duplicate
elements. You can access any element from it’s index. List is more like array
with dynamic length.
A Map is an object that maps keys to values. A map
cannot contain duplicate keys: Each key can map to at most one value.
4.What is an
Iterator?
Iterator
interface provides methods to iterate over any Collection. We can get iterator
instance from a Collection using iterator() method. Iterator takes the place of
Enumeration in the Java Collections Framework. Iterators allow the caller to
remove elements from the underlying collection during the iteration. Java
Collection iterator provides a generic way for traversal through the elements
of a collection and implements Iterator Design Pattern.
5. What is
difference between Enumeration and Iterator interface?
Enumeration
is twice as fast as Iterator and uses very less memory. Enumeration is very
basic and fits to basic needs. But Iterator is much safer as compared to
Enumeration because it always denies other threads to modify the collection
object which is being iterated by it.
Iterator takes the place of Enumeration in the Java Collections Framework. Iterators allow the caller to remove elements from the underlying collection that is not possible with Enumeration. Iterator method names have been improved to make it’s functionality clear.
Iterator takes the place of Enumeration in the Java Collections Framework. Iterators allow the caller to remove elements from the underlying collection that is not possible with Enumeration. Iterator method names have been improved to make it’s functionality clear.
6. Why there is not method like Iterator.add()
to add elements to the collection?
The
semantics are unclear, given that the contract for Iterator makes no guarantees
about the order of iteration. Note, however, that ListIterator does provide an
add operation, as it does guarantee the order of the iteration.
7.Why Iterator
don’t have a method to get next element directly without moving the cursor?
It can
be implemented on top of current Iterator interface but since it’s use will be
rare, it doesn’t make sense to include it in the interface that everyone has to
implement.
8. What is different between Iterator and ListIterator?
· We can use Iterator to traverse Set
and List collections whereas ListIterator can be used with Lists only.
· Iterator can traverse in forward
direction only whereas ListIterator can be used to traverse in both the
directions.
· ListIterator inherits from Iterator
interface and comes with extra functionalities like adding an element,
replacing an element, getting index position for previous and next elements.
9. What is difference between fail-fast and
fail-safe?
Iterator
fail-safe property work with the clone of underlying collection, hence it’s not
affected by any modification in the collection. By design, all the collection
classes in
Fail-fast iterators throw ConcurrentModificationException whereas fail-safe iterator never throws ConcurrentModificationException.
java.util
package
are fail-fast whereas collection classes in java.util.concurrent
are
fail-safe.Fail-fast iterators throw ConcurrentModificationException whereas fail-safe iterator never throws ConcurrentModificationException.
10.What is
difference between HashMap and Hashtable?
HashMap
and Hashtable both implements Map interface and looks similar, however there
are following difference between HashMap and Hashtable.
A. HashMap allows null key and values
whereas Hashtable doesn’t allow null key and values.
B. Hashtable is synchronized but HashMap is
not synchronized. So HashMap is better for single threaded environment,
Hashtable is suitable for multi-threaded environment.
C.
LinkedHashMap
was
introduced in Java 1.4 as a subclass of HashMap, so in case you want iteration
order, you can easily switch from HashMap to LinkedHashMap but that is not the
case with Hashtable whose iteration order is unpredictable.
D. HashMap provides Set of keys to
iterate and hence it’s fail-fast but Hashtable provides Enumeration of keys
that doesn’t support this feature.
E. Hashtable is considered to be legacy
class and if you are looking for modifications of Map while iterating, you
should use ConcurrentHashMap.
11. How to decide
between HashMap and TreeMap?
For
inserting, deleting, and locating elements in a Map, the HashMap offers the
best alternative. If, however, you need to traverse the keys in a sorted order,
then TreeMap is your better alternative. Depending upon the size of your
collection, it may be faster to add elements to a HashMap, then convert the map
to a TreeMap for sorted key traversal.
12. What are
similarities and difference between ArrayList and Vector?
ArrayList
and Vector are similar classes in many ways.
A. Both are index based and backed up by
an array internally.
B. Both maintains the order of insertion
and we can get the elements in the order of insertion.
C. The iterator implementations of
ArrayList and Vector both are fail-fast by design.
D. ArrayList and Vector both allows null
values and random access to element using index number.
These
are the differences between ArrayList and Vector.
A. Vector is synchronized whereas
ArrayList is not synchronized. However if you are looking for modification of
list while iterating, you should use CopyOnWriteArrayList.
B. ArrayList is faster than Vector
because it doesn’t have any overhead because of synchronization.
C. ArrayList is more versatile because we
can get synchronized list or read-only list from it easily using Collections
utility class.
13.What is difference between Array and
ArrayList? When will you use Array over ArrayList?
Arrays
can contain primitive or Objects whereas ArrayList can contain only Objects.
Arrays are fixed size whereas ArrayList size is dynamic.
Arrays doesn’t provide a lot of features like ArrayList, such as addAll, removeAll, iterator etc.
Arrays are fixed size whereas ArrayList size is dynamic.
Arrays doesn’t provide a lot of features like ArrayList, such as addAll, removeAll, iterator etc.
Although
ArrayList is the obvious choice when we work on list, there are few times when
array are good to use.
· If the size of list is fixed and
mostly used to store and traverse them.
· For list of primitive data types,
although Collections use autoboxing to reduce the coding effort but still it
makes them slow when working on fixed size primitive data types.
· If you are working on fixed
multi-dimensional situation, using [][] is far more easier than
List<List<>>
15. Which
collection classes are thread-safe?
Vector,
Hashtable, Properties and Stack are synchronized classes, so they are
thread-safe and can be used in multi-threaded environment. Java 1.5 Concurrent
API included some collection classes that allows modification of collection
while iteration because they work on the clone of the collection, so they are
safe to use in multi-threaded environment.
16. What is
difference between Comparable and Comparator interface?
Comparable
and Comparator interfaces are used to sort collection or array of objects.
Comparable
interface is used to provide the natural sorting of objects and we can use it
to provide sorting based on single logic.
Comparator interface is used to provide different algorithms for sorting and we can chose the comparator we want to use to sort the given collection of objects.
Comparator interface is used to provide different algorithms for sorting and we can chose the comparator we want to use to sort the given collection of objects.
No comments:
Post a Comment