### ArrayList And Vector List,å°±å¦å¾ååæç¤ºä¸æ ·,æ¯å ç´ çæåºå表ãå½æä»¬è®¨è®ºListæ¶ï¼å°å ¶ä¸Setä½å¯¹æ¯æ¯ä¸ä¸ªå¾å¥½çåæ³,Setéåä¸çå ç´ æ¯æ åºä¸å¯ä¸çã Listæ¥å£ä¸ä¸å ±å®ç°äºä¸ä¸ªç±»ï¼ArrayListï¼Vectorï¼LinkedListãLinkedListå°±ä¸å¤è¯´äºï¼å®ä¸è¬ä¸»è¦ç¨å¨ä¿ææ°æ®çæå ¥é¡ºåºçæ¶åãArrayListåVector齿¯ç¨æ°ç»å®ç°çï¼ä¸»è¦æè¿ä¹ä¸ä¸ªåºå«ï¼ 1ãVectoræ¯å¤çº¿ç¨å®å ¨çï¼èArrayList䏿¯ï¼è¿ä¸ªå¯ä»¥ä»æºç ä¸çåºï¼Vectorç±»ä¸çæ¹æ³å¾å¤æsynchronizedè¿è¡ä¿®é¥°ï¼è¿æ ·å°±å¯¼è´äºVector卿ç䏿 æ³ä¸ArrayListç¸æ¯ï¼ 2ãä¸¤ä¸ªé½æ¯éç¨ç线æ§è¿ç»ç©ºé´åå¨å ç´ ï¼ä½æ¯å½ç©ºé´ä¸è¶³çæ¶åï¼ä¸¤ä¸ªç±»çå¢å æ¹å¼æ¯ä¸åçï¼å¾å¤ç½å说Vectorå¢å åæ¥ç©ºé´çä¸åï¼ArrayListå¢å åæ¥ç©ºé´ç50%ï¼å ¶å®ä¹å·®ä¸å¤æ¯è¿ä¸ªææï¼ä¸è¿è¿æä¸ç¹ç¹é®é¢å¯ä»¥ä»æºç ä¸çåºï¼ä¸ä¼å¿ä»æºç ä¸åæã 3ãVectorå¯ä»¥è®¾ç½®å¢é¿å åï¼èArrayListä¸å¯ä»¥ï¼æå¼å§çè¿ä¸ªçæ¶åï¼ææ²¡çè§£ä»ä¹æ¯å¢éå åï¼ä¸è¿éè¿å¯¹æ¯ä¸ä¸ä¸¤ä¸ªæºç çè§£äºè¿ä¸ªï¼å çç两个类çæé æ¹æ³ï¼ ArrayListæä¸ä¸ªæé æ¹æ³ï¼å嫿¯ public ArrayList(int initialCapacity)//æé ä¸ä¸ªå ·ææå®åå§å®¹éç空å表ã public ArrayList()//æé ä¸ä¸ªåå§å®¹é为10ç空å表ã public ArrayList(Collection extends E> c)//æé ä¸ä¸ªå å«æå® collection çå ç´ çå表 Vectoræå个æé æ¹æ³ï¼ //ä½¿ç¨æå®çåå§å®¹éåçäºé¶ç容éå¢éæé ä¸ä¸ªç©ºåéã public Vector() //æé ä¸ä¸ªç©ºåéï¼ä½¿å ¶å 鍿°æ®æ°ç»ç大å°ï¼å ¶æ å容éå¢é为é¶ã public Vector(int initialCapacity) //æé ä¸ä¸ªå å«æå® collection ä¸çå ç´ çåé public Vector(Collection extends E> c) //ä½¿ç¨æå®çåå§å®¹éå容éå¢éæé ä¸ä¸ªç©ºçåé public Vector(int initialCapacity,int capacityIncrement) Vectoræ¯Arraylistå¤ä¸ä¸ªæé æ¹æ³ï¼æ²¡éå°±æ¯ public Vector(int initialCapacity,int capacityIncrement) è¿ä¸ªæé æ¹æ³ capacityIncrementå°±æ¯å®¹éå¢é¿ï¼å³åé¢æè¯´çå¢é¿å åï¼ArrayList䏿¯æ²¡æçã åè´´åºä¸¤ä¸ªç±»çæ·»å æºç åæä¸ï¼jdk1.7çæ¬ï¼ï¼ ArrayListç±»ï¼ public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; } private void ensureCapacityInternal(int minCapacity) { modCount++; // overflow-conscious code //å¦ææ·»å ä¸ä¸ªå ç´ ä¹åï¼æ°å®¹å¨ç大å°å¤§äºå®¹å¨ç容éï¼é£ä¹å°±æ æ³åå¼äºï¼éè¦æ©å ç©ºé´ if (minCapacity - elementData.length > 0) grow(minCapacity); } private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; //æ©å ç空é´å¢å 忥ç50%ï¼å³æ¯åæ¥ç1.5åï¼ int newCapacity = oldCapacity + (oldCapacity >> 1); //妿容卿©å®¹ä¹åè¿æ¯ä¸å¤ï¼é£ä¹å¹²èç´æ¥å°minCapacity设为容å¨çå¤§å° if (newCapacity - minCapacity < 0) newCapacity = minCapacity; //妿æ©å ç容å¨å¤ªå¤§äºçè¯ï¼é£ä¹å°±æ§è¡hugeCapacity if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); } jdk1.6çæ¬æ¯è¿æ ·çï¼ public void ensureCapacity(int minCapacity) { modCount++; int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object oldData[] = elementData; int newCapacity = (oldCapacity * 3) / 2 + 1; if (newCapacity < minCapacity) newCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); } } Vectorç±»ï¼ public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = e; return true; } private void ensureCapacityHelper(int minCapacity) { // overflow-conscious code if (minCapacity - elementData.length > 0) grow(minCapacity); } private void grow(int minCapacity) { // overflow-conscious code int oldCapacity = elementData.length; int newCapacity = oldCapacity + ((capacityIncrement > 0) ? capacityIncrement : oldCapacity); /** è¿ä¸ªæ©å®¹éè¦åä¸ªå¤æï¼å¦æå®¹éå¢éåå§åç䏿¯0ï¼å³ä½¿ç¨çpublic Vector(int initialCapacity,int capacityIncrement) æé æ¹æ³è¿è¡çåå§åï¼é£ä¹æ©å®¹ç容鿝(oldCapacity+capacityIncrement)ï¼å°±æ¯åæ¥ç容éå ä¸å®¹éå¢éçå¼ï¼ å¦ææ²¡æè®¾ç½®å®¹éå¢éï¼é£ä¹æ©å®¹åç容éå°±æ¯(oldCapacity+oldCapacity)ï¼å°±æ¯åæ¥å®¹éçäºåã **/ if (newCapacity - minCapacity < 0) newCapacity = minCapacity; if (newCapacity - MAX_ARRAY_SIZE > 0) newCapacity = hugeCapacity(minCapacity); elementData = Arrays.copyOf(elementData, newCapacity); } jdk1.6çæ¬æ¯è¿æ ·çï¼ private void ensureCapacityHelper(int minCapacity) { int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { Object[] oldData = elementData; int newCapacity = (capacityIncrement > 0) ? (oldCapacity + capacityIncrement) : (oldCapacity * 2);//æ¹å¼ä¸jdk1.7䏿 · if (newCapacity < minCapacity) { newCapacity = minCapacity; } elementData = Arrays.copyOf(elementData, newCapacity); } } ArrayListåVector齿¯ä½¿ç¨æ°ç»æ¹å¼å卿°æ®ï¼æ¤æ°ç»å ç´ æ°å¤§äºå®é åå¨çæ°æ®ä»¥ä¾¿å¢å åæå ¥å ç´ ï¼å®ä»¬é½å è®¸ç´æ¥æåºå·ç´¢å¼å ç´ ï¼ä½æ¯æå ¥å ç´ è¦æ¶åæ°ç»å ç´ ç§»å¨çå åæä½ï¼æä»¥ç´¢å¼æ°æ®å¿«èæå ¥æ°æ®æ ¢ï¼Vectorç±äºä½¿ç¨äºsynchronizedæ¹æ³(线ç¨å®å ¨)ï¼é常æ§è½ä¸è¾ArrayListå·®ã **å ³äºLinkedList** LinkedList æ¯ä¸ä¸ªåé¾è¡¨,卿·»å åå é¤å ç´ æ¶å ·ææ¯ArrayListæ´å¥½çæ§è½.ä½å¨getä¸setæ¹é¢å¼±äºArrayList.å½ç¶,è¿äºå¯¹æ¯é½æ¯ææ°æ®éå¾å¤§æè æä½å¾é¢ç¹çæ åµä¸ç对æ¯,å¦ææ°æ®åè¿ç®éå¾å°,é£ä¹å¯¹æ¯å°å¤±å»æä¹. è LinkedList è¿å®ç°äº Queue æ¥å£,该æ¥å£æ¯Listæä¾äºæ´å¤çæ¹æ³,å æ¬ offer(),peek(),poll()ç.注æ: é»è®¤æ åµä¸ArrayListçåå§å®¹éé常å°,æä»¥å¦æå¯ä»¥é¢ä¼°æ°æ®éçè¯,åé ä¸ä¸ªè¾å¤§çåå§å¼å±äºæä½³å®è·µ,è¿æ ·å¯ä»¥åå°è°æ´å¤§å°çå¼éã **ä»ä¹æ¶å使ç¨ArrayListæVector** å¨ä»ä¹æ¶å使ç¨ArrayListæVectorï¼å®å®å ¨åå³äºä½ çéæ±ï¼å¦æä½ éè¦æ§è¡ä¸ä¸ªçº¿ç¨å®å ¨çæä½ï¼é£ä¹Vectoræ¯æå¥½çéæ©ï¼å®ä¿è¯ä½ åä¸ä¸ªæ¶å»åªæä¸ä¸ªçº¿ç¨è®¿é®ä½ çéåã æ§è½ï¼åæ¥æä½ç¸æ¯æ²¡æåæ¥æä½æ¶èæ´å¤çæ¶é´ï¼æä»¥å¦æä½ ä¸éè¦çº¿ç¨å®å ¨çæä½ï¼ArrayListå°ä¼æ¯æ´å¥½çéæ©ï¼å®å°ä¼å 为并åè¿ç¨æé«æ§è½ã **æä¹è®©ArrayList忥** 使ç¨Collecions.synzhonizedList List list = Collections.synchronizedList(new ArrayList()); ... //If you wanna use iterator on the synchronized list, use it //like this. It should be in synchronized block. synchronized (list) { Iterator iterator = list.iterator(); while (iterator.hasNext()) ... iterator.next(); ... } **ArrayList,Vector, LinkedListçå卿§è½åç¹æ§** ArrayList å Vector 齿¯ä½¿ç¨æ°ç»æ¹å¼å卿°æ®ï¼æ¤æ°ç»å ç´ æ°å¤§äºå®é åå¨çæ°æ®ä»¥ä¾¿å¢å åæå ¥å ç´ ï¼ å®ä»¬é½å è®¸ç´æ¥æåºå·ç´¢å¼å ç´ ï¼ä½æ¯æå ¥å ç´ è¦æ¶åæ°ç»å ç´ ç§»å¨çå åæä½ï¼æä»¥ç´¢å¼æ°æ®å¿«èæå ¥æ°æ®æ ¢ï¼Vector ç±äºä½¿ç¨äº synchronized æ¹æ³ï¼çº¿ç¨å®å ¨ï¼ ï¼é常æ§è½ä¸è¾ ArrayList å·®ï¼è LinkedList 使ç¨ååé¾è¡¨å®ç°åå¨ï¼æåºå·ç´¢å¼æ°æ®éè¦è¿è¡ååæååéåï¼ ä½æ¯æå ¥æ°æ®æ¶åªéè¦è®°å½æ¬é¡¹çåå项å³å¯ï¼æä»¥æå ¥é度è¾å¿«ãLinkedList 乿¯çº¿ç¨ä¸å®å ¨çï¼LinkedList æä¾äºä¸äºæ¹æ³ï¼ä½¿å¾LinkedList å¯ä»¥è¢«å½ä½å æ åéåæ¥ä½¿ç¨ã