Skip to content

Latest commit

 

History

History
62 lines (45 loc) · 3.36 KB

00_Introduction.md

File metadata and controls

62 lines (45 loc) · 3.36 KB

《《《 返回首页

第一章(简介)

  • 在Java的最新版本中泛型和集合与许多其他新功能一起工作良好,包括装箱和拆箱,循环的一种新形式,以及接受可变数量参数的函数。
    我们从一个例子开始说明了所有这些。 我们将会看到,将它们相结合是协同的:整体更大比其部分的总和。

  • 以此作为我们的座右铭,让我们做一些简单的总和:把三个数字一个列表并将它们加在一起。 下面是如何在Java中使用泛型:

     List<Integer> ints = Arrays.asList(1,2,3);
     int s = 0;
     for (int n : ints) { s += n; }
     assert s == 6;
  • 你不需要太多的解释就可以读这个代码,但是让我们来看看关键特征。接口列表和类数组是集合框架的一部分(都可以在java.util包中找到)。
    类型List现在是通用的;你写List<E>以指示具有类型E的元素的列表。这里我们写List<Integer>指出列表的元素属于Integer类,
    即包装类对应于基本类型int。拳击和拆箱操作,用于转换从原始类型到包装类,自动插入。静态的方法asList可以使用任意数量的参数,
    将它们放入一个数组中,然后返回一个由数组支持的新列表。新的循环形式,foreach,被用来绑定一个变量依次到列表的每个元素,
    循环体将这些添加到总和中。该断言语句(在Java1.4中引入)用于检查总和是否正确;当启用断言时,如果条件不计算,则会引发错误真的。

  • 下面是在泛型之前Java中相同的代码:

      List ints = Arrays.asList( new Integer[] {
      new Integer(1), new Integer(2), new Integer(3)
      } );
      int s = 0;
      for (Iterator it = ints.iterator(); it.hasNext(); ) {
         int n = ((Integer)it.next()).intValue();
         s += n;
      }
      assert s == 6;
  • 阅读这段代码并不是那么容易。 没有泛型,就没有办法指出类型声明你打算在列表中存储什么样的元素,所以而不是写List<Integer>,你写List
    现在是编码器而不是编译器谁负责记住列表元素的类型,所以你必须写下从列表中提取元素时将其转换为(整数)。 没有拳击和拆箱,
    你必须显式地分配属于包装类Integer的每个对象并使用intValue方法提取相应的基元int。 没有功能接受可变数量的参数,
    您必须显式地分配一个数组传递给asList方法。 没有新的循环形式,你必须显式声明一个迭代器,并通过列表推进。

  • 顺便说一句,下面是如何在泛型之前用Java中的数组做同样的事情:

     int[] ints = new int[] { 1,2,3 };
     int s = 0;
     for (int i = 0; i < ints.length; i++) { s += ints[i]; }
     assert s == 6;
  • 这比使用泛型和集合的相应代码略长,可以说是不太可读,而且肯定不够灵活。 集合让你轻松增大或缩小集合的大小,
    或在切换到不同的表示形式时适当的,如链表或散列表或有序树。 java的泛型,装箱和拆箱,foreach循环和Java中的可变参数标志着第一次
    使用集合与使用数组一样简单,甚至可能更简单。

  • 现在我们来看一下这些功能的更多细节。

《《《 下一节

《《《 返回首页