java核心技术卷1::集合

集合

Java 集合框架

  • 将集合的接口与实现分离
    • 接口并没有说集合是如何实现的,可以按照实际情况,运用链表或数组实现。
      循环数组队列类,ArrayDeque;链表数组队列,LinkedList类;这两个类都实现了 Queue 接口。
      
    • 只有在构建集合对象时,使用具体的类才有意义。
    • 循环数组是一个有界集合,即容量有限。如果程序中需要收集的对象数量没有上限,就最好用链表实现,即使循环数组要比链表更高效。
  • Collection 接口
    // 接口的基本方法
    public interface Collection<E> {
    	boolean add(E element);	// 向集合中添加元素,集合中不允许重复对象。
    	Iterator<E> iterator();} // 迭代器对象将依次访问集合中的元素
    
  • 迭代器
    // 包含四个方法:
    public interface Iterator<E> {
    	E next(); // 通过反复调用 next 方法,可以逐个访问集合中的每个元素。
    	boolean hasNext(); // 调用 next 之前需要先调用 hasNext 确保不会访问越界导致抛出异常。
    	void remove(); // 删除上次调用 next 方法时返回的元素。不能连续两次调用,必须先调用 next。
        // 对 forEachReamining 提供一个 lambda 表达式,将对迭代器的每一个元素调用这个 lambda 表达式。
    	default void forEachRemaining(Consumer<? super E> action);}
    // iterator.forEachRemaining(element -> do something with element);
    
    • 元素被访问的顺序取决于集合类型。
      • 如果对 ArrayList 进行迭代,迭代器将从索引 0 开始,每迭代一次,索引值加 1、

      • 如果访问 HashSet 中的元素,每个元素将会按照某种随机的次序出现。

      • 虽然可以确定在迭代过程中能够便利到集合的所有元素,但无法预知元素被访问的次序。
    • java迭代器查找操作与位置变更时紧密相连的。查找一个元素的唯一方法是调用 next。
  • 集合框架中的接口
    • 基本接口:Collection 和 Map。
      • V put(K key, V value) // 插入键值对
        V get(K key) // 读取值
        
    • List接口:
      • 有序集合,元素会添加到容器中的特定位置
      • // 随机访问
        void add(int index, E element)
        void remove(int index)
        E get(int index)
        E set(int index, E element)
        // 迭代器访问:ListIterator 接口
        void add(E element) // 在迭代器位置前增加元素。
        
    • Set接口:
      • 等同与 Collection 接口,但 add 不允许增加重复的方法。
        • equals 方法只要含同样的元素就认为是相等的;
        • hashCode 需要保证相等的两个集会得到相等的散列码。
  • 链表
    • 在 Java 中,所有链表实际上都是双向连接的。
    • // LinkedList 接口
      void add(E element); // 将对象添加到链表的尾部。
      // ListIteration 接口
      E previous() // 反向迭代链表,和 next 相同
      boolean hasPrevious()
      void add(E element) // 在迭代器位置前添加一个新对象。
      void set(E element) // 取代调用 next 或 previous 方法返回的上一个元素。
      
    • 当某个迭代器修改器,另一个迭代器对其遍历,将会跑出异常。
    • 为了避免并发修改,建议只设置一个读写迭代器,和多个只读迭代器。
    • 使用链表的唯一理由是尽可能减少在列表中间插入或删除元素所付出的代价
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值