What
we can not do in jdbc but can do hibernate?
There are many thing we can do in hinernate automaticaly by
hibernate tools or seting hibernate properties.some I
giving below:
(1) We can migrate database just change database dielect.
(2)we can used caching
(3)if user do not know ant any SQL languge then they can
use criteria query.
(4)There is one scnerio where SQL query are failed when
want fetch obejct from db but do not know there ID.
Hibernate provide this solution using HSQL.
There are many thing we can do in hinernate automaticaly by
hibernate tools or seting hibernate properties.some I
giving below:
(1) We can migrate database just change database dielect.
(2)we can used caching
(3)if user do not know ant any SQL languge then they can
use criteria query.
(4)There is one scnerio where SQL query are failed when
want fetch obejct from db but do not know there ID.
Hibernate provide this solution using HSQL.
Java is fully object oriented
languages or not? Why?
No,java is not fully object oriented language because it does not support "multiple inheritence" and "pointers" which are used in C++.But,by using Interfaces we can implement multiple inheritence.Also,due to presence of Primitive datatypes,which are used in (AutoBoxing)...we can say it is not fully object oriented language.
No,java is not fully object oriented language because it does not support "multiple inheritence" and "pointers" which are used in C++.But,by using Interfaces we can implement multiple inheritence.Also,due to presence of Primitive datatypes,which are used in (AutoBoxing)...we can say it is not fully object oriented language.
If i learn Java,
what kind of applications can i create that will help Banking, Retail, Hotel,
Logistics industry?
When learned the java with the advanced concepts ,the
application can be created for all the domain.Using the
J2EE will be more friendly and efficiency in the code
maintenance, since part of the code will be from the
framework
When learned the java with the advanced concepts ,the
application can be created for all the domain.Using the
J2EE will be more friendly and efficiency in the code
maintenance, since part of the code will be from the
framework
What is difference
between object state and behavior?
If you change the state of an object, you ask it to perform
a behavior. An object stores its states in a field e.g.
variables, and demonstrates its behavior through methods.
If you change the state of an object, you ask it to perform
a behavior. An object stores its states in a field e.g.
variables, and demonstrates its behavior through methods.
Can we have more
than one action servlet?
yes you can have and if you specify different url patter
like
*.do for one action servlet
*.abc for other action servlet
in your web.xml file
yes you can have and if you specify different url patter
like
*.do for one action servlet
*.abc for other action servlet
in your web.xml file
Why use a datasource
when you can directly specify a connection details? (in a J2EE application)?
Because, it would be really difficult to specify the connection details in every method that access the database. Instead, if we create a data source, it can be used to connect to the database in every method we want.
Because, it would be really difficult to specify the connection details in every method that access the database. Instead, if we create a data source, it can be used to connect to the database in every method we want.
If I define a method
in JSP scriplet <%..%>, where will it go after translation into a
servlet?
It will give compilation error. In order to define a method
in JSP, it should be defined in the JSP declarations <%!..%
>, and it can be called in the JSP expression.
On translation, the method will be added outside all
methods in the servlet class.
It will give compilation error. In order to define a method
in JSP, it should be defined in the JSP declarations <%!..%
>, and it can be called in the JSP expression.
On translation, the method will be added outside all
methods in the servlet class.
How will the struts
know which action class to call when you submit a form?
struts-config.xml in this file.
under the tag <type> absolute path of Action class
under the tag <name> name of the action form class
Both of this will be called when the desired action
mentioned under the <path> tag will be called and
struts-config.xml will call action class mentioned in the
<type> tag and also populate the fields of form class
mentioned under <name> tag.
struts-config.xml in this file.
under the tag <type> absolute path of Action class
under the tag <name> name of the action form class
Both of this will be called when the desired action
mentioned under the <path> tag will be called and
struts-config.xml will call action class mentioned in the
<type> tag and also populate the fields of form class
mentioned under <name> tag.
Will it be called
overriding if I do not change the parameters or return type, instead throw a
different exception in the method signature?
yes, you will be overriding to throw a different exception
yes, you will be overriding to throw a different exception
Does Java pass arguments by value or
reference?
Pass by value.
1. When passing primitives, it passes a copy of the
variable to the method. Any change made in the method does
not reflect in the calling method.
2. When dealing with objects, a copy of their
reference/address is passed. Thus the change made to the
object is reflected in the calling method.
Pass by value.
1. When passing primitives, it passes a copy of the
variable to the method. Any change made in the method does
not reflect in the calling method.
2. When dealing with objects, a copy of their
reference/address is passed. Thus the change made to the
object is reflected in the calling method.
Different between
Struts and Spring? or Why use Spring, if you are already using Struts?
Struts:
1.Struts is only for web Applications.We can not develop any
type of Java,J2EE applications by using Struts Framework.
2.We can not Integrate other Frameworks with Any other Java
Oriented Frameworks.
Spring:
1.Spring is for developing any kind of Java,J2EE applications.
2.It is Layered architecture.We can integrate any no of
Frameworks with Spring.
3.It has So many features like AOP,IOC.
Struts:
1.Struts is only for web Applications.We can not develop any
type of Java,J2EE applications by using Struts Framework.
2.We can not Integrate other Frameworks with Any other Java
Oriented Frameworks.
Spring:
1.Spring is for developing any kind of Java,J2EE applications.
2.It is Layered architecture.We can integrate any no of
Frameworks with Spring.
3.It has So many features like AOP,IOC.
Explain what is
synchronization?
When multiple threads working,Synchronization is to lock a method for a particular object.
When multiple threads working,Synchronization is to lock a method for a particular object.
Write a program to
show synchronization?
public someClass{
public synchronised methodA(){
//write your code
}
}
public someClass{
public synchronised methodA(){
//write your code
}
}
Explain what is orm?
Object Relational Mapping ,its a tool for transaction management that needs to be integrated with Spring,Struts etc.Eg : Hibernate,iBatis,JDO etc
Object Relational Mapping ,its a tool for transaction management that needs to be integrated with Spring,Struts etc.Eg : Hibernate,iBatis,JDO etc
Write a singleton
program?
Having single instance through out the application.eg.: Loggers
Having single instance through out the application.eg.: Loggers
What is IOC concept
& explain it?
Injecting dependencies to object itself instead of depending on container.
Injecting dependencies to object itself instead of depending on container.
Explain spring
framework?
Spring is lightweight,Inversion controlled,Aspect oriented ,Container framework.
Spring is lightweight,Inversion controlled,Aspect oriented ,Container framework.
What are the oops
concept?
Inhertitance, Encapsulation, Polymorphism, Data Abstraction
Inhertitance, Encapsulation, Polymorphism, Data Abstraction
What are the diff
types of exception?
Unchecked and Checked exceptions
Unchecked and Checked exceptions
What is AOP(assepct
oriented programing)?
Separating your business logic with other functionalit
y such as services,Loggers etc,Making classess more cohesive.
Separating your business logic with other functionalit
y such as services,Loggers etc,Making classess more cohesive.
What is jsp life
cycle?
jspinit(),_jspService(),jspdestroy()
jspinit(),_jspService(),jspdestroy()
Explain servlet life
cycle?
init(),service(),destroy()
init(),service(),destroy()
What is prototype?
Having multiple instances or having clones
Having multiple instances or having clones
In spring bean class uses singleton
or prototype?
By Default spring uses singleton or mention singleton="true" for singleton else false for prototype inside bean tag.
By Default spring uses singleton or mention singleton="true" for singleton else false for prototype inside bean tag.
1. What is garbage collection? What is the process that is responsible for doing that in java? - Reclaiming the unused memory by the invalid objects. Garbage collector is responsible for this process
2.
What kind of thread is
the Garbage collector thread? - It is a daemon
thread.
3.
What is a daemon thread? - These are the threads which can run without user intervention.
The JVM can exit when there are daemon thread by killing them abruptly.
4.
How will you invoke any
external process in Java? -
Runtime.getRuntime().exec(….)
5.
What is the finalize
method do? - Before the invalid
objects get garbage collected, the JVM give the user a chance to clean up some
resources before it got garbage collected.
6.
What is mutable object
and immutable object? - If a object value is
changeable then we can call it as Mutable object. (Ex., StringBuffer, …) If you
are not allowed to change the value of an object, it is immutable object. (Ex.,
String, Integer, Float, …)
7.
What is the basic
difference between string and stringbuffer object? - String is an immutable object. StringBuffer is a mutable
object.
8.
What is the purpose of
Void class? - The Void class is an
uninstantiable placeholder class to hold a reference to the Class object representing
the primitive Java type void.
9.
What is reflection? - Reflection allows programmatic access to information about the
fields, methods and constructors of loaded classes, and the use reflected
fields, methods, and constructors to operate on their underlying counterparts
on objects, within security restrictions.
10.
What is the base class
for Error and Exception? - Throwable
11.
What is the byte range? -128 to 127
12.
What is the
implementation of destroy method in java.. is it native or java code? - This method is not implemented.
13.
What is a package? - To group set of classes into a single unit is known as
packaging. Packages provides wide namespace ability.
14.
What are the approaches
that you will follow for making a program very efficient? - By avoiding too much of static methods avoiding the excessive
and unnecessary use of synchronized methods Selection of related classes based
on the application (meaning synchronized classes for multiuser and
non-synchronized classes for single user) Usage of appropriate design patterns
Using cache methodologies for remote invocations Avoiding creation of variables
within a loop and lot more.
15.
What is a
DatabaseMetaData? - Comprehensive
information about the database as a whole.
16.
What is Locale? - A Locale object represents a specific geographical, political,
or cultural region
17.
How will you load a
specific locale? - Using
ResourceBundle.getBundle(…);
18.
What is JIT and its use? - Really, just a very fast compiler… In this incarnation, pretty
much a one-pass compiler — no offline computations. So you can’t look at the
whole method, rank the expressions according to which ones are re-used the
most, and then generate code. In theory terms, it’s an on-line problem.
19.
Is JVM a compiler or an
interpreter? - Interpreter
20.
When you think about
optimization, what is the best way to findout the time/memory consuming
process? - Using profiler
21.
What is the purpose of
assert keyword used in JDK1.4.x? - In order to validate
certain expressions. It effectively replaces the if block and automatically
throws the AssertionError on failure. This keyword should be used for the
critical arguments. Meaning, without that the method does nothing.
22.
How will you get the
platform dependent values like line separator, path separator, etc., ? - Using Sytem.getProperty(…) (line.separator, path.separator, …)
23.
What is skeleton and
stub? what is the purpose of those? - Stub is a client side
representation of the server, which takes care of communicating with the remote
server. Skeleton is the server side representation. But that is no more in use…
it is deprecated long before in JDK.
24.
What is the final
keyword denotes? - final keyword denotes
that it is the final implementation for that method or variable or class. You
can’t override that method/variable/class any more.
25.
What is the significance
of ListIterator? - You can iterate back
and forth.
26.
What is the major
difference between LinkedList and ArrayList?
- LinkedList are meant for sequential accessing. ArrayList are meant for random
accessing.
27.
What is nested class? - If all the methods of a inner class is static then it is a
nested class.
28.
What is inner class? - If the methods of the inner class can only be accessed via the
instance of the inner class, then it is called inner class.
29.
What is composition? - Holding the reference of the other class within some other
class is known as composition.
30.
What is aggregation? - It is a special type of composition. If you expose all the
methods of a composite class and route the method call to the composite method
through its reference, then it is called aggregation.
31.
What are the methods in
Object? - clone, equals, wait,
finalize, getClass, hashCode, notify, notifyAll, toString
32.
Can you instantiate the
Math class? - You can’t instantiate
the math class. All the methods in this class are static. And the constructor
is not public.
33.
What is singleton? - It is one of the design pattern. This falls in the creational
pattern of the design pattern. There will be only one instance for that entire
JVM. You can achieve this by having the private constructor in the class. For
eg., public class Singleton { private static final Singleton s = new
Singleton(); private Singleton() { } public static Singleton getInstance() {
return s; } // all non static methods … }
34.
What is DriverManager? - The basic service to manage set of JDBC drivers.
35.
What is Class.forName()
does and how it is useful? - It loads the class
into the ClassLoader. It returns the Class. Using that you can get the instance
( “class-instance”.newInstance() ).
Java Collections framework API is
a unified architecture for representing and manipulating collections. The API
contains Interfaces, Implementations & Algorithm to help java programmer in
everyday programming. In nutshell, this API does 6 things at high level
- Reduces
programming efforts. - Increases program speed and quality.
- Allows
interoperability among unrelated APIs.
- Reduces
effort to learn and to use new APIs.
- Reduces
effort to design new APIs.
- Encourages
& Fosters software reuse.
To be specific, There are six
collection java interfaces. The most basic interface is Collection. Three
interfaces extend Collection: Set, List, and SortedSet. The other two
collection interfaces, Map and SortedMap, do not extend Collection, as they
represent mappings rather than true collections.
Some of the collection classes
provide traversal of their contents via a java.util.Iterator interface. This
interface allows you to walk through a collection of objects, operating on each
object in turn. Remember when using Iterators that they contain a snapshot of
the collection at the time the Iterator was obtained; generally it is not
advisable to modify the collection itself while traversing an Iterator.
Iterator : Enables you to
traverse through a collection in the forward direction only, for obtaining or
removing elements ListIterator : extends Iterator, and allows bidirectional
traversal of list and also allows the modification of elements.
Map is Interface which is part of
Java collections framework. This is to store Key Value pair, and Hashmap is
class that implements that using hashing technique.
Both Hashtable & HashMap
provide key-value access to data. The Hashtable is one of the original
collection classes in Java (also called as legacy classes). HashMap is part of
the new Collections Framework, added with Java 2, v1.2. There are several
differences between HashMap and Hashtable in Java as listed below
- The
HashMap class is roughly equivalent to Hashtable, except that it is
unsynchronized and permits nulls. (HashMap allows null values as key and
value whereas Hashtable doesn’t allow nulls).
- HashMap
does not guarantee that the order of the map will remain constant over
time. But one of HashMap's subclasses is LinkedHashMap, so in the event
that you'd want predictable iteration order (which is insertion order by
default), you can easily swap out the HashMap for a LinkedHashMap. This
wouldn't be as easy if you were using Hashtable.
- HashMap
is non synchronized whereas Hashtable is synchronized.
- Iterator
in the HashMap is fail-fast while the enumerator for the Hashtable isn't.
So this could be a design consideration.
Synchronized means only one
thread can modify a hash table at one point of time. Any thread before
performing an update on a hashtable will have to acquire a lock on the object
while others will wait for lock to be released.
At high level - Fail-fast is a
property of a system or software with respect to its response to failures. A
fail-fast system is designed to immediately report any failure or condition
that is likely to lead to failure. Fail-fast systems are usually designed to
stop normal operation rather than attempt to continue a possibly-flawed
process. When a problem occurs, a fail-fast system fails immediately and
visibly. Failing fast is a non-intuitive technique: "failing immediately
and visibly" sounds like it would make your software more fragile, but it
actually makes it more robust. Bugs are easier to find and fix, so fewer go
into production. In Java, Fail-fast term can be related to context of
iterators. If an iterator has been created on a collection object and some
other thread tries to modify the collection object "structurally", a
concurrent modification exception will be thrown. It is possible for other
threads though to invoke "set" method since it doesn't modify the
collection "structurally". However, if prior to calling
"set", the collection has been modified structurally,
"IllegalArgumentException" will be thrown.
From Sun FAQ Page: Many
Collection implementations (including all of the ones provided by the JDK) will
have a public clone method, but it would be mistake to require it of all Collections.
For example, what does it mean to clone a Collection that's backed by a
terabyte SQL database? Should the method call cause the company to requisition
a new disk farm? Similar arguments hold for serializable. If the client doesn't
know the actual type of a Collection, it's much more flexible and less error
prone to have the client decide what type of Collection is desired, create an
empty Collection of this type, and use the addAll method to copy the elements
of the original collection into the new one. Note on Some Important Terms
- Synchronized
means only one thread can modify a hash table at one point of time.
Basically, it means that any thread before performing an update on a
hashtable will have to acquire a lock on the object while others will wait
for lock to be released.
- Fail-fast
is relevant from the context of iterators. If an iterator has been created
on a collection object and some other thread tries to modify the
collection object "structurally”, a concurrent modification exception
will be thrown. It is possible for other threads though to invoke
"set" method since it doesn’t modify the collection
"structurally”. However, if prior to calling "set", the
collection has been modified structurally, "IllegalArgumentException"
will be thrown.
HashMap can be synchronized by Map m = Collections.synchronizedMap(hashMap);
There are multiple aspects to
this decision: 1. The basic difference between a Hashtable and an HashMap is
that, Hashtable is synchronized while HashMap is not. Thus whenever there is a
possibility of multiple threads accessing the same instance, one should use
Hashtable. While if not multiple threads are going to access the same instance
then use HashMap. Non synchronized data structure will give better performance
than the synchronized one. 2. If there is a possibility in future that - there
can be a scenario when you may require to retain the order of objects in the
Collection with key-value pair then HashMap can be a good choice. As one of
HashMap's subclasses is LinkedHashMap, so in the event that you'd want
predictable iteration order (which is insertion order by default), you can
easily swap out the HashMap for a LinkedHashMap. This wouldn't be as easy if
you were using Hashtable. Also if you have multiple thread accessing you
HashMap then Collections.synchronizedMap() method can be leveraged. Overall
HashMap gives you more flexibility in terms of possible future changes.
Vector & ArrayList both
classes are implemented using dynamically resizable arrays, providing fast
random access and fast traversal. ArrayList and Vector class both implement the
List interface. Both the classes are member of Java collection framework,
therefore from an API perspective, these two classes are very similar. However,
there are still some major differences between the two. Below are some key
differences
- Vector
is a legacy class which has been retrofitted to implement the List
interface since Java 2 platform v1.2
- Vector
is synchronized whereas ArrayList is not. Even though Vector class is
synchronized, still when you want programs to run in multithreading
environment using ArrayList with Collections.synchronizedList() is
recommended over Vector.
- ArrayList
has no default size while vector has a default size of 10.
- The
Enumerations returned by Vector's elements method are not fail-fast.
Whereas ArraayList does not have any method returning Enumerations.
Enumeration and Iterator are the
interface available in java.util package. The functionality of Enumeration
interface is duplicated by the Iterator interface. New implementations should
consider using Iterator in preference to Enumeration. Iterators differ from
enumerations in following ways:
- Enumeration
contains 2 methods namely hasMoreElements() & nextElement() whereas Iterator
contains three methods namely hasNext(), next(),remove().
- Iterator
adds an optional remove operation, and has shorter method names. Using
remove() we can delete the objects but Enumeration interface does not
support this feature.
- Enumeration
interface is used by legacy classes. Vector.elements() &
Hashtable.elements() method returns Enumeration. Iterator is returned by
all Java Collections Framework classes. java.util.Collection.iterator()
method returns an instance of Iterator.
- Why
Java Vector class is considered obsolete or unofficially deprecated? or
Why should I always use ArrayList over Vector?
You should use ArrayList over
Vector because you should default to non-synchronized access. Vector
synchronizes each individual method. That's almost never what you want to do.
Generally you want to synchronize a whole sequence of operations. Synchronizing
individual operations is both less safe (if you iterate over a Vector, for
instance, you still need to take out a lock to avoid anyone else changing the
collection at the same time) but also slower (why take out a lock repeatedly
when once will be enough)? Of course, it also has the overhead of locking even
when you don't need to. It's a very flawed approach to have synchronized access
as default. You can always decorate a collection using
Collections.synchronizedList - the fact that Vector combines both the
"resized array" collection implementation with the "synchronize
every operation" bit is another example of poor design; the decoration
approach gives cleaner separation of concerns. Vector also has a few legacy
methods around enumeration and element retrieval which are different than the
List interface, and developers (especially those who learned Java before 1.2)
can tend to use them if they are in the code. Although Enumerations are faster,
they don't check if the collection was modified during iteration, which can
cause issues, and given that Vector might be chosen for its syncronization -
with the attendant access from multiple threads, this makes it a particularly
pernicious problem. Usage of these methods also couples a lot of code to
Vector, such that it won't be easy to replace it with a different List
implementation. Despite all above reasons Sun may never officially deprecate
Vector class. (Read details Deprecate Hashtable and Vector)
An enumeration is an interface
containing methods for accessing the underlying data structure from which the
enumeration is obtained. It is a construct which collection classes return when
you request a collection of all the objects stored in the collection. It allows
sequential access to all the elements stored in the collection.
The functionality of Enumeration
interface is duplicated by the Iterator interface. Iterator has a remove()
method while Enumeration doesn't. Enumeration acts as Read-only interface,
because it has the methods only to traverse and fetch the objects, where as
using Iterator we can manipulate the objects also like adding and removing the
objects. So Enumeration is used when ever we want to make Collection objects as
Read-only.
The basic difference between a
Vector and an ArrayList is that, vector is synchronized while ArrayList is not.
Thus whenever there is a possibility of multiple threads accessing the same
instance, one should use Vector. While if not multiple threads are going to
access the same instance then use ArrayList. Non synchronized data structure
will give better performance than the synchronized one.
The java.lang.Object has two
methods defined in it. They are - public boolean equals(Object obj) public int
hashCode(). These two methods are used heavily when objects are stored in
collections. There is a contract between these two methods which should be kept
in mind while overriding any of these methods. The Java API documentation
describes it in detail. The hashCode() method returns a hash code value for the
object. This method is supported for the benefit of hashtables such as those
provided by java.util.Hashtable or java.util.HashMap. The general contract of
hashCode is: Whenever it is invoked on the same object more than once during an
execution of a Java application, the hashCode method must consistently return
the same integer, provided no information used in equals comparisons on the
object is modified. This integer need not remain consistent from one execution
of an application to another execution of the same application. If two objects
are equal according to the equals(Object) method, then calling the hashCode
method on each of the two objects must produce the same integer result. It is
not required that if two objects are unequal according to the
equals(java.lang.Object) method, then calling the hashCode method on each of
the two objects must produce distinct integer results. However, the programmer
should be aware that producing distinct integer results for unequal objects may
improve the performance of hashtables. As much as is reasonably practical, the
hashCode method defined by class Object does return distinct integers for
distinct objects. The equals(Object obj) method indicates whether some other
object is "equal to" this one. The equals method implements an
equivalence relation on non-null object references: It is reflexive: for any
non-null reference value x, x.equals(x) should return true. It is symmetric:
for any non-null reference values x and y, x.equals(y) should return true if
and only if y.equals(x) returns true. It is transitive: for any non-null
reference values x, y, and z, if x.equals(y) returns true and y.equals(z)
returns true, then x.equals(z) should return true. It is consistent: for any
non-null reference values x and y, multiple invocations of x.equals(y)
consistently return true or consistently return false, provided no information
used in equals comparisons on the objects is modified. For any non-null
reference value x, x.equals(null) should return false. The equals method for
class Object implements the most discriminating possible equivalence relation
on objects; that is, for any non-null reference values x and y, this method
returns true if and only if x and y refer to the same object (x == y has the
value true). Note that it is generally necessary to override the hashCode
method whenever this method is overridden, so as to maintain the general
contract for the hashCode method, which states that equal objects must have
equal hash codes. A practical Example of hashcode() & equals(): This
can be applied to classes that need to be stored in Set collections. Sets use
equals() to enforce non-duplicates, and HashSet uses hashCode() as a first-cut
test for equality. Technically hashCode() isn't necessary then since equals()
will always be used in the end, but providing a meaningful hashCode() will
improve performance for very large sets or objects that take a long time to
compare using equals().
Many developers are concerned
about the performance difference between java.util.Array.sort()
java.util.Collections.sort() methods. Both methods have same algorithm the only
difference is type of input to them. Collections.sort() has a input as List so
it does a translation of List to array and vice versa which is an additional
step while sorting. So this should be used when you are trying to sort a list.
Arrays.sort is for arrays so the sorting is done directly on the array. So
clearly it should be used when you have a array available with you and you want
to sort it.
Java has implementation of
BlockingQueue available since Java 1.5. Blocking Queue interface extends
collection interface, which provides you power of collections inside a queue.
Blocking Queue is a type of Queue that additionally supports operations that
wait for the queue to become non-empty when retrieving an element, and wait for
space to become available in the queue when storing an element. A typical usage
example would be based on a producer-consumer scenario. Note that a
BlockingQueue can safely be used with multiple producers and multiple consumers.
An ArrayBlockingQueue is a implementation of blocking queue with an array used
to store the queued objects. The head of the queue is that element that has
been on the queue the longest time. The tail of the queue is that element that
has been on the queue the shortest time. New elements are inserted at the tail
of the queue, and the queue retrieval operations obtain elements at the head of
the queue. ArrayBlockingQueue requires you to specify the capacity of queue at
the object construction time itself. Once created, the capacity cannot be
increased. This is a classic "bounded buffer" (fixed size buffer), in
which a fixed-sized array holds elements inserted by producers and extracted by
consumers. Attempts to put an element to a full queue will result in the put
operation blocking; attempts to retrieve an element from an empty queue will be
blocked.
Though the Map interface is part
of collections framework, it does not extend collection interface. This is by
design, and the answer to this questions is best described in Sun's FAQ Page:
This was by design. We feel that mappings are not collections and collections
are not mappings. Thus, it makes little sense for Map to extend the Collection
interface (or vice versa). If a Map is a Collection, what are the elements? The
only reasonable answer is "Key-value pairs", but this provides a very
limited (and not particularly useful) Map abstraction. You can't ask what value
a given key maps to, nor can you delete the entry for a given key without
knowing what value it maps to. Collection could be made to extend Map, but this
raises the question: what are the keys? There's no really satisfactory answer,
and forcing one leads to an unnatural interface. Maps can be viewed as
Collections (of keys, values, or pairs), and this fact is reflected in the
three "Collection view operations" on Maps (keySet, entrySet, and
values). While it is, in principle, possible to view a List as a Map mapping
indices to elements, this has the nasty property that deleting an element from
the List changes the Key associated with every element before the deleted
element. That's why we don't have a map view operation on Lists.
a. Vector b. ArrayList c.
LinkedList ArrayList and Vector both use an array to store the elements of the
list. When an element is inserted into the middle of the list the elements that
follow the insertion point must be shifted to make room for the new element.
The LinkedList is implemented using a doubly linked list; an insertion requires
only the updating of the links at the point of insertion. Therefore, the
LinkedList allows for fast insertions and deletions.
java.util.ArrayList and
java.util.LinkedList are two Collections classes used for storing lists of
object references Here are some key differences:
- ArrayList
uses primitive object array for storing objects whereas LinkedList is made
up of a chain of nodes. Each node stores an element and the pointer to the
next node. A singly linked list only has pointers to next. A doubly linked
list has a pointer to the next and the previous element. This makes
walking the list backward easier.
- ArrayList
implements the RandomAccess interface, and LinkedList does not. The commonly
used ArrayList implementation uses primitive Object array for internal
storage. Therefore an ArrayList is much faster than a LinkedList for
random access, that is, when accessing arbitrary list elements using the
get method. Note that the get method is implemented for LinkedLists, but
it requires a sequential scan from the front or back of the list. This
scan is very slow. For a LinkedList, there's no fast way to access the Nth
element of the list.
- Adding
and deleting at the start and middle of the ArrayList is slow, because all
the later elements have to be copied forward or backward. (Using
System.arrayCopy()) Whereas Linked lists are faster for inserts and
deletes anywhere in the list, since all you do is update a few next and
previous pointers of a node.
- Each
element of a linked list (especially a doubly linked list) uses a bit more
memory than its equivalent in array list, due to the need for next and
previous pointers.
- ArrayList
may also have a performance issue when the internal array fills up. The
arrayList has to create a new array and copy all the elements there. The
ArrayList has a growth algorithm of (n*3)/2+1, meaning that each time the
buffer is too small it will create a new one of size (n*3)/2+1 where n is
the number of elements of the current buffer. Hence if we can guess the
number of elements that we are going to have, then it makes sense to
create a arraylist with that capacity during object creation (using
construtor new ArrayList(capacity)). Whereas LinkedLists should not have
such capacity issues.
- Where will you use ArrayList and Where will you use
LinkedList? Or Which one to use when (ArrayList / LinkedList).
Below is a snippet from SUN's
site. The Java SDK contains 2 implementations of the List interface - ArrayList
and LinkedList. If you frequently add elements to the beginning of the List or
iterate over the List to delete elements from its interior, you should consider
using LinkedList. These operations require constant-time in a LinkedList and
linear-time in an ArrayList. But you pay a big price in performance. Positional
access requires linear-time in a LinkedList and constant-time in an ArrayList.
Each java collection
implementation class have different performance for different methods, which
makes them suitable for different programming needs.
·
Performance of
Map interface implementations
Hashtable
An
instance of Hashtable has two parameters that affect its performance: initial
capacity and load factor. The capacity is the number of buckets in the hash
table, and the initial capacity is simply the capacity at the time the hash
table is created. Note that the hash table is open: in the case of a "hash
collision", a single bucket stores multiple entries, which must be
searched sequentially. The load factor is a measure of how full the hash table
is allowed to get before its capacity is automatically increased. The initial
capacity and load factor parameters are merely hints to the implementation. The
exact details as to when and whether the rehash method is invoked are
implementation-dependent.
HashMap
This
implementation provides constant-time [ Big O Notation is O(1) ] performance
for the basic operations (get and put), assuming the hash function disperses
the elements properly among the buckets. Iteration over collection views
requires time proportional to the "capacity" of the HashMap instance
(the number of buckets) plus its size (the number of key-value mappings). Thus,
it's very important not to set the initial capacity too high (or the load
factor too low) if iteration performance is important.
TreeMap
The
TreeMap implementation provides guaranteed log(n) [ Big O Notation is O(log N)
] time cost for the containsKey, get, put and remove operations.
LinkedHashMap
A linked
hash map has two parameters that affect its performance: initial capacity and
load factor. They are defined precisely as for HashMap. Note, however, that the
penalty for choosing an excessively high value for initial capacity is less
severe for this class than for HashMap, as iteration times for this class are
unaffected by capacity.
·
Performance of
Set interface implementations
HashSet
The
HashSet class offers constant-time [ Big O Notation is O(1) ] performance for
the basic operations (add, remove, contains and size), assuming the hash
function disperses the elements properly among the buckets. Iterating over this
set requires time proportional to the sum of the HashSet instance's size (the
number of elements) plus the "capacity" of the backing HashMap
instance (the number of buckets). Thus, it's very important not to set the
initial capacity too high (or the load factor too low) if iteration performance
is important.
TreeSet
The
TreeSet implementation provides guaranteed log(n) time cost for the basic
operations (add, remove and contains).
LinkedHashSet
A linked
hash set has two parameters that affect its performance: initial capacity and
load factor. They are defined precisely as for HashSet. Note, however, that the
penalty for choosing an excessively high value for initial capacity is less
severe for this class than for HashSet, as iteration times for this class are
unaffected by capacity.
·
Performance of
List interface implementations
LinkedList
-
Performance of get and remove methods is linear time [ Big O Notation is O(n) ]
- Performance of add and Iterator.remove methods is constant-time [ Big O
Notation is O(1) ]
ArrayList
- The
size, isEmpty, get, set, iterator, and listIterator operations run in constant
time. [ Big O Notation is O(1) ] - The add operation runs in amortized constant
time [ Big O Notation is O(1) ] , but in worst case (since the array must be
resized and copied) adding n elements requires linear time [ Big O Notation is
O(n) ] - Performance of remove method is linear time [ Big O Notation is O(n) ]
- All of the other operations run in linear time [ Big O Notation is O(n) ].
The constant factor is low compared to that for the LinkedList implementation.
its helpful..
ReplyDeletehere also some question
http://instanceofjavaforus.blogspot.in/