Thinking in Java 第11章 持有对象(容器)

//声明:部分内容引自《Java编程思想(第四版)》机械工业出版社

– 使用泛型容器:ArrayList<Apple> apples = new ArrayList<Apple>(); 可以在编译期防止将错误类型的对象放置到容器中;在取出元素时,也不必强制类型转换。

– 所有的 Collection 都可以用 foreach 语法遍历。

– 注意:

package holding;//: holding/AsListInference.java
// Arrays.asList() makes its best guess about type.
import java.util.*;

class Snow {}
class Powder extends Snow {}
class Light extends Powder {}
class Heavy extends Powder {}
class Crusty extends Snow {}
class Slush extends Snow {}

public class AsListInference {
  public static void main(String[] args) {
    List<Snow> snow1 = Arrays.asList(
      new Crusty(), new Slush(), new Powder());

    // Won't compile:
    // List<Snow> snow2 = Arrays.asList(
    //   new Light(), new Heavy());
    // Compiler says:
    // found   : java.util.List<Powder>
    // required: java.util.List<Snow>

    // Collections.addAll() doesn't get confused:
    List<Snow> snow3 = new ArrayList<Snow>();
    Collections.addAll(snow3, new Light(), new Heavy());

    // Give a hint using an
    // explicit type argument specification:
    List<Snow> snow4 = Arrays.<Snow>asList(
       new Light(), new Heavy());
  }
} ///:~

– 容器类库的两种主要类型:

  1. Collection: 每个位置只能保存一个元素。

    包括:List ,Set(元素不能重复), Queue。

  2. Map: 每个位置保存两个对象:“键”-“值”,对于每个“键”,Map 只接受存储一次。


【迭代器】

– Iterator 的功能:

  1. 使用方法 iterator() 要求容器返回一个 Iterator。Iterator 将准备好返回序列的第一个元素。

  2. 使用 next() 获得序列中的下一个元素。

  3. 使用 hasNext() 检查序列中是否还有元素。

  4. 使用 remove() 将迭代器新近返回的元素删除。

– 只遍历,不修改,则 foreach 更为简洁。

– display() 方法遍历序列,而不包含任何有关它所遍历序列的类型信息。


– PriorityQueue 优先级队列:下一个弹出的元素是优先级最高的元素。

– 当要实现Collection 时,可用 foreach 迭代,当实现非 Collection 的外部类时,可用 Iterator 实现。

– 如果要进行大量的随机访问,就使用 ArrayList;如果要经常从表中间插入或删除元素,则应该使用 LinkedList。

– HaspMap 用来快速访问;TreeMap 保持“键”始终处于排序状态,所以没有 HashMap 快。LinkedHashMap 保持元素插入的顺序,但是也通过散列提供了快速访问能力。

– HashSet 提供最快的查询速度,TreeSet 保持元素处于排序状态。LinkedHashSet 以插入顺序保存元素。

Java 中简单的容器分类
(常用容器用紫色线框表示,点线框表示接口,实线框表示普通的(具体的)类。带有空心箭头的点线表示一个特定的类实现了一个接口,实心的箭头表示某个类可以生成箭头所指向类的对象。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值