Prefer Collections over Arrays


Arrays are covariant; Generics are invariant

Arrays and Generics do not mix well

  • We can’t create an array of a generic type, a parameterized type, or a type parameter

Collections provide correct toString, hashCode, equals implementations; Arrays don’t

  • Calling Array toString() directly or indirectly prints identity hash code(memory address), we need always rememberer to use Arrays.toString() or Arrays.toDeepString()
    • Arrays.toString()/toDeepString() doesn’t work for primitive array.
  • Array hashCode method is inherited from Object: based on the reference, have to use Arrays.hashCode(shallow implementation) or Arrays.deepHashCode
  • Array equals method is inherited from Object: based on the reference, have to use Arrays.equals(shallow implementation) or Arrays.deepEquals

More Pitfalls of Object Array

  • Arrays are fixed in size but Collections are dynamic in size.
  • Object Array is always mutable, a collection can be mutable or immutable: ImmutableList/Set/Map, ImmutableInt/Long/DoubleArray
  • Object Array is not thread-safe, a collection can be thread safe: concurrent collections like ConcurrentHashMap,
  • A collection can provide different views: unmodifiable, subList
  • A collection provides many useful methods, an array doesn’t, have to use Arrays or some util classes.

Labels

adsense (5) Algorithm (69) Algorithm Series (35) Android (7) ANT (6) bat (8) Big Data (7) Blogger (14) Bugs (6) Cache (5) Chrome (19) Code Example (29) Code Quality (7) Coding Skills (5) Database (7) Debug (16) Design (5) Dev Tips (63) Eclipse (32) Git (5) Google (33) Guava (7) How to (9) Http Client (8) IDE (7) Interview (88) J2EE (13) J2SE (49) Java (186) JavaScript (27) JSON (7) Learning code (9) Lesson Learned (6) Linux (26) Lucene-Solr (112) Mac (10) Maven (8) Network (9) Nutch2 (18) Performance (9) PowerShell (11) Problem Solving (11) Programmer Skills (6) regex (5) Scala (6) Security (9) Soft Skills (38) Spring (22) System Design (11) Testing (7) Text Mining (14) Tips (17) Tools (24) Troubleshooting (29) UIMA (9) Web Development (19) Windows (21) xml (5)