一、概述
 
 本質上是一個存儲一組數據大小不定的容器 ---- 頂級 接口Collection 二、集合的聲明
 
 
 集合的聲明 Collection<String> c; ? 表示一個存儲String類型數據的集合。<E> : 泛型,在聲明一個集合時使用泛型臨時代替具體類型,由于泛型的限制,集合中只能存儲對象。 三、Collection中的方法:
 add() : 添加元素。remove() : 刪除元素 。在刪除之前會首先判斷元素是否存在,若存在則刪除;若不存在,則跳過。不會報錯contains() : ?判斷集合中是否包含指定元素。clear() ; 清空集合isEmpty() : 判斷集合是否為空。size() : 獲取集合中元素的個數。toArray() : 將集合轉換為數組,返回值是Object[ ] 。 返回的Object[] 不能轉換成其他類型的數組。原因:集合底層實際上是以Object存儲內容toArray(new String[]) : 將集合轉換為指定類型的數組。底層會判斷數組的大小是否等于元素的個數。如果大于元素的個數,則直接使用參數數組存儲元素;如果小于元素個數底層只會根據數組類型來創建一個與元素個數等大的數組存儲數據。	public static void main(String[] args) {// 表示元素類型是String類型Collection<String> c = new ArrayList<String>();// 添加元素c.add("adf");c.add("rth");c.add("lmn");c.add("jkl");// 將集合轉化為Object類型的數組// Object[] os = c.toArray();// 集合底層在存儲元素的時候實際上是以Object類型存儲// Oject[] os = new Object[c.size()];// String[] os = (String[]) c.toArray();// for (String object : os) {// System.out.println(object);// }// 將集合轉化為對應類型的數組/** 在底層會判斷傳入的數組的大小是否大于等于元素的個數* 如果大于等于了元素個數,則直接使用傳入的數組來存儲元素,最后返回傳入的數組。* 如果小于元素個數,底層只會根據傳入對的類型來創建一個和元素個數等大的數組*/String[] ss = c.toArray(new String[0]);for (String s : ss) {System.out.println(s);}// 獲取元素個數---集合中元素的個數和集合的大小是兩個概念// System.out.println(c.size());// 清空集合// c.clear();// 判斷是否一個空集合// System.out.println(c.isEmpty());// 遍歷集合// for (String s : c) {// System.out.println(s);// }// 刪除元素---在刪除這個元素之前會首先判斷這個元素是否存在。// c.remove("adg");// 判斷指定的元素是否存在// System.out.println(c.contains("jkl"));// 集合中toString做過重寫System.out.println(c);}
  四、List<E>?
 
 
 List<E> 是Collection的子接口 ,所以Collection中的方法都可以用。List<E> 中的元素是有序的,存在List中的元素會被自動編號。從0開始。可以有重復的元素 List<E>中的方法:
 
 
add() : 添加元素add(int index ,arg) : 在指定下標的位置添加指定元素equals(List<E>) : 判斷兩個列表內容是否一致(包括順序)。 底層實現: 實際上是依次調用對應位置的元素的equals方法 比較是否一致。get(int index) : 獲取指定下標位置的元素。indexOf() ; 獲取指定元素在列表中第一次出現的位置。若果元素不在列表中,則返回-1.lastIndexOf() : 獲取指定元素在列表中最后一次出現的位置。removeIndexOf() : 移除制定下標位置上的元素。set(int index,arg) : 替換指定下標位置的元素。subList() : 獲取子列表。	public static void main(String[] args) {List<String> list = new ArrayList<String>();// 添加元素list.add("abc");list.add("def");list.add("ghi");list.add("jkl");list.add("abc");// list.add(10, "xyz");// 移除指定下標位置上的元素// list.remove(2);// 替換指定下標上的元素// list.set(1, "opq");// 獲取指定下標位置上的元素// System.out.println(list.get(3));// 獲取指定元素在列表中第一次出現的位置// 如果元素不存在,則返回-1// System.out.println(list.indexOf("ad"));// 向列表的指定下標上插入指定的元素// list.add(1, "mno");// 判斷兩個列表是否一致// List<String> list2 = new ArrayList<String>();// list2.add(new String("abc"));// list2.add("def");// list2.add("ghi");// list2.add("jkl");// list2.add("abc");// 在比較兩個集合是否一致的時候,實際上依次調用對應位置上的元素的equals來比較兩個元素是否一致。// System.out.println(list.equals(list2));System.out.println(list);}
  五、 ArrayList<E>
 
 
 是List<E>的實現類是基于數組的初始容量為10.如果容量不夠用,則自動擴容,在上一次的基礎上累加一半。 ?10 -> 15 ->22 ....內存空間連續。查詢較快,增刪較慢。 練習: 1. 用數組實現一個簡易版的ArrayList 存儲String,有add\remove\set\get\indexOf\contains\isEmpty\size\toString等方法
 
import java.util.Arrays;public class ListExer {// 存儲元素private String[] data;// 記錄已經存儲的元素個數private int size = 0;public ListExer() {data = new String[10];}public ListExer(int capacity) {// 需要判斷容量是否符合事實if (capacity < 0) {capacity = 10;}data = new String[capacity];}private void grow() {if (data.length <= 1) {data = Arrays.copyOf(data, data.length + 1);return;}data = Arrays.copyOf(data, data.length + (data.length >> 1));}public void add(String s) {// 判斷是否需要擴容if (size >= data.length) {this.grow();}data[size] = s;size++;}public void add(int index, String s) {// 判斷下標是否越界if (index > size) {throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);}// 判斷是否需要擴容if (size >= data.length) {this.grow();}// 插入元素// for (int i = size - 1; i >= index; i--) {// data[i + 1] = data[i];// }System.arraycopy(data, index, data, index + 1, size - index);data[index] = s;size++;}public void remove(String s) {// 獲取這個元素第一次出現的下標int index = this.indexOf(s);// 判斷這個下標是否存在if (index != -1) {this.remove(index);}}private void out(int index) {// 判斷下標越界if (index >= size) {throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);}}public void remove(int index) {this.out(index);// for (int i = index; i < size - 1; i++) {// data[i] = data[i + 1];// }System.arraycopy(data, index + 1, data, index, size - index - 1);size--;}public void set(int index, String s) {this.out(index);data[index] = s;}public String get(int index) {this.out(index);return data[index];}public boolean contains(String s) {return this.indexOf(s) != -1;}public boolean isEmpty() {return size <= 0;}public int indexOf(String s) {for (int i = 0; i < size; i++) {if (s == data[i] || s != null && s.equals(data[i])) {return i;}}return -1;}public int size() {return size;}public String toString() {StringBuilder sb = new StringBuilder("[");for (int i = 0; i < size; i++) {sb.append(data[i]).append(", ");}String str = sb.toString();if (str.length() > 1) {str = str.substring(0, str.length() - 2);}return str += "]";}public static void main(String[] args) {ListExer le = new ListExer(3);le.add("a");le.add("b");le.add("c");le.add(0,"e");le.remove(0);System.out.println(le);}}
  
 
                            
總結
                            
                                以上是生活随笔為你收集整理的Java中集合(一)Collection  、ListE 、ArrayListE的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。