How to get synchronized version of ArrayList object?

By default ArrayList object is non synchronized but we can get synchronized version of ArrayList by using collection class’s synchronizedList() method.

Non-synchronized 

ArrayList nonSyncronizedList = new ArrayList();

Synchronized

List syncronizeList = new Collections.synchronizedList(l1);

Similarly we can get synchronized version of set, map objects by using the following methods of collection class.

Public static Set synchronizedSet(Set s);

Public static Map synchronizedMap(Map m);

415 total views, 3 views today

Stack Class

  1. It is the child interface of vector.
  2. It is specially designed class for last in first out (LIFO).

Methods in stack

  1. Object push(Object o)

For inserting an object to the stack.

  • Object pop()

To remove and return top of the object.

  • Int peak();

To return the top of the stack without removal of object.

  • Int search(Object o)

If the specified object is available it returns its offset from the top of the stack.

If the specified object is not available it returns -1.

Examples

package List;

import java.util.Stack;

public class StackDemo {
	public static void main(String[] args) {
		Stack s = new Stack();
		s.push("A");
		s.push("B");
		s.push("C");
		System.out.println(s); // [A, B, C]
		System.out.println(s.search("A")); // 3
		System.out.println(s.search("Z")); // -1
	}

}

306 total views, 1 views today

Vector Class

  1. The underlying data structure for the vector is resizable array or grow able array.
  2. Duplicates objects are allowed.
  3. Insertion order is preserved.
  4. Null insertion is possible.
  5. Heterogeneous objects are allowed.
  6. Vector class implemented Serializable, Cloneable and RandomAccess.
  7. Most of the methods present in vector are synchronized. Hence vector object is thread safe.
  8. Best choice if frequent operation is retrieved.

Methods of vector class

For adding objects:-

add(Object o) [from Collection-List l]
add() [from List]
addElement(Object o) [from Vector]

For removing objects:-

remove(Object o) [from Collection]
removeElement(Object o) [from Vector]
remove(int index) [from List]
removeElementAt(int index) [from Vector]
clear() [from Collection]
removeAllElements() [from Vector]
=

For accessing elements:-

Object get(int index) [from Collection]
Object elementAt(int index) [from Vector]
Object firstElement() [from Vector]
Object lastElement() [from Vector]

Other Methods:-

int Size();
int Capacity();
Enumeration elements ();

Constructors of Vector class

Vector v = new Vector();

Creates an empty vector object with default initial capacity 10, once vector reaches its maximum capacity a new object will be created with new capacity.

             New Capacity = 2*Current Capacity

Vector v = new Vector(int initial capacity);

Creates an empty vector object with specified initial capacity.

Vector v = new Vector(int initial capacity, int incremental capacity)
Vector v = new Vector(Collection c);

Creates an equivalent vector object for the given collection.

Example

package List;

import java.util.Vector;

public class VectorDemo {
	public static void main(String[] args) {
		Vector v = new Vector();
		System.out.println(v.capacity()); // 10
		for (int i = 1; i <= 10; i++) {
			v.addElement(i);
		}
		System.out.println(v.capacity()); // 10
		v.addElement("A");
		System.out.println(v.capacity()); // 20
		System.out.println(v); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, A]

	}

}

264 total views, 1 views today

LinkedList

  1. The underlying data structure is double linked list.
  2. Insertion order is preserved.
  3. Duplicates are allowed.
  4. Heterogeneous objects are allowed.
  5. Null insertion is possible.
  6. LinkedList implements Serializable and Cloneable interfaces but not RandomAccess interface.
  7. LinkedList is best choice if our frequent operation is insertion and deletion in the middle.
  8. LinkedList is worst choice if our frequent operation is retrieval operation.
  9. Usually we can use LinkedList to implement stacks & queue to provide support for this requirement LinkedList class defines following specific methods.
  10. In retrieval, 1st element takes 1sec to find, 2nd element takes 2sec to find. Hence nth element takes n sec. So time complexity is O(n)

A double linkedList whose node contains three fields, 1st field either points to the start or address of the previous node, 2nd field contain the data or 3rd field either contain the next node address or points to the end (null).

  LinkedList node

