Java Interview Questions : Series 8


 

144. What is the difference between

Collection and Collections

Framework in Java?

In Java, a Collection is an object that contains multiple elements of

same type in a single unit. These multiple elements can be accessed

through one Collection object.

In Java Collections Framework is a library that provides common

architecture for creating, updating and accessing different types of

collections. In Collections framework there are common methods

that are frequently used by developers for working on a Collection

object.


145. What are the main benefits of

Collections Framework in Java?

Main benefits of Collections Framework in Java are as follows:

1. Reusability: Java Collections Framework provides

common classes and utility methods than can be used with

different types of collections. This promotes the reusability

of the code. A developer does not have to re-invent the

wheel by writing the same method again.

2. Quality: Using Java Collection Framework improves the

program quality, since the code is already tested and used

by thousands of developers.

3. Speed: Most of programmers report that their development

speed increased since they can focus on core logic and use

the generic collections provided by Java framework.

4. Maintenance: Since most of the Java Collections

framework code is open source and API documents is

widely available, it is easy to maintain the code written

with the help of Java Collections framework. One

developer can easily pick the code of previous developer.


146. What is the root interface of

Collection hierarchy in Java?

The root interface of Collection hierarchy in Java is Collection

interface.

But the Collection interface extends Iterable interface. Due to this

some people consider Iterable interface as the root interface.

Iterable interface is present in java.lang package but Collection

interface is present in java.util package. Oracle Java API docs

mention that Collection interface is a member of the Java

Collections framework.

Whereas, Iterable interface is not stated as a part of Java

Collections framework in Java docs.

Due to this Collection interface is the root of Collections

Framework.


147. What are the main differences

between Collection and Collections?

Main differences between Collection and Collections are as

follows:

1. Collection is an interface in Java. But Collections is a

class in Java.

2. Collection is a base interface. Collections is a utility class

in Java.

3. Collection defines methods that are used for data structures

that contain the objects. Collections defines the methods

that are used for operations like access, find etc. on a

Collection.


148. What are the Thread-safe

classes in Java Collections

framework?

The Thread-safe classes in Java Collections framework are:

Stack

Properties

Vector

Hashtable

BlockingQueue

ConcurrentMap

ConcurrentNavigableMap


149. How will you efficiently

remove elements while iterating a

Collection?

The right way to remove elements from a collection while iterating

is by using ListIterator.remove() method.

E.g.

ListIterator<Integer> iter = myList.iterator();

while(iter.hasNext()) {

itr.remove();

}

Some developers use following code to remove an element which is

incorrect:

Iterator<Integer> iter = myList.iterator();

while(iter.hasNext()) {

itr.remove();

}

By doing so we get ConcurrentModificationException.

An iterator is first created to traverse the list. But at the same time

the list is changed by remove() method.

In Java, it is not allowed for a thread to modify a collection while

another thread is iterating it. ListIterator provides the capability of

removing an object during traversal.


150. How will you convert a List into

an array of integers like- int[]?

We can use ArrayUtils class in Apache Commons Lang library.

Sample code is:

int[]intArray = ArrayUtils.toPrimitive(myList.toArray(new

Integer[0]));

If we use List.toArray(), it will convert List to Integer[].

Another option is:

int[] intArray = new int[myList.size()];

for (int i=0; i < myList.size(); i++) {

intArray [i] = myList.get(i);

}


151. How will you convert an array of

primitive integers int[] to a List

collection?

We can use ArrayUtils in Apache Commons Lang library for this

purpose.

Sample code is:

List intList = Arrays.asList(ArrayUtils.toObject(intArray));

The other option would be to use a for loop and explicitly adding

integers to a List.

Sample code is:

int[]intArray = {10,20,30};

List<Integer> intList = new ArrayList<Integer>();

for (int i: intArray) {

intList.add(i);

}


152. How will you run a filter on a

Collection?

We can use CollectionUtils of Apache for this purpose. We will

have to create a Predicate that will define the condition for our

filter. Then we can apply this Predicate in filter() method.

Sample code is:

In this example we filter any names that are less than 5 characters

long.

List<String> namesList = asList( "Red", "Blue", "Green" );

List<String> shortNamesList = new ArrayList<String>();

shortNamesList.addAll( namesList );

CollectionUtils.filter( shortNamesList, new Predicate(){

public boolean evaluate( Object input ) {

return ((String) input).length() < 5;

}

} );

We can also use Google Guava library for this.

In Java 8, we can use Predicate to filter a Collection through

Stream.


153. How will you convert a List to a

