Collections Notes
Collections Notes
Collections
Agenda
1. Introduction
2. Limitations of Object[] array
3. Differences between Arrays and Collections ?
4. 9(Nine) key interfaces of collection framework
i. Collection
ii. List
iii. Set
iv. SortedSet
v. NavigableSet
vi. Queue
vii. Map
viii. SortedMap
ix. NavigableMap
5. What is the difference between Collection and Collections ?
6. In collection framework the following are legacy characters
7. Collection interface
8. List interface
9. ArrayList
o Differences between ArrayList and Vector ?
o Getting synchronized version of ArrayList object
LinkedList
Vector
Stack
The 3 cursors of java
0. Enumeration
1. Iterator
2. ListIterator
o Compression of Enumeration , Iterator and ListIterator ?
Set interface
HashSet
LinkedHashSet
Diff b/w HashSet &
LinkedHashSet SortedSet
TreeSet
o Null acceptance
Comparable interface
compareTo() method analysis
Comparator interface
Compression of Comparable and Comparator ?
2
– , ,
Core Java with SCJP/ OCJP Notes Collections
Introduction:
1. Arrays are fixed in size that is once we created an array there is no chance of
increasing (or) decreasing the size based on our requirement hence to use
arrays concept compulsory we should know the size in advance which may not
possible always.
2. Arrays can hold only homogeneous data elements.
Example:
Student[] s=new Student[10000];
s[0]=new Student();//valid
3
– , ,
Core Java with SCJP/ OCJP Notes Collections
Arrays Collections
2) Memory point of view arrays are 2) Memory point of view collections are
not recommended to use. highly recommended to use.
4
– , ,
Core Java with SCJP/ OCJP Notes Collections
6) Arrays can hold both primitives and 6) Collections can hold only objects but not
object types. primitives.
Collection:
If we want to represent a group of objects as single entity then we should go
for collections.
Collection framework:
It defines several classes and interfaces to represent a group of objects as a single entity.
Java C++
Collection Containers
1. Collection
2. List
3. Set
4. SortedSet
5. NavigableSet
6. Queue
7. Map
8. SortedMap
9. NavigableMap
Collection:
5
– , ,
Core Java with SCJP/ OCJP Notes Collections
List:
Diagram:
Vector and Stack classes are re-engineered in 1.2 versions to implement List interface.
Set:
6
– , ,
Core Java with SCJP/ OCJP Notes Collections
Diagram:
SortedSet:
NavigableSet:
Queue:
Diagram:
7
– , ,
Core Java with SCJP/ OCJP Notes Collections
Note: All the above interfaces (Collection, List, Set, SortedSet, NavigableSet,
and Queue) meant for representing a group of individual objects.
If we want to represent a group of objects as key-value pairs then we should go for Map.
Map:
Diagram:
8
– , ,
Core Java with SCJP/ OCJP Notes Collections
SortedMap:
NavigableMap:
Collection--------------------interface
Collections------------------class
1. Enumeration(I)
2. Dictionary(AC)
3. Vector(C)
4. Stack(C)
5. Hashtable(C)
6. Properties(C)
Diagram:
Diagram:
9
– , ,
Core Java with SCJP/ OCJP Notes Collections
Collection interface:
10
– , ,
Core Java with SCJP/ OCJP Notes Collections
ArrayList:
Constructors:
Creates an empty ArrayList object with default initial capacity "10" if ArrayList
reaches its max capacity then a new ArrayList object will be created with
Creates an equivalent ArrayList object for the given Collection that is this
constructor meant for inter conversation between collection objects. That is to dance
between collection objects.
11
– , ,
Core Java with SCJP/ OCJP Notes Collections
a.add("A");
a.add(10);
a.add("A");
a.add(null);
System.out.println(a);//[A, 10, A,
null] a.remove(2);
System.out.println(a);//[A, 10,
null] a.add(2,"m");
a.add("n");
System.out.println(a);//[A, 10, m, null, n]
}
}
Usually we can use collection to hold and transfer objects from one tier to
another tier. To provide support for this requirement every Collection class
already implements Serializable and Cloneable interfaces.
ArrayList and Vector classes implements RandomAccess interface so that any
random element we can access with the same speed. Hence ArrayList is the
best choice of "retrival operation".
RandomAccess interface present in util package and doesn't contain any methods.
It is a marker interface.
Example :
ArrayList a1=new ArrayList();
LinkedList a2=new LinkedList();
System.out.println(a1 instanceof Serializable ); //true
System.out.println(a2 instanceof Clonable); //true
System.out.println(a1 instanceof RandomAccess); //true
2) At a time multiple Threads are allow to 2) At a time only one Thread is allow to
operate on ArrayList object and hence operate on Vector object and hence Vector
ArrayList object is not Thread safe. object is Thread safe.
12
– , ,
Core Java with SCJP/ OCJP Notes Collections
Example:
Similarly we can get synchronized version of Set and Map objects by using
the following methods.
1) public static Set synchronizedSet(Set s);
2) public static Map synchronizedMap(Map m);
ArrayList is the best choice if our frequent operation is retrieval.
ArrayList is the worst choice if our frequent operation is insertion (or) deletion
in the middle because it requires several internal shift operations.
Diagram:
LinkedList:
13
– , ,
Core Java with SCJP/ OCJP Notes Collections
Diagram:
Constructors:
14
– , ,
Core Java with SCJP/ OCJP Notes Collections
Example:
import java.util.*;
class LinkedListDemo
{
public static void main(String[] args)
{
LinkedList l=new
LinkedList(); l.add("ashok");
l.add(30);
l.add(null);
l.add("ashok");
System.out.println(l);//[ashok, 30, null,
ashok] l.set(0,"software");
System.out.println(l);//[software, 30, null,
ashok]
l.set(0,"venky");
System.out.println(l);//[venky, 30, null,
ashok] l.removeLast();
System.out.println(l);//[venky, 30, null]
l.addFirst("vvv");
System.out.println(l);//[vvv, venky, 30, null]
}
}
Vector:
Every method present in Vector is synchronized and hence Vector is Thread safe.
To add objects:
1. add(Object o);-----Collection
2. add(int index,Object o);-----List
3. addElement(Object o);-----Vector
To remove elements:
15
– , ,
Core Java with SCJP/ OCJP Notes Collections
1. remove(Object o);--------Collection
2. remove(int index);--------------List
3. removeElement(Object o);----Vector
4. removeElementAt(int index);-----Vector
5. removeAllElements();-----Vector
6. clear();-------Collection
To get objects:
Other methods:
Constructors:
Example:
import java.util.*;
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]
}
16
– , ,
Core Java with SCJP/ OCJP Notes Collections
}
Stack:
Constructor:
Methods:
Example:
import java.util.*;
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.pop());//C
System.out.println(s);//[A, B]
System.out.println(s.peek());//B
System.out.println(s.search("A"));//2
System.out.println(s.search("Z"));//-1
System.out.println(s.empty());//false
}
}
17
– , ,
Core Java with SCJP/ OCJP Notes Collections
If we want to get objects one by one from the collection then we should go for
cursor. There are 3 types of cursors available in java. They are:
1. Enumeration
2. Iterator
3. ListIterator
Enumeration:
1. We can use Enumeration to get objects one by one from the legacy
collection objects.
2. We can create Enumeration object by using elements()
method. public Enumeration elements();
Enumeration e=v.elements();
using Vector Object
Example:
import java.util.*;
class EnumerationDemo
{
public static void main(String[] args)
{
Vector v=new Vector();
for(int i=0;i<=10;i++)
{
v.addElement(i);
}
System.out.println(v);//[0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10]
Enumeration e=v.elements();
while(e.hasMoreElements())
{
Integer i=(Integer)e.nextElement();
if(i%2==0)
System.out.println(i);//0 2 4 6 8 10
}
System.out.print(v);//[0, 1, 2, 3, 4, 5, 6, 7, 8,
9, 10]
}
}
18
– , ,
Core Java with SCJP/ OCJP Notes Collections
Limitations of Enumeration:
1. We can apply Enumeration concept only for legacy classes and it is not a
universal cursor.
2. By using Enumeration we can get only read access and we can't perform
remove operations.
3. To overcome these limitations sun people introduced Iterator concept
in 1.2v.
Iterator:
1. We can use Iterator to get objects one by one from any collection object.
2. We can apply Iterator concept for any collection object and it is a universal cursor.
3. While iterating the objects by Iterator we can perform both read and
remove operations.
Example:
import java.util.*;
class IteratorDemo
{
public static void main(String[] args)
{
ArrayList a=new ArrayList();
for(int i=0;i<=10;i++)
{
a.add(i);
}
System.out.println(a);//[0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10]
Iterator itr=a.iterator();
while(itr.hasNext())
{
Integer i=(Integer)itr.next();
if(i%2==0)
System.out.println(i);//0, 2, 4, 6,
8, 10 else
itr.remove();
19
– , ,
Core Java with SCJP/ OCJP Notes Collections
}
System.out.println(a);//[0, 2, 4, 6, 8, 10]
}
}
Limitations of Iterator:
1. Both enumeration and Iterator are single direction cursors only. That is we can
always move only forward direction and we can't move to the backward direction.
2. While iterating by Iterator we can perform only read and remove operations
and we can't perform replacement and addition of new objects.
3. To overcome these limitations sun people introduced listIterator concept.
ListIterator:
Example:
import java.util.*;
class ListIteratorDemo
{
public static void main(String[] args)
{
20
– , ,
Core Java with SCJP/ OCJP Notes Collections
1) Is it legacy ? Yes no no
21
– , ,
Core Java with SCJP/ OCJP Notes Collections
hasNext()
hasMoreElement()
6) Methods next() 9 methods.
nextElement()
remove()
Set interface:
Diagram:
Set interface does not contain any new method we have to use only Collection
interface methods.
22
– , ,
Core Java with SCJP/ OCJP Notes Collections
HashSet:
Constructors:
Note : After filling how much ratio new HashSet object will be created , The ratio is
called "FillRatio" or "LoadFactor".
Example:
import java.util.*;
class HashSetDemo
{
public static void main(String[] args)
{
HashSet h=new
HashSet(); h.add("B");
h.add("C");
h.add("D");
h.add("Z");
h.add(null);
h.add(10);
System.out.println(h.add("Z"));//false
System.out.println(h);//[null, D, B, C, 10, Z]
}
}
23
– , ,
Core Java with SCJP/ OCJP Notes Collections
LinkedHashSet:
HashSet LinkedHashSet
In the above program if we are replacing HashSet with LinkedHashSet the output is [B,
C, D, Z, null, 10].That is insertion order is preserved.
Example:
import java.util.*;
class LinkedHashSetDemo
{
public static void main(String[] args)
{
LinkedHashSet h=new
LinkedHashSet(); h.add("B");
h.add("C");
h.add("D");
h.add("Z");
h.add(null);
h.add(10);
System.out.println(h.add("Z"));//false
System.out.println(h);//[B, C, D, Z, null, 10]
}
}
SortedSet:
24
– , ,
Core Java with SCJP/ OCJP Notes Collections
1. Object first();
2. Object last();
3. SortedSet headSet(Object obj);
Returns the SortedSet whose elements are <obj.
4. SortedSet tailSet(Object obj);
It returns the SortedSet whose elements are >=obj.
5. SortedSet subset(Object o1,Object o2);
Returns the SortedSet whose elements are >=o1 but <o2.
6. Comparator comparator();
o Returns the
Comparator object that describes underlying sorting technique.
o If we are following default natural sorting order then this method
returns null.
Diagram:
TreeSet:
25
– , ,
Core Java with SCJP/ OCJP Notes Collections
Constructors:
Example 1:
import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet t=new
TreeSet(); t.add("A");
t.add("a");
t.add("B");
t.add("Z");
t.add("L");
//t.add(new Integer(10));//ClassCastException
//t.add(null);//NullPointerException
System.out.println(t);//[A, B, L, Z, a]
}
}
Null acceptance:
For the empty TreeSet as the 1st element "null" insertion is possible but
after inserting that null if we are trying to insert any other we will get
NullPointerException.
For the non empty TreeSet if we are trying to insert null then we will get
NullPointerException.
Example 2:
import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet t=new TreeSet();
t.add(new StringBuffer("A"));
t.add(new StringBuffer("Z"));
t.add(new StringBuffer("L"));
t.add(new StringBuffer("B"));
System.out.println(t);
26
– , ,
Core Java with SCJP/ OCJP Notes Collections
}
}
Output:
Runtime Exception.
Note :
Comparable interface:
Example 3:
class Test
{
public static void main(String[] args)
{
System.out.println("A".compareTo("Z"));//-25
27
– , ,
Core Java with SCJP/ OCJP Notes Collections
System.out.println("Z".compareTo("K"));//15
System.out.println("A".compareTo("A"));//0
//System.out.println("A".compareTo(new
Integer(10)));
//Test.java:8:
compareTo(java.lang.String) in java.lang.String cannot
be applied to (java.lang.Integer)
//System.out.println("A".compareTo(null));//NullPointerE
xception
}
}
If we are depending on default natural sorting order then internally JVM will
use compareTo() method to arrange objects in sorting order.
Example 4:
import java.util.*;
class Test
{
public static void main(String[] args)
{
TreeSet t=new
TreeSet(); t.add(10);
t.add(0);
t.add(15);
t.add(10);
System.out.println(t);//[0, 10, 15]
}
}
28
– , ,
Core Java with SCJP/ OCJP Notes Collections
If we are not satisfying with default natural sorting order (or) if default
natural sorting order is not available then we can define our own customized
sorting by Comparator object.
Comparable meant for default natural sorting order.
Comparator meant for customized sorting order.
Comparator interface:
Comparator interface present in java.util package this interface defines the following
2 methods.
Requirement: Write a program to insert integer objects into the TreeSet where
the sorting order is descending order.
Program:
import java.util.*;
class Test
{
public static void main(String[] args)
{
TreeSet t=new TreeSet(new MyComparator()); //---
->(1)
t.add(10);
t.add(0);
t.add(15);
t.add(5);
t.add(20);
29
– , ,
Core Java with SCJP/ OCJP Notes Collections
At line "1" if we are not passing Comparator object then JVM will always calls
compareTo() method which is meant for default natural sorting
order(ascending order)hence in this case the output is [0, 5, 10, 15, 20].
At line "1" if we are passing Comparator object then JVM calls compare()
method of MyComparator class which is meant for customized sorting
order(descending order) hence in this case the output is [20, 15, 10, 5, 0].
Diagram:
30
– , ,
Core Java with SCJP/ OCJP Notes Collections
31
– , ,
Core Java with SCJP/ OCJP Notes Collections
t.add(new StringBuffer("Z"));
t.add(new StringBuffer("K"));
t.add(new StringBuffer("L"));
System.out.println(t);// [A, K, L, Z]
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
String s1=obj1.toString();
String s2=obj2.toString();
return s1.compareTo(s2);
}
}
Note: Whenever we are defining our own customized sorting by Comparator then
the objects need not be Comparable.
Example: StringBuffer
Requirement: Write a program to insert String and StringBuffer objects into the
TreeSet where the sorting order is increasing length order. If 2 objects having the
same length then consider they alphabetical order.
Program:
import java.util.*;
class TreeSetDemo
{
public static void main(String[] args)
{
TreeSet t=new TreeSet(new
MyComparator()); t.add("A");
t.add(new StringBuffer("ABC"));
t.add(new StringBuffer("AA"));
t.add("xx");
t.add("ABCD");
t.add("A");
System.out.println(t);//[A, AA, xx, ABC, ABCD]
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
String s1=obj1.toString();
String s2=obj2.toString();
int l1=s1.length();
int l2=s2.length();
if(l1 < l2)
return -1;
else if(l1 > l2)
32
– , ,
Core Java with SCJP/ OCJP Notes Collections
return 1;
else
return s1.compareTo(s2);
}
}
Note: If we are depending on default natural sorting order then the objects should
be "homogeneous and comparable" otherwise we will get ClassCastException. If we
are defining our own sorting by Comparator then objects "need not be
homogeneous and comparable".
Comparable vs Comparator:
Example:
import java.util.*;
class Employee implements Comparable
{
String name;
int eid;
Employee(String name,int eid)
{
this.name=name;
this.eid=eid;
}
public String toString()
{
return name+"----"+eid;
}
public int compareTo(Object o)
{
int eid1=this.eid;
int eid2=((Employee)o).eid;
if(eid1 < eid2)
{
return -1;
33
– , ,
Core Java with SCJP/ OCJP Notes Collections
}
else if(eid1 > eid2)
{
return 1;
}
else return 0;
}
}
class CompComp
{
public static void main(String[] args)
{
Employee e1=new Employee("nag",100);
Employee e2=new Employee("balaiah",200);
Employee e3=new Employee("chiru",50);
Employee e4=new Employee("venki",150);
Employee e5=new Employee("nag",100);
TreeSet t1=new TreeSet();
t1.add(e1);
t1.add(e2);
t1.add(e3);
t1.add(e4);
t1.add(e5); System.out.println(t1);//[chiru--
--50, nag----
100, venki----150, balaiah----200]
TreeSet t2=new TreeSet(new
MyComparator()); t2.add(e1);
t2.add(e2);
t2.add(e3);
t2.add(e4);
t2.add(e5); System.out.println(t2);//[balaiah--
--200, chiru--
--50, nag----100, venki----150]
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
Employee e1=(Employee)obj1;
Employee e2=(Employee)obj2;
String s1=e1.name;
String s2=e2.name;
return s1.compareTo(s2);
}
}
34
– , ,
Core Java with SCJP/ OCJP Notes Collections
Comparable Comparator
3) Contains 2 methods.
3) Contains only one method.
Compare() method.
compareTo() method.
Equals() method.
4) String class and all wrapper Classes 4) The only implemented classes of Comparator are
implements Comparable interface. Collator and RuleBasedCollator. (used in GUI)
Not
2) Insertion order. preserved. Preserved. Not preserved (by default).
3) Duplicate Not
Not allowed. Not allowed.
objects. allowed.
Not
4) Sorting order. applicable. Not applicable. Applicable.
5) Heterogeneous
Allowed. Allowed. Not allowed.
objects.
35
– , ,
Core Java with SCJP/ OCJP Notes Collections
Map:
Diagram:
Diagram:
36
– , ,
Core Java with SCJP/ OCJP Notes Collections
Map interface is not child interface of Collection and hence we can't apply
Collection interface methods here.
Map interface defines the following specific methods.
Entry interface:
Each key-value pair is called one entry. Hence Map is considered as a group of entry
Objects, without existing Map object there is no chance of existing entry object
hence interface entry is define inside Map interface(inner interface).
Example:
interface Map
37
– , ,
Core Java with SCJP/ OCJP Notes Collections
{
.................;
.................;
.................;
interface Entry
{
Object getKey();
Object getValue(); on Entry we can
apply these 3 methods.
Object setValue(Object new);
}
}
HashMap:
HashMap Hashtable
4) Null is allowed for both key and 4) Null is not allowed for both key and value
value. otherwise we will get NullPointerException.
By default HashMap object is not synchronized. But we can get synchronized version
by using the following method of Collections class.
public static Map synchronizedMap(Map m1)
38
– , ,
Core Java with SCJP/ OCJP Notes Collections
Constructors:
Example:
import java.util.*;
class HashMapDemo
{
public static void main(String[] args)
{
HashMap m=new HashMap();
m.put("chiranjeevi",700);
m.put("balaiah",800);
m.put("venkatesh",200);
m.put("nagarjuna",500);
System.out.println(m);//{nagarjuna=500,venkatesh=200,bal
aiah=800,chiranjeevi=700}
System.out.println(m.put("chiranjeevi",100));//700
Set s=m.keySet();
System.out.println(s);//[nagarjuna,venkatesh,balaiah,chi
ranjeevi]
Collection c=m.values();
System.out.println(c);//[500, 200, 800,
100] Set s1=m.entrySet();
System.out.println(s1);//[nagarjuna=500,venkatesh=200,ba
laiah=800,chiranjeevi=100]
Iterator itr=s1.iterator();
while(itr.hasNext())
{
Map.Entry m1=(Map.Entry)itr.next();
System.out.println(m1.getKey()+"......"+m1.getValue());
//nagarjuna...... 500
//venkatesh...... 200 //
//balaiah......800
//chiranjeevi......100
if(m1.getKey().equals("nagarjuna"))
{
m1.setValue(1000);
}
39
– , ,
Core Java with SCJP/ OCJP Notes Collections
}
System.out.println(m);
//{nagarjuna=1000,venkatesh=200,balaiah=800,chiranjeevi=100}
}
}
LinkedHashMap:
HashMap LinkedHashMap
Note: in the above program if we are replacing HashMap with LinkedHashMap then
the output is {chiranjeevi=100, balaiah......800, venkatesh......200, nagarjuna......1000}
that is insertion order is preserved.
Note: in general we can use LinkedHashSet and LinkedHashMap for implementing
cache applications.
IdentityHashMap:
Example:
import java.util.*;
class HashMapDemo
{
public static void main(String[] args)
{
HashMap m=new HashMap();
Integer i1=new Integer(10);
40
– , ,
Core Java with SCJP/ OCJP Notes Collections
WeakHashMap:
In the case of normal HashMap, an object is not eligible for GC even though
it doesn't have any references if it is associated with HashMap. That is
HashMap dominates garbage collector.
But in the case of WeakHashMap if an object does not have any references
then it's always eligible for GC even though it is associated with WeakHashMap
that is garbage collector dominates WeakHashMap.
Example:
import java.util.*;
class WeakHashMapDemo
{
public static void main(String[] args)throws Exception
{
WeakHashMap m=new WeakHashMap();
Temp t=new Temp(); m.put(t,"ashok");
System.out.println(m);//{Temp=ashok}
t=null;
System.gc();
Thread.sleep(5000);
System.out.println(m);//{}
}
}
class Temp
{
41
– , ,
Core Java with SCJP/ OCJP Notes Collections
{Temp=ashok}
{Temp=ashok}
Core Java with SCJP/ OCJP Notes Collections
SortedMap:
TreeMap:
Constructors:
Example 1:
import java.util.*;
class TreeMapDemo
{
43
– , ,
Core Java with SCJP/ OCJP Notes Collections
Constructors:
44
– , ,
Core Java with SCJP/ OCJP Notes Collections
Example:
import java.util.*;
class HashtableDemo
{
public static void main(String[] args)
{
Hashtable h=new Hashtable();
h.put(new Temp(5),"A");
h.put(new Temp(2),"B");
h.put(new Temp(6),"C");
h.put(new Temp(15),"D");
h.put(new Temp(23),"E");
h.put(new Temp(16),"F");
System.out.println(h);//{6=C, 16=F, 5=A, 15=D,
2=B, 23=E}
}
}
class Temp
{
int i;
Temp(int i)
{
this.i=i;
}
public int hashCode()
{
return i;
}
public String toString()
{
return i+"";
}
}
45
– , ,
Core Java with SCJP/ OCJP Notes Collections
Diagram:
Diagram:
46
– , ,
Core Java with SCJP/ OCJP Notes Collections
47
– , ,
Core Java with SCJP/ OCJP Notes Collections
Diagram:
Core Java with SCJP/ OCJP Notes Collections
Properties:
Constructor:
Methods:
49
– , ,
Core Java with SCJP/ OCJP Notes Collections
Diagram:
Example:
import java.util.*;
import java.io.*;
class PropertiesDemo
{
public static void main(String[] args)throws Exception
{
Properties p=new Properties();
FileInputStream fis=new
FileInputStream("abc.properties");
p.load(fis);
System.out.println(p);//{user=scott,
password=tiger, venki=8888}
String s=p.getProperty("venki");
System.out.println(s);//8888
p.setProperty("nag","9999999");
Enumeration e=p.propertyNames();
while(e.hasMoreElements())
{
String s1=(String)e.nextElement();
System.out.println(s1);//nag
//user
//password
//venki
}
FileOutputStream fos=new
FileOutputStream("abc.properties");
p.store(fos,"updated by ashok for scjp demo
class");
50
– , ,
Core Java with SCJP/ OCJP Notes Collections
}
}
Property file:
Example:
import java.util.*;
import java.io.*;
class PropertiesDemo
{
public static void main(String[] args)throws Exception
{
Properties p=new Properties();
FileInputStream fis=new
FileInputStream("db.properties");
p.load(fis);
String url=p.getProperty("url");
String user=p.getProperty("user");
String pwd=p.getProperty("pwd");
Connection con=DriverManager.getConnection(url,
user, pwd);
-------------------------------------------------
--------
-------------------------------------------------
-------
FileOutputStream fos=new
FileOutputStream("db.properties");
p.store(fos,"updated by ashok for scjp demo
class");
}
}
51
– , ,
Core Java with SCJP/ OCJP Notes Collections
1.5 enhancements
Queue interface
Diagram:
Assume we have to send sms for one lakh mobile numbers , before sending messages
we have to store all mobile numbers into Queue so that for the first inserted number
first message will be triggered(FIFO).
52
– , ,
Core Java with SCJP/ OCJP Notes Collections
4. Object peek();
To return head element of the Queue without removal, if Queue is empty
this method returns null.
5. Object element();
It returns head element of the Queue and if Queue is empty then it will
raise Runtime Exception saying NoSuchElementException.
PriorityQueue:
Constructors:
Example 1:
import java.util.*;
class PriorityQueueDemo
{
public static void main(String[] args)
{
PriorityQueue q=new PriorityQueue();
//System.out.println(q.peek());//null
//System.out.println(q.element());//NoSuchElementExcepti
on
for(int i=0;i<=10;i++)
{
q.offer(i);
}
53
– , ,
Core Java with SCJP/ OCJP Notes Collections
System.out.println(q);//[0, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10]
System.out.println(q.poll());//0
System.out.println(q);//[1, 3, 2, 7, 4, 5, 6, 10,
8, 9]
}
}
Note: Some platforms may not provide proper supports for PriorityQueue [windowsXP].
Example 2:
import java.util.*;
class PriorityQueueDemo
{
public static void main(String[] args)
{
PriorityQueue q=new
PriorityQueue(15,new MyComparator());
q.offer("A");
q.offer("Z");
q.offer("L");
q.offer("B");
System.out.println(q);//[Z, B, L, A]
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
String s1=(String)obj1;
String s2=obj2.toString();
return s2.compareTo(s1);
}
}
1.6v Enhancements :
NavigableSet:
54
– , ,
Core Java with SCJP/ OCJP Notes Collections
Diagram:
1. ceiling(e);
It returns the lowest element which is >=e.
2. higher(e);
It returns the lowest element which is >e.
3. floor(e);
It returns highest element which is <=e.
4. lower(e);
It returns height element which is <e.
5. pollFirst ();
Remove and return 1st element.
6. pollLast ();
Remove and return last element.
7. descendingSet ();
Returns SortedSet in reverse order.
55
– , ,
Core Java with SCJP/ OCJP Notes Collections
Diagram:
Example:
import java.util.*;
class NavigableSetDemo
{
public static void main(String[] args)
{
TreeSet<Integer> t=new
TreeSet<Integer>(); t.add(1000);
t.add(2000);
t.add(3000);
t.add(4000);
t.add(5000);
System.out.println(t);//[1000, 2000, 3000, 4000,
5000]
System.out.println(t.ceiling(2000));//2000
System.out.println(t.higher(2000));//3000
System.out.println(t.floor(3000));//3000
System.out.println(t.lower(3000));//2000
System.out.println(t.pollFirst());//1000
System.out.println(t.pollLast());//5000
System.out.println(t.descendingSet());//[4000,
3000, 2000]
System.out.println(t);//[2000, 3000, 4000]
}
}
56
– , ,
Core Java with SCJP/ OCJP Notes Collections
NavigableMap:
1. ceilingKey(e);
2. higherKey(e);
3. floorKey(e);
4. lowerKey(e);
5. pollFirstEntry();
6. pollLastEntry();
7. descendingMap();
Example:
import java.util.*;
class NavigableMapDemo
{
public static void main(String[] args)
{
TreeMap<String,String>
t=new TreeMap<String,String>();
t.put("b","banana");
t.put("c","cat");
t.put("a","apple");
t.put("d","dog");
57
– , ,
Core Java with SCJP/ OCJP Notes Collections
t.put("g","gun");
System.out.println(t);//{a=apple, b=banana,
c=cat, d=dog, g=gun} System.out.println(t.ceilingKey("c"));//c
System.out.println(t.higherKey("e"));//g
System.out.println(t.floorKey("e"));//d
System.out.println(t.lowerKey("e"));//d
System.out.println(t.pollFirstEntry());//a=apple
System.out.println(t.pollLastEntry());//g=gun
System.out.println(t.descendingMap());//{d=dog,
c=cat, b=banana}
System.out.println(t);//{b=banana, c=cat, d=dog}
}
}
Diagram:
Collections class:
Collections class defines the following methods to perform sorting the elements of a List.
To sort the elements of List according to default natural sorting order in this
case the elements should be homogeneous and comparable otherwise we will
get ClassCastException.
The List should not contain null otherwise we will get NullPointerException.
58
– , ,
Core Java with SCJP/ OCJP Notes Collections
59
– , ,
Core Java with SCJP/ OCJP Notes Collections
String s2=obj2.toString();
return s2.compareTo(s1);
}
}
If the List is sorted according to default natural sorting order then we have to
use this method.
If the List is sorted according to Comparator then we have to use this method.
System.out.println(Collections.binarySearch(l,"J"));//-2
}
}
Diagram:
60
– , ,
Core Java with SCJP/ OCJP Notes Collections
Program 2:
import java.util.*;
class CollectionsSearchDemo
{
public static void main(String[] args)
{
ArrayList l=new
ArrayList(); l.add(15);
l.add(0);
l.add(20);
l.add(10);
l.add(5);
System.out.println(l);//[15, 0, 20, 10, 5]
Collections.sort(l,new MyComparator());
System.out.println(l);//[20, 15, 10, 5, 0]
System.out.println(Collections.binarySearch(l,10,new
MyComparator()));//2
System.out.println(Collections.binarySearch(l,13,new
MyComparator()));//-3
System.out.println(Collections.binarySearch(l,17));//-6
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
Integer i1=(Integer)obj1;
Integer i2=(Integer)obj2;
return i2.compareTo(i1);
}
}
Diagram:
61
– , ,
Core Java with SCJP/ OCJP Notes Collections
Conclusions:
Note:
For the list of n elements with respect to binary Search() method.
Example:
62
– , ,
Core Java with SCJP/ OCJP Notes Collections
public static void sort(primitive[] p);//any primitive data type we can give
To sort the elements of primitive array according to default natural sorting order.
public static void sort(object[] o);
To sort the elements of object[] array according to default natural sorting
order. In this case objects should be homogeneous and Comparable.
public static void sort(object[] o,Comparator c);
To sort the elements of object[] array according to customized sorting order.
Note: We can sort object[] array either by default natural sorting order (or) customized
sorting order but we can sort primitive arrays only by default natural sorting order.
63
– , ,
Core Java with SCJP/ OCJP Notes Collections
{
int[] a={10,5,20,11,6};
System.out.println("primitive array before
sorting");
for(int a1:a)
{
System.out.println(a1);
}
Arrays.sort(a);
System.out.println("primitive array after
sorting");
for(int a1: a)
{
System.out.println(a1);
}
String[] s={"A","Z","B"};
System.out.println("Object array before
sorting");
for(String s1: s)
{
System.out.println(s1);
}
Arrays.sort(s);
System.out.println("Object array after
sorting"); for(String s1:s)
{
System.out.println(s1);
}
Arrays.sort(s,new MyComparator());
System.out.println("Object array after sorting by
Comparator:");
for(String s1: s)
{
System.out.println(s1);
}
}
}
class MyComparator implements Comparator
{
public int compare(Object obj1,Object obj2)
{
String s1=obj1.toString();
String s2=obj2.toString();
return s2.compareTo(s1);
}
}
64
– , ,
Core Java with SCJP/ OCJP Notes Collections
All rules of Arrays class binarySearch() method are exactly same as Collections
class binarySearch() method.
System.out.println(Arrays.binarySearch(s,"S"));//-3
Arrays.sort(s,new MyComparator());
System.out.println(Arrays.binarySearch(s,"Z",new
MyComparator()));//0
System.out.println(Arrays.binarySearch(s,"S",new
MyComparator()));//-2
System.out.println(Arrays.binarySearch(s,"N"));//-
4(unpredictable result)
}
}
Converting array to List:
Arrays class defines the following method to view array as
List. public static List asList (Object[] o);
65
– , ,
Core Java with SCJP/ OCJP Notes Collections
By using List reference if we are trying to perform any operation which varies the
size then we will get runtime exception saying UnsupportedOperationException.
By using List reference if we are trying to insert heterogeneous objects we will
get runtime exception saying ArrayStoreException.
}
}
Diagram:
66
– , ,