Nuances of the Java 5.0 for-each Loop | Java.net



Item 1: The for-each loop allows only one iteration variable, which precludes simultaneously iterating over two or more arrays or collections. 
 Essentially, an intermediate Iterator of the right kind is created.
public Integer sum (List<Integer> liszt) {
    int total=0;
    for(Iterator<Integer> iter=liszt.iterator(); iter.hasNext();) {
        int num = ((Integer)iter.next()).intValue();
        total += num;
    }
    return new Integer(total);
}
Item 3: Beware of auto-unboxing.
Unless you are forced to use native types because of their support for arithmetic operations, it is preferable to use subclasses of Number(IntegerDouble, etc.) in loop variables rather than the equivalent native types (int,
double, etc.).
An exception to this rule is when the iteration is around an array of a native numeric type.

Item 4: Watch out for null pointers. 
if (null != liszt) for(int num : liszt)
Item 6. Return zero length arrays or empty lists rather than nulls
Item 7. Do not modify the list during iteration.
Item 8. Consider returning an Iterable rather than a List.
This effectively hides the details of the current implementation and allows for later optimizations such as lazy construction of each iterated item
Item 9. Consider returning Iterable views rather than implementing Iterable.
Item 10. Consider lazy construction of iterated items.
    public Iterator<T> iterator() {
        return new Iterator<T>() {
            public boolean hasNext() {
               try {return !results.isAfterLast();}
               catch (SQLException e) {return false;}
            }
            public T next() {
                try {
                   results.next();
                   return rowFactory.create(results);
                }catch (SQLException e) {e.printStackTrace();return null;}
            }
            public void remove() {
                throw new UnsupportedOperationException();
            }
      
that List should implement java.util.RandomAccess. This is just a marker interface--it declares no methods--and is meant to provide a means for generic methods to optimize their for loops involving Lists if the List implementation's random access mechanisms are faster than iteration. For example, in the Java Collections framework, the ArrayListStack, and Vector implement RandomAccess. A compiler
could produce the following optimized translation of the first example.
Read full article from Nuances of the Java 5.0 for-each Loop | Java.net

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts