• Java 常用 Collection 继承关系与接口实现


    Java Collection

    List 接口

    继承、接口实现关系:

    public interface List<E> extends Collection<E>

    方法定义:

    • 在末尾添加一个元素:boolean add(E e)
    • 在指定索引添加一个元素:boolean add(int index, E e)
    • 删除指定索引的元素:E remove(int index)
    • 删除某个元素:boolean remove(Object e)
    • 获取指定索引的元素:E get(int index)
    • 获取链表大小(包含元素的个数):int size()

    实现:

    1. List<Integer> arrayList = new ArrayList<>();
    2. List<Integer> linkedList = new LinkedList<>();

    Map 接口

    继承、接口实现关系:

    public interface Map<K,V>

    实现:

    1. Map<Integer, Integer> hashMap = new HashMap<>();(最常用)

    SortedMap 接口

    继承、接口实现关系:

    public interface SortedMap<K,V> extends Map<K,V>

    实现:

    1. Map<Integer, Integer> treeMap = new TreeMap<>();

      必须实现 Comparable 接口

    Set 接口

    继承、接口实现关系:

    public interface Set<E> extends Collection<E>

    方法定义:

    • 将元素添加进Set<E>boolean add(E e)
    • 将元素从Set<E>删除:boolean remove(Object e)
    • 判断是否包含元素:boolean contains(Object e)

    实现:

    1. Set<Integer> hashSet = new HashSet<>();(最常用)

    SortedSet 接口

    继承、接口实现关系:

    public interface SortedSet<E> extends Set<E>

    实现:

    1. Set<Integer> treeSet = new TreeSet<>();

      必须实现 Comparable 接口

    Queue 接口

    继承、接口实现关系:

    public interface Queue<E> extends Collection<E>

    方法定义:

    • 获取队列长度:int size()

    • throw Exception 返回false或null
      添加元素到队尾 add(E e) boolean offer(E e)
      取队首元素并删除 E remove() E poll()
      取队首元素但不删除 E element() E peek()

    实现:

    1. Queue<Integer> queue = new LinkedList<>();LinkedList<E> 实现了 Deque<E> 接口,Deque<E> 接口继承于 Queue<E> 接口)

    2. Queue<Integer> priorityQueue = new PriorityQueue<>();

      必须实现 Comparable 接口

    Deque 接口

    继承、接口实现关系:

    public interface Deque<E> extends Queue<E>

    方法定义与对比:

    Queue Deque
    添加元素到队尾 add(E e) / offer(E e) addLast(E e) / offerLast(E e)
    取队首元素并删除 E remove() / E poll() E removeFirst() / E pollFirst()
    取队首元素但不删除 E element() / E peek() E getFirst() / E peekFirst()
    添加元素到队首 addFirst(E e) / offerFirst(E e)
    取队尾元素并删除 E removeLast() / E pollLast()
    取队尾元素但不删除 E getLast() / E peekLast()

    实现:

    1. Deque<Integer> deque = new LinkedList<>();
    2. Deque<Integer> arrayDeque = new ArrayDeque<>();

    建议:

    1. Queue 提供的 add()/offer() 方法在 Deque 中也可以使用,但是,使用 Deque,最好不要调用 offer(),而是调用 offerLast()
      如果直接写 deque.offer(),我们就需要思考,offer() 实际上是 offerLast(),我们明确地写上 offerLast(),不需要思考就能一眼看出这是添加到队尾。
      因此,使用 Deque,推荐总是明确调用 offerLast()/offerFirst() 或者 pollFirst()/pollLast() 方法。

    2. 面向抽象编程的一个原则:尽量持有接口,而不是具体的实现类。
      我们发现 LinkedList 真是一个全能选手,它即是 List,又是 Queue,还是 Deque。但是我们在使用的时候,总是用特定的接口来引用它,这是因为持有接口说明代码的抽象层次更高,而且接口本身定义的方法代表了特定的用途。


    Stack 接口

    继承、接口实现关系:

    public class Stack<E> extends Vector<E>

    public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable

    方法定义:

    • 把元素压栈:push(E)
    • 把栈顶的元素弹出:pop(E)
    • 取栈顶元素但不弹出:peek(E)

    实现:

    通常使用 Deque 作为 Stack 使用。注意只调用 push()/pop()/peek() 方法,不要调用 addFirst()/removeFirst()/peekFirst() 方法,这样代码更加清晰。


    参考:

    1. 集合- 廖雪峰的官方网站
    2. java.util 中关于各集合的源码
  • 相关阅读:
    [小经验]ASP.NET页面的编码问题
    mass Framework tabs插件 v2
    mass Framework lang模块 v4
    javascript模板系统 ejs v9
    mass Framework waterfall(瀑布流)插件
    mass Framework menu插件
    mass Framework pagination插件v2
    Firefox 12 Beta发布
    mass Framework pagination插件
    mass Framework switchable插件
  • 原文地址:https://www.cnblogs.com/varc/p/14992316.html
Copyright © 2020-2023  润新知