`
keating
  • 浏览: 167075 次
  • 性别: Icon_minigender_1
  • 来自: weihai
社区版块
存档分类
最新评论

<effective java>讲for的笔记

    博客分类:
  • Java
阅读更多
先是说for比while更安全,因为for是把一推东西都写在括号中的嘛.
而while需要现在外部定义一个对象,
所以,while中可能出现如此代码,
Iterator<Element> i = c.iterator();
while(i.hasNext()){
  doSomething(i.next());
}
//...
Iterator<Element> i2 = c2.iterator();
while(i.hasNext()){//这里有bug
  doSomething(i2.next());
}

for循环就不可能出现.
然后,就是一个比较有意思的,可能你知道,算俺少见多怪吧...
        for (int i = 0, j = 1, k = 2;;) {
            //我认为可以定义很多变量也很有意思...
        }

-------------------
"利用for-each循环不会有性能损失,甚至用于数组也一样。实际上,在某些情况下,比起普通的for循环,它还稍有些性能优势,因为它对数组索引的边界值只计算一次。"
    public static void main(String[] args) {
        int[] iArr = new int[10000000];
        long forBegin = System.currentTimeMillis();
        for (int i = 0; i < iArr.length; i++) {
            test(iArr[i]);
        }
        long forEnd = System.currentTimeMillis();
        for (int i : iArr) {
            test(i);
        }
        long foreach = System.currentTimeMillis();
        System.out.println("for:" + (forEnd - forBegin) + " foreach:" + (foreach - forEnd));
        //输出结果,for:31 foreach:16
    }
    public static void test(int i) {
    }

看输出结果,果不其然!for-each是怎么实现的呢?看来肯定不是用普通for循环鸟...
-------------------
在看一个,书中要讲明要用for-each,尽量不要用for的一个例子,for可能会遇到的一个问题,
    public static void main(String[] args) {
        List<Suit> suits = Arrays.asList(Suit.values());
        List<Rank> ranks = Arrays.asList(Rank.values());
        List<Card> deck = new ArrayList<Card>();
        for (Iterator<Suit> i = suits.iterator(); i.hasNext();) {
            for (Iterator<Rank> j = ranks.iterator(); j.hasNext();) {
                deck.add(new Card(i.next(), j.next()));
                //问题就在于这里的i.next(),多次的j循环,i也是不断next()的呀...
            }            
        }
    }
    enum Suit {
        CLUB, DIAMOND, HEART, SPADE
    }
    enum Rank {
        ACE, // [eis] 幺点
        DEUCE, // [dju:s] 两点
        THREE, FOUR, FIVE, SIX, SEVEN, NINE, TEN, JACK, QUEEN, KING
    }

当然,解决办法简单到只需在第二个for循环前把i.next()赋给一个对象.
但是,<effective java>曰不优雅呀!
okay,于是乎就这样了,
for (Suit suit : Suits)
  for (Rank rank : ranks)
    deck.add(new Card(suit,rank));

要注意呀,"for-each循环不仅让你遍历集合和数组,还让你遍历任何实现Iterable接口的对象",O耶,以后要玩集合都要实现Iterable鸟...
-------------------
至于最后提单的,"过滤"和"转换"时不要用for-each并非没有瑕疵.如果是个对象的集合的话,用for-each做remove(过滤)和为属性赋值(转换)应该也是木问题的.
当然,如果是简单类型集合的话,"转换"与"过滤"不宜用for-each了.("转换",如果使用=或者new的话,即使是对象集合,也是不行的吧)
分享到:
评论

相关推荐

    Self.Service.Linux.Mastering.the.Art.of.Problem.Determination

    one step at a time&lt;br/&gt;&lt;br/&gt;Understand the Executable and Linking Format (ELF), and use that knowledge for more effective debugging&lt;br/&gt;&lt;br/&gt;Includes a production-ready data collection script that ...

    <<More Effective C++>>

    35 New Ways to Improve Your Programs and Design 改善程序设计方法与设计思维的35个新方法

    Effective STL(中文)

    &lt;br&gt;&lt;br&gt;《Effective STL》目录:&lt;br&gt;&lt;br&gt;前言&lt;br&gt;致谢&lt;br&gt;导读&lt;br&gt;容器&lt;br&gt;条款1:仔细选择你的容器&lt;br&gt;条款2:小心对“容器无关代码”的幻想&lt;br&gt;条款3:使容器里对象的拷贝操作轻量而正确&lt;br&gt;条款4:用empty来代替...

    VB编程资源大全(英文控件)

    Fast, easy, effective way to manipulate INI files.&lt;END&gt;&lt;br&gt;55,SoundSource.zip&lt;br&gt;BrainFusion Presents The Dancer.Ocx Which is capable of reading The Sound Peak Form Sound Card When Mp3 or Wav File Is...

    Software Testing

    &lt;br/&gt;Publisher: Sams Publishing &lt;br/&gt;Pub Date: July 26, 2005 &lt;br/&gt;ISBN: 0-672-32798-8 &lt;br/&gt;Pages: 408 &lt;br/&gt; &lt;br/&gt;* Overview *&lt;br/&gt;Software Testing, Second Edition provides practical insight into the ...

    推荐的C++书籍 4.3 Generic programming and the STL

    &lt;&lt;effective c++&gt;&gt;这本圣经的作者Scott Meyesr在给&lt;&lt;modern c++ design&gt;&gt;序言的时候高度的赞赏了Andrei同志的工作:C++社群对template的理解即将经历一次巨大的变化,我对它所说的任何事情,也许很快就会被认为是...

    BSD HACKS -- 100个业界最尖端的技巧和工具

    Credits&lt;br&gt; About the Author&lt;br&gt; Contributors&lt;br&gt; Acknowledgments&lt;br&gt; ... Run Native Java Applications&lt;br&gt; Section 98. Rotate Your Signature&lt;br&gt; Section 99. Useful One-Liners&lt;br&gt; Section 9.13. Fun with X

    惠普的可引导U盘制作工具

    B&lt;br&gt;DESCRIPTION:&lt;br&gt;US=HP Windows Format Utility for USB Drive Key or DiskOnKey&lt;br&gt;&lt;br&gt;PURPOSE: Initial Release&lt;br&gt;SOFTPAQ NUMBER: SP27213&lt;br&gt;EFFECTIVE DATE: February 6, 2004&lt;br&gt;CATEGORY: ...

    推荐的C++书籍 4.4 STL源码剖析

    &lt;&lt;effective c++&gt;&gt;这本圣经的作者Scott Meyesr在给&lt;&lt;modern c++ design&gt;&gt;序言的时候高度的赞赏了Andrei同志的工作:C++社群对template的理解即将经历一次巨大的变化,我对它所说的任何事情,也许很快就会被认为是...

    Use Cases Patterns and Blueprints

    This book also includes an insightful use-case primer that will be indispensable both to novices and veteran modelers seeking to become more effective.&lt;br&gt;&lt;br&gt;Coverage includes&lt;br&gt;&lt;br&gt;Modeling rules ...

    Addison.Wesley.Effective.Use.of.Microsoft.Enterprise.Library.Jun.2006.chm(part2)

    Effective Use of Microsoft Enterprise Library is that roadmap.&lt;br/&gt;&lt;br/&gt;Microsoft application development lead architect Len Fenster explains exactly how to build applications using Enterprise ...

    effective java 读书笔记

    effective java 读书笔记,第二版自己摘要并翻译,以备速查。

    Application Development Using Csharp And .Net

    interoperability, and more &lt;br&gt;&lt;br&gt;Running case study: see how concepts work together when you build .NET applications &lt;br&gt;&lt;br&gt;Experienced C++, Java, and Visual Basic programmers: become effective ...

    Effective Java读书笔记.pdf

    Effective Java读书笔记.pdf

    Addison.Wesley.Effective.Use.of.Microsoft.Enterprise.Library.Jun.2006.chm

    Effective Use of Microsoft Enterprise Library is that roadmap.&lt;br/&gt;&lt;br/&gt;Microsoft application development lead architect Len Fenster explains exactly how to build applications using Enterprise ...

    The Business Case For E-Learning

    &lt;br&gt;The Business Case For E-Learning&lt;br&gt;&lt;br&gt;by Tom M Kelly , Nader A Nanjiani &lt;br&gt;&lt;br&gt;Paperback: 216 pages &lt;br&gt;Publisher: Cisco Press (October 29, 2004) &lt;br&gt;Language: English &lt;br&gt;ISBN-10: 1587200864 ...

    More effective C++

    &lt;More effective C++&gt;&lt;br&gt;继&lt; effective C++ &gt;之后的有一经典C++书籍&lt;br&gt;

    航空公司飞机订票管理系统毕业课程设计源码(vb+access实现)

    it is needed to have a rensonable datebase structure to save data information and an effective program structure to support every implement of data operation.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;第一章 系统概述 1&lt;br&gt;1.1 ...

    Windows Server 2003: The Complete Reference

    &lt;br&gt;Windows Server 2003: The Complete Reference &lt;br&gt;&lt;br&gt;中文译名:&lt;br&gt;Windows Server 2003 实用大全&lt;br&gt;&lt;br&gt;http://www.china-pub.com/19587&lt;br&gt;&lt;br&gt;&lt;br&gt;作者:&lt;br&gt;Kathy Ivens&lt;br&gt;with Rich Benack, Christian ...

    Filthy Rich Clients: Developing Animated and Graphical Effects for Desktop Java Applications (Part 1)

    Developing Animated and Graphical Effects for Desktop Java™ Applications shows you how to build better, more effective, cooler desktop applications that intensify the user experience.&lt;br&gt;&lt;br&gt;The ...

Global site tag (gtag.js) - Google Analytics