Previous node address or
address point
Data Next node address
or null

LinkedList list points to the 1st element and it has the address of the second node where second node will contain the address of previous node, data and address of next node.

Methods of LinkedList

void addFirst();

void addLast();

Object getFirst();

Object getLast();

Object removeFirst();

Object removeLast();

Constructors of LinkedList

LinkedList list = new LinkedList();

Creates an empty LinkedList object.

LinkedList list= new LinkedList(Collection c);

Creates an equivalent linked list object for given collection.

Examples

package List;

import java.util.LinkedList;

public class LinkedListDemo {

	public static void main(String[] args) {
		LinkedList l1 = new LinkedList();
		l1.add("durga");
		l1.add(30);
		l1.add(null);
		l1.add("durga");
		System.out.println(l1); // [durga, 30, null, durga]
		l1.set(0, "software");
		System.out.println(l1); // [software, 30, null, durga]
		l1.add(0, "venky");
		l1.addFirst("ccc");
		System.out.println(l1); // [ccc, venky, software, 30, null, durga]
	}

}

279 total views, 1 views today

ArrayList

  1. The underlying data structure is resizable array and grow able array.
  2. Duplicates are allowed.
  3. Insertion order is preserved.
  4. Heterogeneous objects are allowed [except TreeSet and TreeMap]
  5. Null insertion is possible.

ArrayList Constructors

  • ArrayList list = new ArrayList();

Creates an empty array list object with default initial capacity. Once array list reaches its maximum capacity a new array list will be created with new capacity.

New capacity = (Current Capacity*3/2)+1 which is almost 75%

            With the above mentioned constructor Arraylist with default size i.e. 10 will be created and once it reaches its maximum capacity then it grows dynamically with new capacity i.e. 15.

  • ArrayList list = new ArrayList(int initial capacity);

Creates an empty array list object with the given initial capacity. Once array list reaches its maximum capacity a new array list will be created with new capacity.

  • ArrayList list = new ArrayList(Collection c)

Creates an array list object for the given collection.

Example

package List;

import java.util.ArrayList;

public class ArrayListDemo {
	public static void main(String[] args) {
		ArrayList l = new ArrayList();
		l.add("A");
		l.add("10");
		l.add("A");
		l.add("null");
		System.out.println(l); // [A, 10, A, null]
		l.remove(2);
		System.out.println(l); // [A, 10, null]
		l.add(2, "M");
		l.add("N");
		System.out.println(l); // [A, 10, M, null, N]

	}

}

6. Usually we can use collection to hold and transfer objects over the network and to support this requirement every collection already implements Serializable and Cloneable.

7. ArrayList and vector classes implements RandomAccess interface so that we can access any random element with the same speed.

package List;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.RandomAccess;

public class ArrayListSerialClone {

	public static void main(String[] args) {
		ArrayList l1 = new ArrayList();
		LinkedList l2 = new LinkedList();
		System.out.println(l1 instanceof Serializable); // true
		System.out.println(l1 instanceof Cloneable); // true

		System.out.println(l2 instanceof Serializable); // true
		System.out.println(l2 instanceof Cloneable); // true

		System.out.println(l1 instanceof RandomAccess); // true
		System.out.println(l2 instanceof RandomAccess); // false

	}
}

8. Hence if our frequent operation is retrieval operation then ArrayList is the best choice.

9. ArrayList is the worst choice if our frequent operation is insertion or deletion in the middle(Because several shift operations will be required).

282 total views, 1 views today

List interface

  1. It is the child interface of collection.
  2. Duplicates are allowed
  3. If we want to represent a group of individual objects as a single entity where insertion order is preserved then we should go for list.
  4. We can differentiate duplicates by using index.
  5. We can preserve insertion order by using index, hence index play very important role in list interface.

List of 10 elements where index starts with 0 to 9. Index goes from 0 to 9. 0 & 9th position contains the same element.

Methods of List:-

void add(int index, Object o)

boolean addAll(int index, Collection c)

object get(int index)

object remove(int index)

object set(int index, Object new)

int indexOf(Object o)

int lastIndexOf(Object o)

ListIterator listIterator();

371 total views, 1 views today