Πως επιλέγω το κατάλληλο Implementation για το Collection μου

Συχνά στους junior programmers έρχομαι αντιμέτωπος με το πρόβλημα του να χρησιμοποιούν ένα  collection implementation, συνήθως  ArrayList ή HashSet, επειδή απλά αυτό βλέπουν συχνά χωρίς να ξέρουν τις ιδιαιτερότητές του με αποτέλεσμα διάφορα προβλήματα όπως να χάνεται η σειρά ενώ τη χρειάζονται, να χάνονται διπλές εγγραφές κλπ.

Οπότε αποφάσισα να γράψω αυτόν τον οδηγό για την κατάλληλη επιλογή του

  1. Θέλω Λίστα
    1. Θέλω διπλές εγγραφές: ArrayList
    2. ΔΕΝ θέλω διπλές εγγραφές
      1. ΔΕΝ θα ψάχνω συχνά για contains: ArrayList
      2. Θα ψάχνω συχνά για contains αλλά δεν με ενδιαφέρει η σειρά: HashSet
      3. Θα ψάχνω συχνά για contains Ή με ενδιαφέρει η σειρά εισαγωγής:LinkedHashSet
      4. Θα ψάχνω συχνά για contains Ή με ενδιαφέρει η αυτόματη ταξινόμηση:TreeHashSet
  2. Θέλω key/value ζεύγη
    1. Δεν με ενδιαφέρει η σειρά: HashMap
    2. Με ενδιαφέρει η σειρά και συγκεκριμένα:
      1. Αυτόματη ταξινόμηση των κλειδιών: TreeMap
      2. Διατήρηση της σειράς εισαγωγής: LinkedHashMap

Τα παραπάνω τα έβαλα και σε μια εικόνα για μεγαλύτερη ευκολία

Java Collections Cheat Sheet
Java Collections Cheat Sheet

Passionate Archer, Runner, Linux lover and JAVA Geek! That's about everything! Alexius Dionysius Diakogiannis is a Senior Java Solutions Architect and Squad Lead at the European Investment Bank. He has over 20 years of experience in Java/JEE development, with a strong focus on enterprise architecture, security and performance optimization. He is proficient in a wide range of technologies, including Spring, Hibernate and JakartaEE. Alexius is a certified Scrum Master and is passionate about agile development. He is also an experienced trainer and speaker, and has given presentations at a number of conferences and meetups. In his current role, Alexius is responsible for leading a team of developers in the development of mission-critical applications. He is also responsible for designing and implementing the architecture for these applications, focusing on performance optimization and security.