{"id":531,"date":"2019-08-22T08:44:21","date_gmt":"2019-08-22T00:44:21","guid":{"rendered":"http:\/\/47.101.202.111\/?p=531"},"modified":"2019-12-16T18:26:27","modified_gmt":"2019-12-16T10:26:27","slug":"java%e7%89%b9%e6%80%a7%e9%9b%86%e5%90%88%e7%b1%bb%ef%bc%9acollection%ef%bc%8clist%ef%bc%8cset%ef%bc%8cmap","status":"publish","type":"post","link":"http:\/\/139.196.114.170\/?p=531","title":{"rendered":"[java\u7279\u6027]\u96c6\u5408\u7c7b\uff1aCollection\uff0cList\uff0cSet\uff0cMap"},"content":{"rendered":"<p>\u7c7b\u96c6\u4e94\u5927\u6838\u5fc3\u63a5\u53e3Collection\u3001List\u3001Set\u3001Map\u3001Iterable\uff0c\u5b9e\u73b0\u4e86\u57fa\u7840\u7684\u52a8\u6001\u957f\u5ea6\u7684\u6570\u636e\u7ed3\u6784\uff0c\u5229\u7528\u6cdb\u578b\u4fdd\u5b58\u76f8\u540c\u7c7b\u578b\u6570\u636e\u907f\u514d\u5411\u4e0b\u8f6c\u578b\uff0c\u63a5\u53e3\u7684\u4f7f\u7528\u9700\u8981\u5b50\u7c7b\u5b9e\u73b0<\/p>\n<p>[toc]<\/p>\n<h2>\u7c7b\u96c6\u63a5\u53e3 Java.util.Collection<\/h2>\n<p>\u6240\u6709\u7c7b\u96c6\u7684\u7236\u63a5\u53e3\uff0c\u4e3a\u5355\u503c\u96c6\u5408\uff1a\u6bcf\u6b21\u53ea\u80fd\u64cd\u4f5c\u4e00\u4e2a\u6570\u636e\u5bf9\u8c61<\/p>\n<pre lang=\"java\">\npublic interface Collection<E> extends Iterable<E>\n    boolean add (E e)                               \u5411\u96c6\u5408\u4fdd\u5b58\u5355\u4e2a\u6570\u636e\n    boolean addAll (Collection<? extends E> c)      \u5411\u96c6\u5408\u8ffd\u52a0\u4e00\u7ec4\u6570\u636e\n    void clear ()                           \u6e05\u7a7a\u96c6\u5408\uff0c\u6839\u8282\u70b9\u4e3a\u7a7a\u540c\u65f6GC\n    boolean contains (Object o)     \u67e5\u8be2\u6570\u636e\u662f\u5426\u5b58\u5728\uff0c\u9700\u8981equals()\u65b9\u6cd5\n    boolean remove (Object o)               \u6570\u636e\u5220\u9664\uff0c\u9700\u8981equals()\u65b9\u6cd5\n    int size ()                 \u96c6\u5408\u4e2d\u6570\u636e\u6570\u91cf\uff0c\u81f3\u591aInteger.MAX_VALUE\n    boolean isEmpty ()                                          \u5224\u7a7a\n    Object[] toArray ()                             \u96c6\u5408\u4f5c\u5bf9\u8c61\u6570\u7ec4\u8fd4\u56de\n    Iterator<E> iterator ()         \u96c6\u5408\u8f6c\u4e3aiterator\u63a5\u53e3\uff0c\u7528\u4f5c\u6570\u636e\u8f93\u51fa\n<\/pre>\n<h2>List\u63a5\u53e3 Java.util.List<\/h2>\n<p>List\u63a5\u53e3\u5141\u8bb8\u4fdd\u5b58\u91cd\u590d\u5143\u7d20\uff0c\u5141\u8bb8\u4fdd\u5b58null\uff0c\u542b\u6709Collection\u63a5\u53e3\u6240\u6709\u65b9\u6cd5\u5e76\u4f5c\u51fa\u6269\u5145\uff0cList\u5b50\u7c7b\u5305\u62ecArrayList\uff0cVector\uff0cLinkedList<\/p>\n<pre lang=\"java\">\npublic interface List<E> extends Collection<E>\n    E get (int index)                                   \u83b7\u53d6\u6307\u5b9a\u7d22\u5f15\u6570\u636e\n    E set (int index, E element)                        \u4fee\u6539\u6307\u5b9a\u7d22\u5f15\u6570\u636e\n    ListIterator<E> listIterator ()             \u8fd4\u56deListIterator\u63a5\u53e3\u5bf9\u8c61\n    static <E> List<E>  of (E e1, E e2, E e3)   \u8fd4\u56de\u4e00\u4e2a\u53c2\u6570\u7ec4\u6210\u7684List\n<\/pre>\n<h4>List\u4f7f\u7528<\/h4>\n<pre><code class=\"language-java \">    \/\/ \u5b50\u7c7b\u5b9e\u4f8b\u5316\n    List&lt;String&gt; list = new ArrayList&lt;&gt;();\n    \/\/ List&lt;String&gt; list = new LinkedList&lt;&gt;();\n    \/\/ List&lt;String&gt; list = new Vector&lt;&gt;();\n    \/\/ \u6dfb\u52a0\u6570\u636e\uff0c\u4e0elist\u4e2d\u5b58\u50a8\u987a\u5e8f\u4e00\u81f4\n    list.add(\"string\");\n    list.add(\"string\");\n    \/\/ \u83b7\u5f97\u7d22\u5f15\u6570\u636e\n    list.get(0);\n    \/\/ \u5224\u7a7a\n    list.isEmpty();\n    \/\/ \u957f\u5ea6\n    list.size();\n    \/\/ \u6309\u7531\u524d\u5411\u540e\u987a\u5e8f\u5220\u9664\u7b2c\u4e00\u4e2a\u5339\u914d\n    list.remove(\"string\");\n    \/\/ \u8f93\u51fa\u96c6\u5408\n    System.out.print(list);\n    \/\/ Iterable\u63a5\u53e3forEach\u8f93\u51fa\n    list.forEach((str) -&gt; {\n        System.out.print(str);\n    });\n    \/\/ forEach\u65b9\u6cd5\u5f15\u7528\n    list.forEach(System.out::println);\n<\/code><\/pre>\n<h4>\u5b58\u50a8\u5f15\u7528\u7c7b\u578b\u5bf9\u8c61<\/h4>\n<p>List\u63a5\u53e3\u4f7f\u7528remove()\u3001contains()\u65b9\u6cd5\u65f6\u9700\u8981<strong>\u8986\u5199equals()\u65b9\u6cd5<\/strong><br \/>\nString\u7c7b\u578b\u5df2\u7ecf\u8986\u5199equals()\u65b9\u6cd5\u65e0\u9700\u91cd\u5199<\/p>\n<pre><code class=\"language-java \">    class Custom{\n        int num;\n        String str;\n        public Custom(int num, String str){\n            this.num = num;\n            this.str = str;\n        }\n\n        @Override\n        public boolean equals(Object obj) {\n            if(obj == this) return true;\n            if(obj == null) return false;\n            if(!(obj instanceof Custom)) return false;\n            Custom c = (Custom)obj;\n            return this.num ==c.num  &amp;&amp; this.str.equals(c.str);\n        }\n    }\n\n    public static void main(String[] args){\n        List&lt;Custom&gt; list = new ArrayList&lt;&gt;();\n        list.add(new Custom(1,\"Test1\"));\n        list.add(new Custom(2,\"Test2\"));\n        list.remove(new Custom(1,\"Test1\"));\n        list.forEach((obj)-&gt;{\n            System.out.print(obj.num);\n            System.out.print(obj.str);\n            System.out.println();\n        });\n    }\n<\/code><\/pre>\n<pre><code>2Test2\n<\/code><\/pre>\n<h4>\u5b50\u7c7b\u533a\u522b<\/h4>\n<table>\n<thead>\n<tr>\n<th align=\"left\">\u5b50\u7c7b<\/th>\n<th align=\"left\">ArrayList<\/th>\n<th align=\"left\">Vector<\/th>\n<th align=\"left\">LinkedList<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td align=\"left\">\u5185\u90e8\u5c01\u88c5\u5b9e\u73b0<\/td>\n<td align=\"left\">\u5bf9\u8c61\u6570\u7ec4<\/td>\n<td align=\"left\">\u5bf9\u8c61\u6570\u7ec4<\/td>\n<td align=\"left\">\u94fe\u8868<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u5b58\u50a8\u65b9\u5f0f<\/td>\n<td align=\"left\">\u987a\u5e8f\u5b58\u50a8<\/td>\n<td align=\"left\">\u987a\u5e8f\u5b58\u50a8<\/td>\n<td align=\"left\">\u94fe\u5f0f\u5b58\u50a8<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u5185\u5b58\u4f7f\u7528<\/td>\n<td align=\"left\">\u4ec5\u5b58\u50a8\u6570\u636e\u57df<\/td>\n<td align=\"left\">\u4ec5\u5b58\u50a8\u6570\u636e\u57df<\/td>\n<td align=\"left\">\u9700\u5b58\u50a8\u6307\u9488\u57df<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u67e5\u627e\u65f6\u95f4\u590d\u6742\u5ea6<\/td>\n<td align=\"left\">O(1)<\/td>\n<td align=\"left\">O(1)<\/td>\n<td align=\"left\">O(n)<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u63d2\u5165\u5220\u9664\u6027\u80fd<\/td>\n<td align=\"left\">\u79fb\u52a8\u5927\u91cf\u5143\u7d20\u6027\u80fd\u5dee<\/td>\n<td align=\"left\">\u79fb\u52a8\u5927\u91cf\u5143\u7d20\u6027\u80fd\u5dee<\/td>\n<td align=\"left\">\u8868\u5c3e\u589e\u6539\u6307\u9488\u5220\u6027\u80fd\u597d<\/td>\n<\/tr>\n<tr>\n<td align=\"left\">\u7ebf\u7a0b\u5b89\u5168\u6027<\/td>\n<td align=\"left\">\u4e0d\u5b89\u5168<\/td>\n<td align=\"left\">\u5b89\u5168<\/td>\n<td align=\"left\">\u4e0d\u5b89\u5168<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>ArrayList\u5b50\u7c7b<\/h3>\n<h4>\u7ee7\u627f\u7ed3\u6784<\/h4>\n<div class=\"mermaid mermaid-diagram no-emojify\"><script type=\"text\/javascript\">document.write(\"graph BT\\ncol[&lt;&lt;interface&gt;&gt;Collection&lt;T&gt;] --&gt; |extends| itb[&lt;&lt;interface&gt;&gt;Iterable&lt;T&gt;]\\nac[\\\"{abstract}AbstractCollection\\\"] -.-&gt; |implements| col\\naal[\\\"{abstract}AbstractList\\\"] --&gt; |extends| ac\\nal[ArrayList] --&gt; |extends| aal\\naal -.-&gt; |implements| list\\nlist[&lt;&lt;interface&gt;&gt;List] --&gt; |extends| col\\nal -.-&gt;|implements| list\\nstyle itb fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle ac fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle col fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle aal fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle list fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle al fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\n\");<\/script><\/div>\n<h4>\u6e90\u7801\u5206\u6790[JDK1.8]<\/h4>\n<p>ArrayList\u662f\u5bf9\u8c61\u6570\u7ec4elementData\u7684\u5c01\u88c5<br \/>\n\u4e3a\u907f\u514dArrayList\u6269\u5145\u548c\u62f7\u8d1d\u5bfc\u81f4\u6027\u80fd\u4e0b\u964d\uff0c\u5efa\u8bae\u9884\u4f30\u5bb9\u91cf\u6709\u53c2\u6784\u9020<\/p>\n<pre><code>\u65e0\u53c2\u6784\u9020 \u5206\u914d\u7a7a\u7684\u5bf9\u8c61\u6570\u7ec4\n\u6709\u53c2\u6784\u9020 \u4f20\u5165\u53c2\u6570\u76f4\u63a5\u5206\u914d\u5bf9\u5e94\u5927\u5c0f\u7684\u5bf9\u8c61\u6570\u7ec4\n<\/code><\/pre>\n<ul>\n<li>\u6dfb\u52a0\u6269\u5145\u6d41\u7a0b<\/li>\n<\/ul>\n<div class=\"mermaid mermaid-diagram no-emojify\"><script type=\"text\/javascript\">document.write(\"graph TB\\na1[\u8ba1\u7b97\u6269\u5145\u5c3a\u5bf8 ] --&gt;a2{\u662f\u5426\u4e3a\u7a7a\u5bf9\u8c61\u6570\u7ec4?}\\na2 --&gt; |\u662f| a3[\u5c3a\u5bf8\u4e3a10]\\na2 --&gt; |\u5426| a4[\u5c3a\u5bf8\u4e3asize+1]\\na3 --&gt; a5{\u65e7\u6570\u7ec4\u5bb9\u91cf\u662f\u5426\u80fd\u6ee1\u8db3\u5c3a\u5bf8?}\\na4 --&gt; a5\\na5 --&gt; |\u662f| a14\\na5 --&gt; |\u5426| a7[\u8bbe\u5b9a\u6269\u5bb9\u5bb9\u91cf\u4e3a\u65e7\u6570\u7ec4\u76841.5\u500d]\\na7 --&gt; a8{\u6269\u5bb9\u5bb9\u91cf\u4e0d\u591f?}\\na8 --&gt; |\u662f| a9[\u7a7a\u8bbe\u4e3a10\u5176\u4f59\u8bbe\u4e3asize+1]\\na8 --&gt; |\u5426| a10{\u8d85\u8fc7Integer.MAX_VALUE - 8?}\\na9 --&gt; a10\\na10 --&gt; |\u662f| a11{size+1\u6ea2\u51fa?}\\na10 --&gt; |\u5426| a6[\u6839\u636e\u6269\u5bb9\u5bb9\u91cf\u62f7\u8d1d\u751f\u6210\u65b0\u6570\u7ec4]\\na11 --&gt; |\u662f| a13[\u629b\u51faOOM\u5f02\u5e38]\\na11 --&gt; |\u5426| a12[\u6269\u5bb9\u5c3a\u5bf8\u53d6Integer.MAX_VALUE\u548cMAX_ARRAY_SIZE\u5927\u8005]\\na12 --&gt; a6\\na6 --&gt; a14[size++ return true]\\nstyle a1 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a2 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a3 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a4 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a5 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a6 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a7 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a8 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a9 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a10 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a11 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a12 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a13 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle a14 fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\n\");<\/script><\/div>\n<ul>\n<li>\u6e90\u7801\u89e3\u6790<\/li>\n<\/ul>\n<pre lang=\"java\">\n    private int size;\n    transient Object[] elementData;\n    private static final Object[] EMPTY_ELEMENTDATA = {};\n    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};\n    protected transient int modCount = 0;\n    private static final int DEFAULT_CAPACITY = 10;\n    private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;\n\n    \/\/ \u65e0\u53c2\u6784\u9020\n    public ArrayList() {\n        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;\n    }\n\n    \/\/ \u6709\u53c2\u6784\u9020\n    public ArrayList(int initialCapacity) {\n        if (initialCapacity > 0) {\n            this.elementData = new Object[initialCapacity];\n        } else if (initialCapacity == 0) {\n            this.elementData = EMPTY_ELEMENTDATA;\n        } else {\n            throw new IllegalArgumentException(\"Illegal Capacity: \" + initialCapacity);\n        }\n    }\n\n    \/\/ \u6dfb\u52a0\u6269\u5145\n    public boolean add(E e) {\n        ensureCapacityInternal(size + 1);\n        elementData[size++] = e;\n        return true;\n    }\n\n    \/\/ minCapacity = size + 1\n    private void ensureCapacityInternal(int minCapacity) {\n        ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));\n    }\n\n    \/\/ \u7a7a\u6570\u7ec4\u8fd4\u56de10\uff0c\u5426\u5219\u8fd4\u56desize + 1\n    private static int calculateCapacity(Object[] elementData, int minCapacity) {\n        if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {\n            return Math.max(DEFAULT_CAPACITY, minCapacity);\n        }\n        return minCapacity;\n    }\n\n    \/\/ \u5bb9\u91cf\u4e0d\u591f\u8ba1\u7b97\u5c3a\u5bf8\u6269\u5bb9\n    private void ensureExplicitCapacity(int minCapacity) {\n        modCount++;\n        \/\/ \u6ea2\u51fa\u540e\u7ed3\u679c>0\u4ecd\u53ef\u8fdb\u5165grow\u65b9\u6cd5\n        if (minCapacity - elementData.length > 0)\n            grow(minCapacity);\n    }\n\n    \/\/ \u6269\u5145\u5bb9\u91cf\n    private void grow(int minCapacity) {\n        \/\/ overflow-conscious code\n        int oldCapacity = elementData.length;\n        \/\/ \u6269\u5145\u4e3a\u539f\u6765\u76841.5\u500d\uff0c\u6ea2\u51fa\u4eceoldCapacity=1796357452\u5f00\u59cb\n        int newCapacity = oldCapacity + (oldCapacity >> 1);\n        \/\/ \u6269\u5bb9\u5bb9\u91cf\u4e0d\u591f\uff08\u7a7a\u6570\u7ec4newCapacity=0\uff09\uff0c\u6269\u5bb9\u540e\u6ea2\u51fa\u7ed3\u679c>0\n        if (newCapacity - minCapacity < 0)\n            newCapacity = minCapacity;\n        \/\/ \u6269\u5bb9\u5bb9\u91cf\u8d85\u8fc7MAX_ARRAY_SIZE\uff08\u5305\u542b\u6ea2\u51fa\uff09\u8c03\u7528hugeCapacity\u4f20\u5165size+1\n        if (newCapacity - MAX_ARRAY_SIZE > 0)\n            newCapacity = hugeCapacity(minCapacity);\n        \/\/ minCapacity is usually close to size, so this is a win:\n        elementData = Arrays.copyOf(elementData, newCapacity);\n    }\n\n    \/\/ size+1\u6ea2\u51fa\u629b\u5f02\u5e38\uff0c\u5426\u5219\u6269\u5145\u66f4\u5927\u503c\n    private static int hugeCapacity(int minCapacity) {\n        if (minCapacity < 0) \/\/ overflow\n            throw new OutOfMemoryError();\n        return (minCapacity > MAX_ARRAY_SIZE) ?\n                Integer.MAX_VALUE :\n                MAX_ARRAY_SIZE;\n    }\n<\/pre>\n<h3>LinkedList\u5b50\u7c7b<\/h3>\n<h4>\u7ee7\u627f\u7ed3\u6784<\/h4>\n<div class=\"mermaid mermaid-diagram no-emojify\"><script type=\"text\/javascript\">document.write(\"graph BT\\ncol[&lt;&lt;interface&gt;&gt;Collection&lt;T&gt;] --&gt; |extends| itb[&lt;&lt;interface&gt;&gt;Iterable&lt;T&gt;]\\nlist[&lt;&lt;interface&gt;&gt;List] --&gt; |extends| col\\nqueue[&lt;&lt;interface&gt;&gt;Queue&lt;E&gt;] --&gt; |extends| col\\ndeque[&lt;&lt;interface&gt;&gt;Deque&lt;E&gt;] --&gt; |extends| queue\\nac[\\\"{abstract}AbstractCollection\\\"] -.-&gt; |implements| col\\naal[\\\"{abstract}AbstractList\\\"] --&gt; |extends| ac\\nasl[\\\"{abstract}AbstractSequentialList\\\"] --&gt; |extends| aal\\naal -.-&gt; |implements| list\\nll[LinkedList] --&gt; |extends| asl\\nll -.-&gt; |implements| deque\\nstyle itb fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle ac fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle col fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle aal fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle asl fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle list fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle ll fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle queue fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle deque fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\n\");<\/script><\/div>\n<h4>\u6e90\u7801\u5206\u6790[JDK1.8]<\/h4>\n<p>LinkedList\u662f\u94fe\u8868\u7684\u5c01\u88c5<br \/>\n\u65e0\u53c2\u6784\u9020\u65e0\u64cd\u4f5c\uff0c\u6269\u5145\u65f6\u53ea\u5728\u5c3e\u90e8\u6dfb\u52a0<\/p>\n<pre lang=\"java\">\n    \/\/ \u5c3e\u8282\u70b9\n    transient Node<E> last;\n\n    \/\/ \u6784\u9020\u65b9\u6cd5\n    public LinkedList() { }\n\n    \/\/ \u8868\u5c3e\u6dfb\u52a0\u5143\u7d20\n    public boolean add(E e) {\n        linkLast(e);\n        return true;\n    }\n\n    \/\/ \u4fdd\u5b58\u6700\u540e\u4e00\u4e2a\u7ed3\u70b9\u63d0\u5347\u63d2\u5165\u6027\u80fd\n    void linkLast(E e) {\n        final Node<E> l = last;\n        final Node<E> newNode = new Node<>(l, e, null);\n        last = newNode;\n        if (l == null)\n            first = newNode;\n        else\n            l.next = newNode;\n        size++;\n        modCount++;\n    }\n<\/pre>\n<h3>Vector\u5b50\u7c7b<\/h3>\n<h4>\u7ee7\u627f\u7ed3\u6784<\/h4>\n<p>\u4e0eArrayList\u5b8c\u5168\u76f8\u540c<\/p>\n<div class=\"mermaid mermaid-diagram no-emojify\"><script type=\"text\/javascript\">document.write(\"graph BT\\ncol[&lt;&lt;interface&gt;&gt;Collection&lt;T&gt;] --&gt; |extends| itb[&lt;&lt;interface&gt;&gt;Iterable&lt;T&gt;]\\nac[\\\"{abstract}AbstractCollection\\\"] -.-&gt; |implements| col\\naal[\\\"{abstract}AbstractList\\\"] --&gt; |extends| ac\\nal[Vector] --&gt; |extends| aal\\nlist[&lt;&lt;interface&gt;&gt;List] --&gt; |extends| col\\nal -.-&gt;|implements| list\\nstyle itb fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle ac fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle col fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle aal fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle list fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle al fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\n\");<\/script><\/div>\n<h4>\u6e90\u7801\u5206\u6790[JDK1.8]<\/h4>\n<p>Vector\u540cArrayList\u7c7b\u4f3c\u662f\u5bf9\u8c61\u6570\u7ec4\u7684\u5c01\u88c5<br \/>\nVector\u52a0\u5165\u4e86\u7ebf\u7a0b\u5b89\u5168\u673a\u5236\u4f46\u4f1a\u6709\u6027\u80fd\u4e0b\u964d<br \/>\nVector\u9ed8\u8ba4\u6269\u5bb9\u7b56\u7565\u540cArrayList\uff0c\u6539\u4e3a\u6269\u5bb92\u500d<\/p>\n<pre lang=\"java\">\n    \/\/ \u65e0\u53c2\u6784\u9020\u9ed8\u8ba4\u521d\u59cb\u5316\u5bb9\u91cf\u4e3a10\n    public Vector() {\n        this(10);\n    }\n\n    \/\/ \u6307\u5b9a\u5bb9\u91cf\u7684\u6709\u53c2\u6784\u9020\u65b9\u6cd5\n    public Vector(int initialCapacity) {\n        this(initialCapacity, 0);\n    }\n\n    \/\/ \u521d\u59cb\u5316\u5c01\u88c5\u5bf9\u8c61\u6570\u7ec4\n    public Vector(int initialCapacity, int capacityIncrement) {\n        super();\n        if (initialCapacity < 0)\n            throw new IllegalArgumentException(\"Illegal Capacity: \"+\n                                               initialCapacity);\n        this.elementData = new Object[initialCapacity];\n        this.capacityIncrement = capacityIncrement;\n    }\n\n    \/\/ \u6dfb\u52a0\u6269\u5bb9\n    public synchronized boolean add(E e) {\n        modCount++;\n        ensureCapacityHelper(elementCount + 1);\n        elementData[elementCount++] = e;\n        return true;\n    }\n\n    \/\/ \u5bb9\u91cf\u589e\u52a0\u5219\u6269\u5bb9\n    private void ensureCapacityHelper(int minCapacity) {\n        \/\/ overflow-conscious code\n        if (minCapacity - elementData.length > 0)\n            grow(minCapacity);\n    }\n\n    \/\/ \u6307\u5b9a\u589e\u91cf\u6309\u589e\u91cf\u6269\uff0c\u5426\u5219\u6269\u5bb9\u4e3a\u65e7\u5bf9\u8c61\u6570\u7ec4\u957f\u5ea6\u7684\u4e24\u500d\n    private void grow(int minCapacity) {\n        \/\/ overflow-conscious code\n        int oldCapacity = elementData.length;\n        int newCapacity = oldCapacity + ((capacityIncrement > 0) ?\n                                         capacityIncrement : oldCapacity);\n        if (newCapacity - minCapacity < 0)\n            newCapacity = minCapacity;\n        if (newCapacity - MAX_ARRAY_SIZE > 0)\n            newCapacity = hugeCapacity(minCapacity);\n        elementData = Arrays.copyOf(elementData, newCapacity);\n    }\n\n    \/\/ \u540cArrayList\n    private static int hugeCapacity(int minCapacity) {\n        if (minCapacity < 0) \/\/ overflow\n            throw new OutOfMemoryError();\n        return (minCapacity > MAX_ARRAY_SIZE) ?\n            Integer.MAX_VALUE :\n            MAX_ARRAY_SIZE;\n    }\n<\/pre>\n<h2>Set\u63a5\u53e3 Java.util.Set<\/h2>\n<p>Set\u63a5\u53e3\u4e0d\u5141\u8bb8\u4fdd\u5b58\u91cd\u590d\u5143\u7d20\uff0c\u5141\u8bb8\u4fdd\u5b58null\uff0c\u542b\u6709Collection\u63a5\u53e3\u6240\u6709\u65b9\u6cd5\u5e76\u4f5c\u51fa\u6269\u5145\uff0cSet\u5b50\u7c7b\u5305\u62ecHashSet\uff0cTreeSet\uff0cLinkedHashSet<br \/>\nSet\u63a5\u53e3\u4e2d\u65e0List\u63a5\u53e3get\u65b9\u6cd5\uff0c\u65e0\u6cd5\u5b9e\u73b0\u6307\u5b9a\u7d22\u5f15\u6570\u636e\u83b7\u53d6<\/p>\n<h4>Set\u4f7f\u7528<\/h4>\n<pre lang=\"java\">\nstatic <E> Set<E> of (E e1, E e2) \/\/ JDK1.9\n<\/pre>\n<pre><code class=\"language-java \">    \/\/ \u91cd\u590d\u6570\u636e\u62a5\u5f02\u5e38\n    Set&lt;String&gt; set = Set.of(\"test\",\"test\",\"hello\",\"world\");\n    all.forEach(System.out::println);\n<\/code><\/pre>\n<p>Set\u96c6\u5408\u901a\u8fc7of\u65b9\u6cd5\u6784\u9020\u4e0d\u5141\u8bb8\u542b\u91cd\u590d\u5143\u7d20\uff0c\u5426\u5219\u62a5ClassCastException\uff0c\u4e00\u822c\u901a\u8fc7\u5b50\u7c7b\u5b9e\u4f8b\u5316\u6784\u9020<\/p>\n<pre><code class=\"language-java \">    Set&lt;String&gt; set = new HashSet&lt;&gt;();\n    set.add(null);\n    set.add(\"hello\");\n    set.add(\"hello\");\n    System.out.print(set); \/\/ \u53bb\u91cd\u4e14\u65e0\u5e8f\n<\/code><\/pre>\n<h3>HashSet\u5b50\u7c7b<\/h3>\n<p>\u6570\u636e\u53bb\u91cd\u65e0\u5e8f\u4fdd\u5b58<\/p>\n<h4>\u7ee7\u627f\u7ed3\u6784<\/h4>\n<div class=\"mermaid mermaid-diagram no-emojify\"><script type=\"text\/javascript\">document.write(\"graph BT\\nac[\\\"{abstract}AbstractCollection\\\"] -.-&gt; |implements| col[&lt;&lt;interface&gt;&gt;Collection&lt;T&gt;]\\naal[\\\"{abstract}AbstractSet\\\"] --&gt; |extends| ac\\nal[HashSet] --&gt; |extends| aal\\nlist[&lt;&lt;interface&gt;&gt;Set&lt;T&gt;] --&gt; |extends| col\\nal -.-&gt; |implements| list\\nlist -.-&gt; |dependency| hsm[HashMap]\\nhsm -.-&gt; |implements| map[&lt;&lt;interface&gt;&gt;Map&lt;K,V&gt;]\\nstyle ac fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle col fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle aal fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle list fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle al fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle hsm fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle map fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\n\");<\/script><\/div>\n<h4>\u6e90\u7801\u5206\u6790[JDK1.8]<\/h4>\n<p>HashSet\u5e95\u5c42\u5c01\u88c5\u4e3aHashMap\uff0c\u9ed8\u8ba4\u521d\u59cb\u5316\u5bb9\u91cf\u4e3a16\uff0c\u5230\u8fbe\u5bb9\u91cf75%\u65f6\u6269\u5bb9<\/p>\n<h3>TreeSet\u5b50\u7c7b<\/h3>\n<p>\u6570\u636e\u53bb\u91cd\u6709\u5e8f\u4fdd\u5b58<\/p>\n<h4>\u7ee7\u627f\u7ed3\u6784<\/h4>\n<div class=\"mermaid mermaid-diagram no-emojify\"><script type=\"text\/javascript\">document.write(\"graph BT\\nac[\\\"{abstract}AbstractCollection\\\"] -.-&gt; |implements| col[&lt;&lt;interface&gt;&gt;Collection&lt;T&gt;]\\nset[&lt;&lt;interface&gt;&gt;Set&lt;T&gt;] --&gt; |extends| col\\nas[\\\"{abstract}AbstractSet\\\"] --&gt; |extends| ac\\nas -.-&gt; |implements| set\\nss[&lt;&lt;interface&gt;&gt;SortedSet&lt;T&gt;] --&gt; |extends| set\\nns[&lt;&lt;interface&gt;&gt;NavigabledSet&lt;T&gt;] --&gt; |extends| ss\\nts[TreeSet] -.-&gt; |implements| set\\nts -.-&gt; |implements| ns\\nts --&gt; |extends| as\\nstyle ac fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle col fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle set fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle as fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle ss fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle ns fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\nstyle ts fill:#FFFFFF,stroke:#CCCCCC,stroke-width:2px\\n\");<\/script><\/div>\n<h4>\u81ea\u5b9a\u4e49\u7c7b\u6392\u5e8f<\/h4>\n<p>TreeSet\u4fdd\u5b58\u81ea\u5b9a\u4e49\u7c7b\u5bf9\u8c61\u9700\u8981\u5b9e\u73b0<strong>Comparable\u63a5\u53e3\uff0c\u8986\u5199compareTo\u65b9\u6cd5<\/strong><br \/>\n\u8986\u5199compareTo\u65b9\u6cd5\u9700\u8981\u6bd4\u8f83\u7c7b\u4e2d<strong>\u6240\u6709\u5c5e\u6027<\/strong>\uff0c\u5426\u5219\u5c5e\u6027\u76f8\u540c\u4f1a\u5bfc\u81f4\u9519\u8bef\u53bb\u91cd<br \/>\n\u6dfb\u52a0null\u5143\u7d20\u9700\u8981\u5728Comparable \/ Comparator\u63a5\u53e3\u4e2d\u52a0\u5165\u903b\u8f91\uff0c\u5426\u5219\u62a5\u7a7a\u6307\u9488<\/p>\n<pre lang=\"java\">\npublic TreeSet ()                                   \u9ed8\u8ba4Comparable\u63a5\u53e3\u6392\u5e8f\npublic TreeSet (Comparator<? super E> comparator)   \u4f7f\u7528Comparator\u63a5\u53e3\u6392\u5e8f\npublic int compareTo( NumberSubClass referenceName )    \u8fd4\u56de\u503c<-1\uff0c=0\uff0c>1\n<\/pre>\n<pre><code class=\"language-java \">    class Test implements Comparable&lt;Test&gt; {\n        int num;\n        String label;\n\n        public Test(int num, String label){\n            this.num = num;\n            this.label = label;\n        }\n\n        @Override\n        public String toString() {\n            return \"num = \" + this.num\n                +\" label = \"+ this.label;\n        }\n\n        @Override\n        public int compareTo(Test o) {\n            if (this.num &lt; o.num) {\n                return -1;\n            } else if (this.num == o.num) {\n                return 0;\n            } else {\n                return 1;\n            }\n        }\n    }\n\n    public static void main(String[] argv) {\n        Set&lt;Test&gt; set = new TreeSet&lt;&gt;();\n        set.add(new Test(2, \"Two\"));\n        set.add(new Test(3, \"Three\"));\n        set.add(new Test(1, \"Four\"));\n        set.add(new Test(1, \"One\"));\n        System.out.println(set);\n    }\n<\/code><\/pre>\n<pre><code>[num = 1 label = One, num = 2 label = Two, num = 3 label = Three]\n<\/code><\/pre>\n<p>\u503c\u76f8\u7b49\u65f6\u52a0\u5165String\u7c7b\u578b\u6bd4\u8f83\uff0cString\u7c7b\u5df2\u8986\u5199compareTo\u65b9\u6cd5<\/p>\n<pre><code class=\"language-java \">    @Override\n    public int compareTo(Test o) {\n        if (this.num &lt; o.num) {\n            return -1;\n        } else if (this.num &gt; o.num) {\n            return 1;\n        } else {\n            return this.label.compareTo(o.label);\n        }\n    }\n<\/code><\/pre>\n<pre><code>[num = 1 label = Four, num = 1 label = One, num = 2 label = Two, num = 3 label = Three]\n<\/code><\/pre>\n<h3>\u96c6\u5408\u81ea\u5b9a\u4e49\u7c7b\u53bb\u91cd<\/h3>\n<p>TreeSet\u5b50\u7c7b\u5b9e\u73b0SortedSet\uff0cNavigabledSet\u548cComparable\u63a5\u53e3\uff0c\u901a\u8fc7compareTo\u65b9\u6cd5return 0\u53bb\u91cd<br \/>\n\u5176\u4ed6\u96c6\u5408\u5b50\u7c7b\u65e0\u6cd5\u901a\u8fc7Comparable\u63a5\u53e3\u53bb\u91cd\uff0c\u7c7b\u4e2d\u8986\u5199Object\u7c7b\u4e2d\u7684hashCode()\u548cequals()\u65b9\u6cd5\u53bb\u91cd<br \/>\n\u5148\u8ba1\u7b97\u548c\u6bd4\u8f83hashCode\uff0c\u82e5\u76f8\u540c\u5219\u4f7f\u7528equals\u6bd4\u8f83\u5185\u5bb9\uff0c\u907f\u514d\u4e0e\u96c6\u5408\u4e2d\u6240\u6709\u5143\u7d20equals\u4e00\u4e00\u6bd4\u8f83\u63d0\u9ad8\u6027\u80fd<\/p>\n<pre lang=\"java\">\n    public static int hash(Object... values) {\n        return Arrays.hashCode(values);\n    }\n\n    \/\/ \u901a\u8fc7hash\u7b97\u6cd5\u8ba1\u7b97\u51fa\u552f\u4e00\u5730\u5740\n    public static int hashCode(Object a[]) {\n        if (a == null)\n            return 0;\n\n        int result = 1;\n\n        for (Object element : a)\n            result = 31 * result + (element == null ? 0 : element.hashCode());\n\n        return result;\n    }\n<\/pre>\n<pre><code class=\"language-java \">    class Test{\n        int num;\n        String label;\n\n        public Test(int num, String label){\n            this.num = num;\n            this.label = label;\n        }\n\n        @Override\n        public boolean equals(Object o) {\n            if (this == o) return true;\n            if (o == null || getClass() != o.getClass()) return false;\n            Test test = (Test) o;\n            return num == test.num &amp;&amp; Objects.equals(label, test.label);\n        }\n\n        @Override\n        public int hashCode() {\n            return Objects.hash(num, label);\n        }\n\n        @Override\n        public String toString() {\n            return \"num = \" + this.num +\" label = \"+ this.label;\n        }\n    }\n\n    public static void main(String[] argv) {\n        Set&lt;Test&gt; set = new HashSet&lt;&gt;();\n        set.add(new Main().new Test(2, \"Two\"));\n        set.add(new Main().new Test(3, \"Three\"));\n        set.add(new Main().new Test(1, \"One\"));\n        set.add(new Main().new Test(1, \"One\"));\n        System.out.println(set);\n    }\n<\/code><\/pre>\n<pre><code>[num = 1 label = One, num = 2 label = Two, num = 3 label = Three]\n<\/code><\/pre>\n<h4>\u96c6\u5408\u8f93\u51fa<\/h4>\n<p>\u96c6\u5408\u8f93\u51fa\u56db\u79cd\u65b9\u5f0f\uff1aIterator\u3001ListIterator\u3001Enumeration\u3001foreach<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7c7b\u96c6\u4e94\u5927\u6838\u5fc3\u63a5\u53e3Collection\u3001List\u3001Set\u3001Map\u3001Iterable\uff0c\u5b9e\u73b0\u4e86\u57fa\u7840\u7684\u52a8\u6001\u957f\u5ea6\u7684\u6570\u636e\u7ed3 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/139.196.114.170\/?p=531\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">\u201c[java\u7279\u6027]\u96c6\u5408\u7c7b\uff1aCollection\uff0cList\uff0cSet\uff0cMap\u201d<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[25],"tags":[4,17,19,18],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/139.196.114.170\/index.php?rest_route=\/wp\/v2\/posts\/531"}],"collection":[{"href":"http:\/\/139.196.114.170\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/139.196.114.170\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/139.196.114.170\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/139.196.114.170\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=531"}],"version-history":[{"count":55,"href":"http:\/\/139.196.114.170\/index.php?rest_route=\/wp\/v2\/posts\/531\/revisions"}],"predecessor-version":[{"id":831,"href":"http:\/\/139.196.114.170\/index.php?rest_route=\/wp\/v2\/posts\/531\/revisions\/831"}],"wp:attachment":[{"href":"http:\/\/139.196.114.170\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=531"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/139.196.114.170\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=531"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/139.196.114.170\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}