`
keating
  • 浏览: 170006 次
  • 性别: 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 ...

    Java Coding Standard.pdf

    &lt;div class="block"&gt;An example class demonstrating basic Java concepts.&lt;/div&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/div&gt; &lt;/section&gt; &lt;/div&gt; #### 五、相关文档 - [Effective Java]...

    Effective Java读书笔记.pdf

    "Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...

    Jdom解析嵌套XML<一>

    &lt;book title="Effective Java"&gt; &lt;author&gt; Joshua Bloch &lt;/author&gt; &lt;year&gt;2001&lt;/year&gt; &lt;/book&gt; &lt;/category&gt; &lt;category name="Movies"&gt; &lt;!-- ... --&gt; &lt;/category&gt; &lt;/root&gt; ``` 使用JDOM解析这样的文件,可以...

    <<More Effective C++>>

    《More Effective C++》是C++编程领域的一本经典书籍,由Scott Meyers撰写,它为程序员提供了35个实用的技巧和最佳实践,旨在帮助他们编写更高效、更易于维护的C++代码。这本书是《Effective C++》系列的一部分,...

    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的理解即将经历一次巨大的变化,我对它所说的任何事情,也许很快就会被认为是...

    广州今年最新java面试题

    &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;/tr&gt; &lt;/table&gt; ``` 5. **个人兴趣**: 面试官可能会问及你的学习资源,...

    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 ...

    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 ...

    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 ...

    effective java 读书笔记

    《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...

    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 ...

    xmappr解析XML适用例子

    &lt;title&gt;Effective Java&lt;/title&gt; &lt;author&gt;杰伊·格洛斯曼&lt;/author&gt; &lt;year&gt;2001&lt;/year&gt; &lt;/book&gt; &lt;/library&gt; ``` 我们可以创建对应的Java类来映射XML元素: ```java public class Book { @Attribute(name = "id...

Global site tag (gtag.js) - Google Analytics