• Core Java笔记 9.集合(I)


    本章重点:

    • Java Collction 设计策略
    • 具体的集合类

    Java Collection 设计策略

    Java 采用如下策略:

    1. Java Collection 也是采用 interface 和 implementation 分离. 接口本身不关心实现的效率,那是选择时考虑的.
    2. Java Collection 是核心接口:CollectionIterator.

    Interface CollectionIterator

    Collection 是 Java Collection Framework 的 super interface.

    Collection 核心方法:

    public interface Collection<E> extends Iterable<E> {
        boolean add(E element);
        Iterator<E> iterator();
        // other methods ...
    }
    
    public interface Iterable<E> {
        Iterator<E> iterator();
    }
    

    注:
    add() -- 增
    iterator() -- 迭代器可以完成:查、删操作.

    Iterator 定义:

    public interface Iterator<E> {
        E next();
        boolean hasNext();
        void remove();
    }
    

    Iterator 用于 loop:

    Collection<String> c = ...;
    Iterator<String> iter = c.iterator();
    while (iter.hasNext()) {
        String element = iter.next();
        // do something with element
    }
    
    // Java SE 5.0 for-each loop
    // 任何实现了 Iterable 接口的对象一起工作,都支持 for-each 语法
    for (String element : c) {
        // do something with element
    }
    

    具体的集合类

    Full Java Collections:

    corejava-collections-pic01
    corejava-collections-pic02

    通过测试代码介绍 Java 核心的集合类的使用.

    LinkedList 与 ListIterator

    LinkedList: ordered collection(doubly linked list in Java). 它除了拥有普通型的迭代器,还拥有一个增强型迭代器(ListIterator).

    ListIterator: 双向迭代器,而且支持:add() 操作.

    interface ListIterator<E> extends Iterator<E> {
        void add(E element);
        E previous();
        boolean hasPrevious();
    }
    

    测试代码:

    public class ListsTest {
    
        public static void main(String[] args) {
            List<String> staff = new LinkedList<String>();
            staff.add("Amy");
            staff.add("Bob");
            staff.add("Carl");
    
            System.out.println(staff);  // [Amy, Bob, Carl]
    
            // 测试 iterator
            // !!!!!迭代器的行为可以想象下:光标 |ABC A|BC AB|C ABC|
    
            Iterator<String> iter = staff.iterator();
    
            // 要点1: 调用 remove() 必须调用 next()[next 和 remove 强关联]
            // iter.remove();           // java.lang.IllegalStateException
    
            // 要点2: 禁止重复 remove()
            // iter.remove();
            // iter.remove();           // java.lang.IllegalStateException
    
            // 要点3: 删除操作
            Iterator<String> iter2 = staff.iterator();
            String first = iter2.next();
            iter2.remove();             // 删除第一个元素
            String second = iter2.next();
            iter2.remove();             // 删除第二个元素
    
            System.out.println(staff);  // [Carl]
    
    
            // 测试 ListIterator
    
            ListIterator<String> listIter = staff.listIterator();
            listIter.add("Tom");
            listIter.add("Jerry");
            listIter.next(); // skip past first element
            listIter.add("Juliet");
            System.out.println(staff);  // [Tom, Jerry, Carl, Juliet]
    
            while (listIter.hasNext()) {
                listIter.next();
            }
            listIter.add("Jetty");
            System.out.println(staff);  // [[Tom, Jerry, Carl, Juliet, Jetty]
        }
    }
    

    ArrayList

    Set

    Set 两个常用的实现: HashSet 和 TreeSet.
    TreeSet 的元素必须实现 Comparable, 或者初始化时 提供一个比较器。

    QueueDeque

    Queue: 队列. 提供 add(offer), remove(poll), element(peek).
    Deque: 双端队列. 扩展自 Queue, 提供 head 和 tail 的add(offer), remove(poll), get(peek)操作.
    Deque的典型实现: ArrayDeque 和 LinkedList.

    PriorityQueue

    PriorityQueue: 优先队列,要求元素是 Comparable 或者提供 Comparator.

    Map

    Map 的两个常用实现: HashMap 和 TreeMap.
    Map 的三个视图.

    Set<K> keySet();
    Collection<V> values();
    Set<Map.Entry<K, V>> entrySet(); // Map 其实是利用Set 实现的,其实就是 元素是 Map.Entry 类型的 Set
    

  • 相关阅读:
    echarts常用说明
    ionic4打包和ngix配置
    浏览器onbeforeunload
    vue中keepAlive的使用
    面试题
    git使用
    git常用命令
    ajax原理
    关于npm(一)
    React、Vue、Angular对比 ---- 新建及打包
  • 原文地址:https://www.cnblogs.com/nil2inf/p/4515177.html
Copyright © 2020-2023  润新知