{"id":312,"date":"2014-02-01T23:42:11","date_gmt":"2014-02-01T23:42:11","guid":{"rendered":"http:\/\/www.smr.co.uk\/?p=312"},"modified":"2014-02-01T23:42:11","modified_gmt":"2014-02-01T23:42:11","slug":"java-data-structures","status":"publish","type":"post","link":"http:\/\/www.smr.co.uk\/?p=312","title":{"rendered":"Java Data Structures"},"content":{"rendered":"<p>\t\t\t\tHere are list Java 7 data structures and their thread model and expected performance. (<span style=\"line-height: 1.714285714; font-size: 1rem;\">See\u00a0<\/span><a style=\"line-height: 1.714285714; font-size: 1rem;\" href=\"http:\/\/bigocheatsheet.com\/\">BigO Cheat Sheet<\/a><span style=\"line-height: 1.714285714; font-size: 1rem;\"> for more algorithm speeds):-<\/span><\/p>\n<table width=\"944\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<colgroup>\n<col width=\"137\" \/>\n<col width=\"214\" \/>\n<col width=\"161\" \/>\n<col width=\"40\" \/>\n<col width=\"65\" \/>\n<col width=\"132\" \/>\n<col span=\"3\" width=\"65\" \/> <\/colgroup>\n<tbody>\n<tr>\n<td width=\"137\" height=\"15\"><strong>Name<\/strong><\/td>\n<td width=\"214\"><strong>Overiew<\/strong><\/td>\n<td width=\"161\"><strong>Threading Method<\/strong><\/td>\n<td width=\"40\"><strong>Sorted<\/strong><\/td>\n<td width=\"65\"><strong>Index<\/strong><\/td>\n<td width=\"132\"><strong>Search \/ Contiains or Get<\/strong><\/td>\n<td width=\"65\"><strong>Insert<\/strong><\/td>\n<td width=\"65\"><strong>Delete<\/strong><\/td>\n<td width=\"65\"><strong>Who<\/strong><\/td>\n<\/tr>\n<tr>\n<td height=\"15\"><strong>Maps<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td height=\"15\">HashMap<\/td>\n<td>Hashtable<\/td>\n<td>Not thread safe<\/td>\n<td>No<\/td>\n<td>n\/a<\/td>\n<td>O(1)<\/td>\n<td>O(1)<\/td>\n<td>O(1)<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">ConcurrentHashMap<\/td>\n<td>Segmented hashtable<\/td>\n<td>Non blocking<\/td>\n<td>No<\/td>\n<td>n\/a<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">Hashtable<\/td>\n<td>Old School, don\u2019t use<\/td>\n<td>Intrinsic blocks<\/td>\n<td><\/td>\n<td>n\/a<\/td>\n<td>O(1)<\/td>\n<td>O(1)<\/td>\n<td>O(1)<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">ConcurrentSkipListMap<\/td>\n<td>Tree like skipped list<\/td>\n<td>Lock free CAS<\/td>\n<td>Yes<\/td>\n<td>n\/a<\/td>\n<td>O(log(N))<\/td>\n<td>O(log(N))<\/td>\n<td>O(log(N))<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\"><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td height=\"15\"><strong>Lists<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td height=\"15\">ArrayList<\/td>\n<td>Resizable array<\/td>\n<td>Not thread safe<\/td>\n<td>No<\/td>\n<td>O(1)<\/td>\n<td>O(N)<\/td>\n<td>O(N)<\/td>\n<td>O(N)<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">LinkedList<\/td>\n<td>Double linked list<\/td>\n<td>Not thread safe<\/td>\n<td>No<\/td>\n<td>O(N)<\/td>\n<td>O(N)<\/td>\n<td>O(1)<\/td>\n<td>O(1)<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">Vector<\/td>\n<td>Old School, don\u2019t use<\/td>\n<td>Intrinsic blocks<\/td>\n<td>No<\/td>\n<td>O(N)<\/td>\n<td>O(N)<\/td>\n<td>O(1)<\/td>\n<td>O(1)<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\"><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td height=\"15\"><strong>Sets<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td height=\"15\">HashSet<\/td>\n<td>HashMap backed<\/td>\n<td>Not thread safe<\/td>\n<td>No<\/td>\n<td>n\/a<\/td>\n<td>O(1)<\/td>\n<td>O(1)<\/td>\n<td>O(1)<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">TresSet<\/td>\n<td>Tree backed<\/td>\n<td>Not thread safe<\/td>\n<td>Yes<\/td>\n<td>n\/a<\/td>\n<td>O(log(N))<\/td>\n<td>O(log(N))<\/td>\n<td>O(log(N))<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">ConcurrentSkipListSet<\/td>\n<td>As ConcurrentSkipListMap<\/td>\n<td>As ConcurrentSkipListMap<\/td>\n<td>yes<\/td>\n<td>n\/a<\/td>\n<td>O(log(N))<\/td>\n<td>O(log(N))<\/td>\n<td>O(log(N))<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\"><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td height=\"15\"><strong>Queue\u00a0 \/ FIFO<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td height=\"15\">ConcurrentLinkedQueue<\/td>\n<td><\/td>\n<td>Non blocking<\/td>\n<td>No<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">PriorityQueue<\/td>\n<td>Balanced binary heap<\/td>\n<td>Not thread safe<\/td>\n<td>Yes<\/td>\n<td>n\/a<\/td>\n<td>O(N)<\/td>\n<td>O(log(N))<\/td>\n<td>O(log(N))<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">ArrayBlockingQueue<\/td>\n<td>Bounded array<\/td>\n<td>Reentrant lock<\/td>\n<td>No<\/td>\n<td>O(1)<\/td>\n<td>O(N)<\/td>\n<td>O(1)<\/td>\n<td>O(N)<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">PriorityBlockingQueue<\/td>\n<td>Array based binary heap<\/td>\n<td>Reentrant lock<\/td>\n<td>Yes<\/td>\n<td>n\/a<\/td>\n<td>O(N)<\/td>\n<td>O(log(N)) ?<\/td>\n<td>O(log(N)) ?<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">LinkedBlockingQueue<\/td>\n<td>Typically greater throughput than array backed<\/td>\n<td>Reentrant lock<\/td>\n<td>No<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">LinkedTransferQueue<\/td>\n<td>Producer waits for consumer<\/td>\n<td>Short spin then park\/unpark<\/td>\n<td>No<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">SynchronousQueue<\/td>\n<td>Insert waits for remove<\/td>\n<td>Short spin then park\/unpark<\/td>\n<td>No<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">DelayQueue<\/td>\n<td>Backed by PriorityQueue<\/td>\n<td>Reentrant lock<\/td>\n<td>Yes<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">ForwardingBlockingQueue<\/td>\n<td>Blocking queue to another Blocking queue<\/td>\n<td>Not thread safe<\/td>\n<td>No<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Google<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">EvictingQueue<\/td>\n<td>Evicts from head<\/td>\n<td>Not thread safe<\/td>\n<td>No<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Google<\/td>\n<\/tr>\n<tr>\n<td height=\"15\"><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td height=\"15\"><strong>Dequeue \/ FIFO or LIFO<\/strong><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td height=\"15\">LinkedList<\/td>\n<td>List, double linked list<\/td>\n<td>Not thread safe<\/td>\n<td>No<\/td>\n<td>O(N)<\/td>\n<td>O(N)<\/td>\n<td>O(1)<\/td>\n<td>O(1)<\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">LinkedBlockingDeque<\/td>\n<td>Linked list<\/td>\n<td>Reentrant lock<\/td>\n<td>No<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">ArrayDeque<\/td>\n<td>Array backed<\/td>\n<td>Not thread safe<\/td>\n<td>No<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">ConcurrentLinkedDeque<\/td>\n<td><\/td>\n<td>Non blocking<\/td>\n<td>No<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Java<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">ForwardingDeque<\/td>\n<td>Abstract<\/td>\n<td>Not thread safe<\/td>\n<td>No<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Google<\/td>\n<\/tr>\n<tr>\n<td height=\"15\">ForwardingBlockingDeque<\/td>\n<td>Abstract<\/td>\n<td>Not thread safe<\/td>\n<td>No<\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td><\/td>\n<td>Google<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>Here are list Java 7 data structures and their thread model and expected performance. (See\u00a0BigO Cheat Sheet for more algorithm speeds):- Name Overiew Threading Method Sorted Index Search \/ Contiains or Get Insert Delete Who Maps HashMap Hashtable Not thread &hellip; <a href=\"http:\/\/www.smr.co.uk\/?p=312\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a> <a href=\"http:\/\/www.smr.co.uk\/?p=312\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[8,11],"tags":[],"class_list":["post-312","post","type-post","status-publish","format-standard","hentry","category-java","category-technology"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.smr.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/312","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.smr.co.uk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.smr.co.uk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.smr.co.uk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.smr.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=312"}],"version-history":[{"count":0,"href":"http:\/\/www.smr.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/312\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.smr.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=312"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.smr.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=312"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.smr.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=312"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}