Set?

There are two ways to convert a List to a Set in Java.

Option 1: Use HashSet

Set<Integer> mySet = new HashSet<Integer>(myList);

In this case we put a list into a HashSet. Internally hashCode()

method is used to identify duplicate elements.

Option 2: Use TreeSet

In this case we use our own comparator to find duplicate objects.

Set<Integer> mySet = new TreeSet<Integer>(myComparator);

mySet.addAll(myList);


154. How will you remove duplicate

elements from an ArrayList?

The trick in this question is to use a collection that does not allow

duplicate elements. So we use a Set for this purpose.

Option 1: Use Set

If ordering of elements is not important then we just put the elements

of ArrayList in a HashSet and then add them back to the ArrayList.

Sample Code is:

ArrayList myList = // ArrayList with duplicate elements

Set<Integer> mySet = new HashSet<Integer>(myList);

myList.clear();

myList.addAll(mySet);

Option 2: Use LinkedHashSet

If ordering of elements is important then we put the elements of

ArrayList in a LinkedHashSet and then add them back to the

ArrayList.

Sample Code is:

ArrayList myList = // ArrayList with duplicate elements

Set<Integer> mySet = new LinkedHashSet<Integer>(myList);

myList.clear();

myList.addAll(mySet);


155. How can you maintain a

Collection with elements in Sorted

order?

In Java, there are many ways to maintain a Collection with elements

in sorted order.

Some collections like TreeSet store elements in the natural

ordering. In case of natural ordering we have to implement

Comparable interface for comparing the elements.

We can also maintain custom ordering by providing a custom

Comparator to a Collection.

Another option is to use the utility method Collections.sort() to sort

a List. This sorting gives nlog(n) order of performance. But if we

have to use this method multiple times then it will be costly on

performance.

Another option is to use a PriorityQueue that provides an ordered

queue. The main difference between PriorityQueue and

Collections.sort() is that PriorityQueue maintains a queue in Order

all the time, but we can only retrieve head element from queue. We

cannot access the elements of PriorityQueue in Random order.

We can use TreeSet to maintain sorted order of elements in

collection if there are no duplicate elements in collection.


156. What are the differences between

the two data structures: a Vector and

an ArrayList?

An ArrayList is a newer class than a Vector. A Vector is considered a

legacy class in Java. The differences are:

1. Synchronization: Vector is synchronized, but the ArrayList

is not synchronized. So an ArrayList has faster operations

than a Vector.

2. Data Growth: Internally both an ArrayList and Vector use

an array to store data. When an ArrayList is almost full it

increases its size by 50% of the array size. Whereas a

Vector increases it by doubling the underlying array size.


157. What are the differences between

Collection and Collections in Java?

Main differences between Collection and Collections are:

1. Type: Collection is an interface in Java. Collections is a

class.

2. Features: Collection interface provides basic features of

data structure to List, Set and Queue interfaces.

Collections is a utility class to sort and synchronize

collection elements. It has polymorphic algorithms to

operate on collections.

3. Method Type: Most of the methods in Collection are at

instance level. Collections class has mainly static methods

that can work on an instance of Collection.


158. In which scenario, LinkedList

is better than ArrayList in Java?

ArrayList is more popular than LinkedList in Java due to its ease of

use and random access to elements feature.

But LinkedList is better in the scenario when we do not need

random access to elements or there are a lot of insertion, deletion of

elements.


159. What are the differences between

a List and Set collection in Java?

Main differences between a List and a Set are:

1. Order: List collection is an ordered sequence of elements.

A Set is just a distinct collection of elements that is

unordered.

2. Positional Access: When we use a List, we can specify

where exactly we want to insert an element. In a Set there

is no order, so we can insert element anywhere without

worrying about order.

3. Duplicate: In a List we can store duplicate elements. A Set

can hold only unique elements.


160. What are the differences between

a HashSet and TreeSet collection in

Java?

Main differences between a HashSet and TreeSet are:

1. Ordering: In a HashSet elements are stored in a random

order. In a TreeSet, elements are stored according to

natural ordering.

2. Null Value Element: We can store null value object in a

HashSet. A TreeSet does not allow to add a null value

object.

3. Performance: HashSet performs basic operations like

add(), remove(), contains(), size() etc in a constant size

time. A TreeSet performs these operations at the order of

log(n) time.

4. Speed: A HashSet is better than a TreeSet in performance

for most of operations like add(), remove(), contains(),

size() etc .

5. Internal Structure: a HashMap in Java internally backs a

HashSet. A NavigableMap backs a TreeSet internally.

