C++ STL vs Java Collections Framework
Java and C++ provide their different functionalities and their use cases. When it comes to Data structures and Algorithms Java has a special framework named Java collection framework and C++ provides a library called STL.So let’s have a look at what are the different functions, complexities, and what are similarities between both of these.
Java Collection Framework
Java collection provides a framework to store and handle the group of objects and contains an interface named an iterable interface which provides the iterator to iterate through all the collections. A collection is an object that represents a group of objects (such as the classic Vector class). A collections framework is a unified architecture for representing and manipulating collection.
STL in C++
The Standard Template Library (STL) is a set of C++ template classes to provide common programming data structures and functions such as lists, stacks, arrays, etc. It is a library of container classes, algorithms, and iterators. It is a generalized library and so, its components are parameterized.
STL has 4 components:
- Algorithms
- Containers
- Functions
- Iterators
C++ provides well-designed STLs, whereas Java has Containers. So have a look at what they both contain.
Similarities and Differences Between Containers in STL and the Collection interface in the java collection framework
Parameters | Containers in STL | Collection interface in java collection framework |
---|---|---|
List | list<data-type> li; | ArrayList<data-type> arr=new ArrayList<data-type>() LinkedList<data-type>LL=new LinkedList<data-type>() |
Vector | vector<data-type> v; | Vector<data-type> v =new Vector<data-type>() |
Stack | stack<data-type> s; | Stack<data-type> s = new Stack<data-type>(); |
Queue | queue<data-type>q; | Queue<data-type> q = new LinkedList<>(); |
Dequeue | deque<data-type> deque; | Deque<data-type>d = new ArrayDeque<data-type>(); |
PriorityQueue | priority_queue<data-type> pq; | PriorityQueue<data-type> pq=new PriorityQueue<data-type>(); |
Set | set<data-type> s; | Set<data-type> set1 = new HashSet<data-type>(); Set<data-type> set2 = new LinkedHashSet<data-type>(); Set<data-type> set3 = new TreeSet<data-type>(); |
Map | map<data-type1,data-type2> mp; | Map<data-type1, data-type2> map= new HashMap<data-type1, data-type2>(); |
C++ Standard Template Library (STL) vs the Java Collections Framework (JCF)
STL | Java Collections Framework (JCF) |
---|---|
We can pass functions as parameters in C++. | Not allowed in Java. |
Interfaces do not exist in C++. | Java depends on interfaces. |
In STL, containers can contain either objects or objects of primitive types and many algorithms operate on either containers or arrays | In Java, containers contain only objects, and algorithms must be defined separately for containers and for arrays. |
The algorithms are independent of the container on which they operate in STL. | The algorithms are organized by the container in java. |
STL includes performance as part of the interface requirements. | This is not normally the case for java collections. |
In STL collections, it can have pointers to objects or the objects themselves. | In Java collections, it can only contain pointers to objects. |
STL uses value semantics so that assignment copies a collection. | Java uses reference semantics and assignment simply assigns a reference |
Iterators in STL have values that can be compared. | In java, iterators do not contain values that can be compared. |
STL has a hierarchy of iterators which different capabilities and provides random access to container elements. | Java does not provide random access iterators. It only provides Iterator and ListIterator. |
The STL framework includes a memory allocation model and STL programmers need to be aware of dealing with memory allocations. | The JCF does not address either of these concerns. |
Those are the major differences between STL and the java collection framework. In terms of using it in competitive programming, one can use any of them as per their convenience as it can make code look less complex and reduce your time to complete a question.
Please Login to comment...