From d62bcfbb0eda50609723f58345f53753b5b98543 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Wed, 21 Feb 2018 21:05:32 +0800 Subject: [PATCH] auto commit --- notes/Java 集å�ˆ.md | 152 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 notes/Java 集å�ˆ.md diff --git a/notes/Java 集å�ˆ.md b/notes/Java 集å�ˆ.md new file mode 100644 index 00000000..b6d0616b --- /dev/null +++ b/notes/Java 集å�ˆ.md @@ -0,0 +1,152 @@ + +* [¸ÅÀÀ](#¸ÅÀÀ) + * [1. List](#1-list) + * [2. Set](#2-set) + * [3. Queue](#3-queue) + * [4. Map](#4-map) + * [5. Java 1.0/1.1 ÈÝÆ÷](#5-java-1011-ÈÝÆ÷) +* [¼¯ºÏÖеÄÉè¼ÆÄ£Ê½](#¼¯ºÏÖеÄÉè¼ÆÄ£Ê½) + * [1. µü´úÆ÷ģʽ](#1-µü´úÆ÷ģʽ) + * [2. ÊÊÅäÆ÷ģʽ](#2-ÊÊÅäÆ÷ģʽ) +* [É¢ÁÐ](#É¢ÁÐ) +* [Ô´Âë·ÖÎö](#Ô´Âë·ÖÎö) + * [1. ArraList](#1-arralist) + * [2. LinkedList](#2-linkedlist) + * [3. Vector](#3-vector) + * [4. HashMap](#4-hashmap) + * [5. LinkedHashMap](#5-linkedhashmap) + * [6. ConcurrentHashMap](#6-concurrenthashmap) +* [²Î¿¼×ÊÁÏ](#²Î¿¼×ÊÁÏ) + + +# ¸ÅÀÀ + +![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/ebf03f56-f957-4435-9f8f-0f605661484d.jpg) + +ÈÝÆ÷Ö÷Òª°üÀ¨ Collection ºÍ Map Á½ÖÖ£¬Collection ÓÖ°üº¬ÁË List¡¢Set ÒÔ¼° Queue¡£ + +## 1. List + +- ArrayList£ºÊ¹ÓÃÊý×é·½·¨£¬Ö§³ÖËæ»ú·ÃÎÊ£» + +- LinkedList£ºÊ¹ÓÃÁ´±íʵÏÖ£¬Ö»ÄÜ˳Ðò·ÃÎÊ£¬µ«ÊÇ¿ÉÒÔ¿ìËÙµØÔÚÖмä²åÈëºÍɾ³ýÔªËØ¡£²»½öÈç´Ë£¬LinkedList »¹¿ÉÒÔÓÃ×÷Õ»¡¢¶ÓÁкÍË«¶Ë¶ÓÁС£ + +## 2. Set + +- HashSet£ºÊ¹Óà Hash ʵÏÖ£¬Ö§³Ö¿ìËÙ²éÕÒ£¬µ«ÊÇʧȥÓÐÐòÐÔ£» + +- TreeSet£ºÊ¹ÓÃÊ÷ʵÏÖ£¬±£³ÖÓÐÐò£¬µ«ÊDzéÕÒЧÂʲ»Èç HashSet£» + +- LinkedListHashSet£º¾ßÓÐ HashSet µÄ²éÕÒЧÂÊ£¬ÇÒÄÚ²¿Ê¹ÓÃÁ´±íά»¤ÔªËصIJåÈë˳Ðò£¬Òò´Ë¾ßÓÐÓÐÐòÐÔ¡£ + +## 3. Queue + +Ö»ÓÐÁ½¸öʵÏÖ£ºLinkedList ºÍ PriorityQueue£¬ÆäÖÐ LinkedList Ö§³ÖË«Ïò¶ÓÁС£ + +## 4. Map + +- HashMap£ºÊ¹Óà Hash ʵÏÖ + +- LinkedHashMap£º±£³ÖÓÐÐò£¬Ë³ÐòΪ²åÈë˳Ðò»òÕß×î½ü×îÉÙʹÓã¨LRU£©Ë³Ðò + +- TreeMap£º»ùÓÚºìºÚÊ÷ʵÏÖ + +- ConcurrentHashMap£ºḬ̈߳²È« Map£¬²»É漰ͬ²½¼ÓËø + +## 5. Java 1.0/1.1 ÈÝÆ÷ + +¶ÔÓھɵÄÈÝÆ÷£¬ÎÒÃǾö²»Ó¦¸ÃʹÓÃËüÃÇ£¬Ö»ÐèÒª¶ÔËüÃǽøÐÐÁ˽⡣ + +- Vector£ººÍ ArrayList ÀàËÆ£¬µ«ËüÊÇḬ̈߳²È«µÄ + +- HashTable£ººÍ HashMap ÀàËÆ£¬µ«ËüÊÇḬ̈߳²È«µÄ + +# ¼¯ºÏÖеÄÉè¼ÆÄ£Ê½ + +## 1. µü´úÆ÷ģʽ + +´Ó¸ÅÀÀͼ¿ÉÒÔ¿´µ½£¬Ã¿¸ö¼¯ºÏÀà¶¼ÓÐÒ»¸ö Iterator ¶ÔÏ󣬿ÉÒÔͨ¹ýÕâ¸öµü´úÆ÷¶ÔÏóÀ´±éÀú¼¯ºÏÖеÄÔªËØ¡£ + +[Java Öеĵü´úÆ÷ģʽ](https://github.com/CyC2018/InterviewNotes/blob/master/notes/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.md#92-java-%E5%86%85%E7%BD%AE%E7%9A%84%E8%BF%AD%E4%BB%A3%E5%99%A8) + +## 2. ÊÊÅäÆ÷ģʽ + +java.util.Arrays#asList() ¿ÉÒÔ°ÑÊý×éÀàÐÍת»»Îª List ÀàÐÍ¡£ + +```java + List list = Arrays.asList(1, 2, 3); + int[] arr = {1, 2, 3}; + list = Arrays.asList(arr); +``` + +# É¢ÁÐ + +ʹÓà hasCode() À´·µ»ØÉ¢ÁÐÖµ£¬Ê¹ÓõÄÊǶÔÏóµÄµØÖ·¡£ + +¶ø equals() ÊÇÓÃÀ´ÅжÏÁ½¸ö¶ÔÏóÊÇ·ñÏàµÈµÄ£¬ÏàµÈµÄÁ½¸ö¶ÔÏóÉ¢ÁÐÖµÒ»¶¨ÒªÏàͬ£¬µ«ÊÇÉ¢ÁÐÖµÏàͬµÄÁ½¸ö¶ÔÏó²»Ò»¶¨ÏàµÈ¡£ + +ÏàµÈ±ØÐëÂú×ãÒÔÏÂÎå¸öÐÔÖÊ£º + +1. ×Ô·´ÐÔ +2. ¶Ô³ÆÐÔ +3. ´«µÝÐÔ +4. Ò»ÖÂÐÔ£¨¶à´Îµ÷Óà x.equals(y)£¬½á¹û²»±ä£© +5. ¶ÔÈκβ»ÊÇ null µÄ¶ÔÏó x µ÷Óà x.equals(nul) ½á¹û¶¼Îª false + +# Ô´Âë·ÖÎö + +½¨ÒéÏÈÔĶÁ [Ëã·¨-²éÕÒ](https://github.com/CyC2018/InterviewNotes/blob/master/notes/%E7%AE%97%E6%B3%95.md#%E7%AC%AC%E4%B8%89%E7%AB%A0-%E6%9F%A5%E6%89%BE) ²¿·Ö£¬¶Ô¼¯ºÏÀàÔ´ÂëµÄÀí½âÓкܴó°ïÖú¡£ + + +Ô´ÂëÏÂÔØ£º[OpenJDK 1.7](http://download.java.net/openjdk/jdk7) + +ÔÚÏßÔĶÁ£º[7u40-b43](http://grepcode.com/snapshot/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/) + +## 1. ArraList + +- ʹÓÃÊý×éʵÏÖ + +- ¾ßÓж¯Ì¬À©ÈÝÌØÐÔ£¬Ä¬ÈÏÈÝÁ¿Îª 10£¬²¢ÇÒÔÚÌí¼ÓÔªËØÊ±Ê¹Óà ensureCapacity() ±£Ö¤ÈÝÁ¿×ã¹»£¬Èç¹ûÈÝÁ¿²»¹»£¬ÔòÀ©ÈÝΪԭʼÈÝÁ¿µÄ 1.5 times + 1. + +[ArraList.java](https://github.com/CyC2018/InterviewNotes/blob/master/notes/src/ArrayList.java) + + +## 2. LinkedList + +- LinkedList ÊÇ»ùÓÚË«ÏòÑ­»·Á´±íʵÏÖ£¬Í·½áµã²»°üº¬Êý¾Ý¡£ + +![](https://github.com/CyC2018/InterviewNotes/blob/master/pics/d40c90ad-7943-4574-98a8-8027e5523d53.jpg) + +- Á´±íµÄË÷Òý²Ù×÷ÐèÒª±éÀúÁ´±í£¬LinkedList µÄ Entry entry(int index) ·½·¨¾ÍÊÇË÷Òý²Ù×÷£¬µ«ÊÇËüÓÐÒ»¸öÓÅ»¯µÄ²Ù×÷£¬¾ÍÊÇÈç¹û index ÔÚÁ´±íÇ°Ãæ£¬ÄÇô¾Í´ÓÍ·Íùºó±éÀú£»Èç¹ûÔÚºóÃæ¾Í´ÓºóÍùǰ±éÀú¡£ + +[LinkedList.java](https://github.com/CyC2018/InterviewNotes/blob/master/notes/src/LinkedList.java) + +## 3. Vector + +Vector µÄºÜ¶àʵÏÖ·½·¨¶¼¼ÓÈëÁËͬ²½Óï¾ä£¬Òò´ËÊÇḬ̈߳²È«µÄ¡£ + +[Vector.java](https://github.com/CyC2018/InterviewNotes/blob/master/notes/src/Vector.java) + +## 4. HashMap + +- ʹÓÃÀ­Á´·¨À´½â¾ö³åÍ»¡£ + +[Vector.java](https://github.com/CyC2018/InterviewNotes/blob/master/notes/src/HashMap.java) + + +## 5. LinkedHashMap + +- ʹÓÃË«ÏòÁ´±íÀ´±£´æ²åÈëµÄ½Úµã£¬´Ó¶øÎ¬»¤Ò»¸ö²åÈë˳Ðò¡£ +- ×¢ÒâÔ´ÂëÖеÄaccessOrder±ê־룬µ±Ëüfalseʱ£¬±íʾ˫ÏòÁ´±íÖеÄÔªËØ°´ÕÕEntry²åÈëLinkedHashMapµ½ÖеÄÏȺó˳ÐòÅÅÐò£¬¼´Ã¿´Îputµ½LinkedHashMapÖеÄEntry¶¼·ÅÔÚË«ÏòÁ´±íµÄβ²¿£¬ÕâÑù±éÀúË«ÏòÁ´±íʱ£¬EntryµÄÊä³ö˳Ðò±ãºÍ²åÈëµÄ˳ÐòÒ»Ö£¬ÕâÒ²ÊÇĬÈϵÄË«ÏòÁ´±íµÄ´æ´¢Ë³Ðò£»µ±ËüΪtrueʱ£¬±íʾ˫ÏòÁ´±íÖеÄÔªËØ°´ÕÕ·ÃÎʵÄÏȺó˳ÐòÅÅÁУ¬¿ÉÒÔ¿´µ½£¬ËäÈ»Entry²åÈëÁ´±íµÄ˳ÐòÒÀÈ»Êǰ´ÕÕÆäputµ½LinkedHashMapÖеÄ˳Ðò£¬µ«putºÍget·½·¨¾ùÓе÷ÓÃrecordAccess·½·¨£¨put·½·¨ÔÚkeyÏàͬ£¬¸²¸ÇÔ­ÓеÄEntryµÄÇé¿öϵ÷ÓÃrecordAccess·½·¨£©£¬¸Ã·½·¨ÅжÏaccessOrderÊÇ·ñΪtrue£¬Èç¹ûÊÇ£¬Ôò½«µ±Ç°·ÃÎʵÄEntry£¨put½øÀ´µÄEntry»òget³öÀ´µÄEntry£©ÒƵ½Ë«ÏòÁ´±íµÄβ²¿£¨key²»Ïàͬʱ£¬putÐÂEntryʱ£¬»áµ÷ÓÃaddEntry£¬Ëü»áµ÷ÓÃcreatEntry£¬¸Ã·½·¨Í¬Ñù½«Ð²åÈëµÄÔªËØ·ÅÈ뵽˫ÏòÁ´±íµÄβ²¿£¬¼È·ûºÏ²åÈëµÄÏȺó˳Ðò£¬ÓÖ·ûºÏ·ÃÎʵÄÏȺó˳Ðò£¬ÒòΪÕâʱ¸ÃEntryÒ²±»·ÃÎÊÁË£©£¬·ñÔò£¬Ê²Ã´Ò²²»×ö¡£×îºó˵˵LinkedHashMapÊÇÈçºÎʵÏÖLRUµÄ¡£Ê×ÏÈ£¬µ±accessOrderΪtrueʱ£¬²Å»á¿ªÆô°´·ÃÎÊ˳ÐòÅÅÐòµÄģʽ£¬²ÅÄÜÓÃÀ´ÊµÏÖLRUËã·¨¡£ÎÒÃÇ¿ÉÒÔ¿´µ½£¬ÎÞÂÛÊÇput·½·¨»¹ÊÇget·½·¨£¬¶¼»áµ¼ÖÂÄ¿±êEntry³ÉΪ×î½ü·ÃÎʵÄEntry£¬Òò´Ë±ã°Ñ¸ÃEntry¼ÓÈëµ½ÁËË«ÏòÁ´±íµÄĩ⣨get·½·¨Í¨¹ýµ÷ÓÃrecordAccess·½·¨À´ÊµÏÖ£¬put·½·¨ÔÚ¸²¸ÇÒÑÓÐkeyµÄÇé¿öÏ£¬Ò²ÊÇͨ¹ýµ÷ÓÃrecordAccess·½·¨À´ÊµÏÖ£¬ÔÚ²åÈëеÄEntryʱ£¬ÔòÊÇͨ¹ýcreateEntryÖеÄaddBefore·½·¨À´ÊµÏÖ£©£¬ÕâÑù±ã°Ñ×î½üʹÓÃÁ˵ÄEntry·ÅÈëµ½ÁËË«ÏòÁ´±íµÄºóÃæ£¬¶à´Î²Ù×÷ºó£¬Ë«ÏòÁ´±íÇ°ÃæµÄEntry±ãÊÇ×î½üûÓÐʹÓõģ¬ÕâÑùµ±½Úµã¸öÊýÂúµÄʱºò£¬É¾³ýµÄ×îÇ°ÃæµÄEntry(headºóÃæµÄÄǸöEntry)±ãÊÇ×î½ü×îÉÙʹÓõÄEntry¡£ + +[LinkedHashMap.java](https://github.com/CyC2018/InterviewNotes/blob/master/notes/src/HashMap.java) + +## 6. ConcurrentHashMap + +[̽Ë÷ ConcurrentHashMap ¸ß²¢·¢ÐÔµÄʵÏÖ»úÖÆ](https://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/) + +[ConcurrentHashMap.java](https://github.com/CyC2018/InterviewNotes/blob/master/notes/src/HashMap.java) + +# ²Î¿¼×ÊÁÏ + +- Java ±à³Ì˼Ïë