6. Features: A TreeSet has more features compared to a

HashSet. It has methods like pollFirst(), pollLast(), first(),

last(), ceiling(), lower() etc.

7. Element Comparison: A HashSet uses equals() method for

comparison. A TreeSet uses compareTo() method for

comparison to maintain ordering of elements.


161. In Java, how will you decide when

to use a List, Set or a Map collection?

1. If we want a Collection that does not store duplicate

values, then we use a Set based collection.

2. If we want to frequently access elements operations based

on an index value then we use a List based collection. E.g.

ArrayList

3. If we want to maintain the insertion order of elements in a

collection then we use a List based collection.

4. For fast search operation based on a key, value pair, we

use a HashMap based collection.

5. If we want to maintain the elements in a sorted order, then

we use a TreeSet based collection.


162. What are the differences between

a HashMap and a Hashtable in Java?

Main differences between a HashMap and a Hashtable are:

1. Synchronization: HashMap is not a synchronized

collection. If it is used in multi-thread environment, it may

not provide thread safety. A Hashtable is a synchronized

collection. Not more than one thread can access a

Hashtable at a given moment of time. The thread that

works on Hashtable acquires a lock on it and it makes

other threads wait till its work is completed.

2. Null values: A HashMap allows only one null key and any

number of null values. A Hashtable does not allow null

keys and null values.

3. Ordering: A HashMap implementation by LinkedHashMap

maintains the insertion order of elements. A TreeMap sorts

the mappings based on the ascending order of keys. On the

other hand, a Hashtable does not provide guarantee of any

kind of order of elements. It does not maintain the

mappings of key values in any specific order.

4. Legacy: Hashtable was not the initial part of collection

framework in Java. It has been made a collection

framework member, after being retrofitted to implement the

Map interface. A HashMap implements Map interface and

is a part of collection framework since the beginning.

5. Iterator: The Iterator of HashMap is a fail-fast and it

throws ConcurrentModificationException if any other

Thread modifies the map by inserting or removing any

element except iterator’s own remove() method.

Enumerator of the Hashtable is not fail-fast.


163. What are the differences between

a HashMap and a TreeMap?

Main differences between a HashMap and a TreeMap in Java are:

1. Order: A HashMap does not maintain any order of its keys.

In a HashMap there is no guarantee that the element

inserted first will be retrieved first.

2. In a TreeMap elements are stored according to natural

ordering of elements. A TreeMap uses compareTo()

method to store elements in a natural order.

3. Internal Implementation: A HashMap uses Hashing

internally. A TreeMap internally uses Red-Black tree

implementation.

4. Parent Interfaces: A HashMap implements Map interface.

TreeMap implements NavigableMap interface.

5. Null values: A HashMap can store one null key and

multiple null values. A TreeMap can not contain null key

but it may contain multiple null values.

6. Performance: A HashMap gives constant time performance

for operations like get() and put(). A TreeMap gives order

of log(n) time performance for get() and put() methods.

7. Comparison: A HashMap uses equals() method to compare

keys. A TreeMap uses compareTo() method for

maintaining natural ordering.

8. Features: A TreeMap has more features than a HashMap. It

has methods like pollFirstEntry() , pollLastEntry() ,

tailMap() , firstKey() , lastKey() etc. that are not provided

by a HashMap.


164. What are the differences

between Comparable and

Comparator?

Main differences between Comparable and Comparator are:

1. Type: Comparable<T> is an interface in Java where T is

the type of objects that this object may be compared to.

2. Comparator<T> is also an interface where T is the type of

objects that may be compared by this comparator.

3. Sorting: In Comparable, we can only create one sort

sequence. In Comparator we can create multiple sort

sequences.

4. Method Used: Comparator<T> interface in Java has

method public int compare (Object o1, Object o2) that

returns a negative integer, zero, or a positive integer when

the object o1 is less than, equal to, or greater than the

object o2. A Comparable<T> interface has method public

int compareTo(Object o) that returns a negative integer,

zero, or a positive integer when this object is less than,

equal to, or greater than the object o.

5. Objects for Comparison: The Comparator compares two

objects given to it as input. Comparable interface

compares "this" reference with the object given as input.

6. Package location: Comparable interface in Java is defined

in java.lang package. Comparator interface in Java is

defined in java.util package.


Comments

Popular posts from this blog

3 Lines of Code And You Can Download Your Favourite Youtube Video.

Leetcode Problem(Easy) Roman to Integer

Leetcode : (Find Minimum in Rotated Sorted Array)