1. Difference between Comparable and Comparator?
2. What are the differences between Interface and Abstract class?
3. What are the differences between a HashMap and a HashTable?
4. what are the differences between String, StringBuilder and StringBuffer?
Difference between Comparable and Comparator
| Comparable | Comparator |
|---|---|
| Comparable present in the java.lang package | Comparator present in Java.util package |
| The Comparable interface provides only one method compareTo() | Comparator interface provides two methods compare() and equals(). |
| Comparable interface used for the default sorting order | Comparator interface used for the customized sorting order. |
| All wrapper classes and String classes implemented Comparable interface | The only implemented classes of Comparator are Collator and RuleBasedCollector. |
| Interface | Abstract class |
|---|---|
| If we don't know about the implementation in advance and just have requirement specifications then we should use the interface | We should use the Abstract class if we have partial knowledge about the implementation. |
| Inside the interface, every method is always public and abstract whether we declare it or not. | The method inside the Abstract class need not be public and Abstract. we can take concrete methods also in Abstract class. |
| We can't declare methods with private and protected modifiers(till java 1.7v) from java 1.8 we can declare methods with public, private, static and default modifiers as well. | There are no restrictions on abstract class method modifiers. |
| Every variable inside the interface is always public, static and final whether we declare it or not. | Every variable present inside the Abstract class need not be public. |
| Inside the interface, we can't declare constructors. | Inside the Abstract class, we can declare a constructor. |
| Interface is slower than Abstract class. | Abstract is faster than Interface. |
| Interface keyword used to declare an interface. Also, the interface can be implemented by using the keyword “implements”. | Abstract keyword used to declare the abstract class. Also, the abstract class can be extended using the keyword “extends”. |
What are the differences between a HashMap and a HashTable?
| HashMap | HashTable |
|---|---|
| It is not synchronized. | It is synchronized. |
| It is not thread-safe because multiple threads can operate HashMap objects simultaneously. | It is thread-safe because only one thread is allowed to operate the HashTable object at a time. |
| A HashMap allows only one null key and any number of null values. | A HashTable does not allow null keys and null values. |
| It is fast compared to HashTable. | It could be faster compared to HashMap. |
| It is non-legacy, introduced in the 1.2 version. | It is a legacy, introduced in the 1.0 version. |
What are the differences between String, StringBuilder and StringBuffer?
| String | StringBuilder | StringBuffer |
|---|---|---|
| A string is Immutable. | StringBuilder is Mutable. | StringBuffer is Mutable. |
| A string is thread-safe. | StringBuilder is not thread-safe. | StringBuffer is thread-safe. |
| Performance is high. | StringBuilder performance is faster when compared to StringBuffer. | StringBuffer performance is slower when compared to StringBuilder. |
| When you need an immutable sequence of characters (e.g., storing constants, literals, or text that won’t change) use String. | When constructing a string piece by piece and thread safety is not a concern (e.g., building dynamic strings) use StringBuilder. | When you need thread safety (e.g., in multi-threaded applications) use StringBuffer. |