您好,登錄后才能下訂單哦!
本篇內容主要講解“Java容器類List ArrayList Vector有什么作用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java容器類List ArrayList Vector有什么作用”吧!
List是接口,聲明了各個方法,不多說。且看ArrayList類。
ArrayList類的成員變量有Object[] elementData,int size;其中elementData數組用來存儲加入到ArrayList的對象,size為列表中實際的對象數目。ArrayList類不是線程安全的。
Vector與ArrayList的實現基本相同,只是Vector類是線程安全的,其方法都帶有synchronized關鍵字,如果不考慮線程同步的話,ArrayList性能要好一些。當前它們內部實現原理都是用到對象數組來實現,如果元素數目確定,直接用數組效率***。
簡單的用法:(后面是數據打印結果)
public class ListDemo { /** * @param args */ public static void main(String[] args) { List<String> list = new ArrayList<String>(); String[] strArr = new String[3]; boolean ret = list.add("haha"); list.add(new String("aa")); list.add(null); System.out.println(list.size());//3 System.out.println(ret);//true System.out.println(list);//[haha, aa, null] System.out.println(strArr);//[Ljava.lang.String;@1fee6fc System.out.println(strArr.getClass().getName());//[Ljava.lang.String; System.out.println(list.indexOf("aa"));//1 System.out.println(list.indexOf(null));//2 String str = list.set(1, "ee"); System.out.println(str);//aa System.out.println(list);//[haha, ee, null] String remove = list.remove(0); System.out.println(remove);//haha System.out.println(list);//[ee, null] boolean result = list.remove("ff"); System.out.println(result);//false result = list.remove("ee"); System.out.println(result);//true System.out.println(list);//[null] } }
public ArrayList() { this(10); } public ArrayList(int initialCapacity) { super(); if (initialCapacity < 0) throw new IllegalArgumentException("Illegal Capacity: "+ initialCapacity); this.elementData = new Object[initialCapacity]; } public boolean add(E e) { ensureCapacity(size + 1); // Increments modCount!! elementData[size++] = e; return true; } /*移除指定位置元素,注意每次移除數據都會將數組中后面數據移動來填充數組*/ public E remove(int index) { RangeCheck(index); modCount++; E oldValue = (E) elementData[index]; int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // index后面數據依次往前移動,將***一個位置賦值為0,讓gc來回收空間。 return oldValue; } 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; /*該方法會創建一個新的對象數組,然后調用 System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength));方法將源數組數據拷貝到新數組中。引用更新,指 向新的對象數組。*/ elementData = Arrays.copyOf(elementData, newCapacity); } } /*將對象數組削減到當前元素數目大小,減少存儲空間*/ public void trimToSize() { modCount++; int oldCapacity = elementData.length; if (size < oldCapacity) { elementData = Arrays.copyOf(elementData, size); } } /*查找對象***出現的位置,若沒有找到,返回-1。由 代碼可知,可以在list中加入null對象,并查找到。*/ public int indexOf(Object o) { if (o == null) { for (int i = 0; i < size; i++) if (elementData[i]==null) return i; } else { for (int i = 0; i < size; i++) if (o.equals(elementData[i])) return i; } return -1; } /*替換指定位置的元素值,返回該位置中old值*/ public E set(int index, E element) { RangeCheck(index); //檢查范圍 E oldValue = (E) elementData[index]; elementData[index] = element; return oldValue; } /*返回指定位置的值*/ public E get(int index) { RangeCheck(index); return (E) elementData[index]; } private void RangeCheck(int index) { if (index >= size) throw new IndexOutOfBoundsException( "Index: "+index+", Size: "+size); } public int size() { return size; } public boolean isEmpty() { return size == 0; }
到此,相信大家對“Java容器類List ArrayList Vector有什么作用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。