ArrayList、Vector、LinkedList、泛型(Generic)
1.ArrayList、Vector、LinkedList
ArrayList儲存字串並遍歷
void forEach(Consumer<? super E> action) 執行特定動作的每一個元素的 Iterable直到所有元素都被處理或操作丟擲異常
public class ArrayListDemo2 { public static void main(String[] args) { ArrayList arrayList = new ArrayList(); arrayList.add('a'); arrayList.add('b'); arrayList.add('c'); //迭代器 Iterator iterator = arrayList.iterator(); while (iterator.hasNext()) { Object next = iterator.next(); System.out.println(next); } //普通for Object[] array = arrayList.toArray(); for (int i = 0; i < arrayList.size(); i++) { System.out.println(array[i]); } } }
ArrayList儲存自定義物件並遍歷
public static void main(String[] args) { Class class1 = new Class("通工"); Class class2 = new Class("信工"); Class class3 = new Class("電氣"); ArrayList list = new ArrayList(); list.add(class1); list.add(class2); list.add(class3); Iterator iterator = list.iterator(); while (iterator.hasNext()){ Class c=(Class)iterator.next(); System.out.println(c.getName()); } Object[] array = list.toArray(); for (int i = 0; i <array.length ; i++) { Class c=(Class)array[i]; System.out.println(c.getName()); } } }
Vector的特有功能
Vector類概述: Vector 類可以實現可增長的物件陣列 , Vector 是同步的。 Vector類特有功能 public void addElement(E obj) public E elementAt(int index) public Enumeration elements()
public static void main(String[] args) { //Vector:底層資料結構是陣列,增刪慢,查詢快,執行緒安全,效率低 //void addElement (E obj) //新增指定的元件到這個向量的結束,增加其大小由一個。 //E elementAt ( int index) //返回指定索引處的元件。 //Enumeration<E> elements () //返回此向量的元件的列舉。 //boolean equals (Object o) //將指定的物件與此向量進行比較,以進行相等性。 //E firstElement () //返回第一個元件(在指數 0 專案)這個載體。 //E lastElement () //返回向量的最後一個元件。 //void removeElementAt ( int index) //在指定的索引中刪除元件 Vector vector = new Vector(); vector.addElement(100); vector.addElement(200); vector.addElement(300); Vector vector2 = new Vector(); vector2.addElement(100); vector2.addElement(200); vector2.addElement(300); vector2.addElement(500); //返回一個迭代器 Enumeration elements = vector.elements(); while (elements.hasMoreElements()){ Object o = elements.nextElement(); System.out.println(o); } //對比兩個集合當中元素是否一模一樣 boolean equals = vector.equals(vector2); System.out.println(equals); Object o = vector2.firstElement(); System.out.println(o); vector2.removeElementAt(vector2.size()-1); System.out.println(vector2); } }
LinkedList的特有功能
LinkedList類概述: List 介面的連結列表實現 , 此實現不是同步的 LinkedList類特有功能 public void addFirst(E e)及addLast(E e) public E getFirst()及getLast() public E removeFirst()及public E removeLast()
2.泛型
泛型是一種把型別明確的工作推遲到建立物件或者呼叫方法的時候才去明確的特殊的型別。 引數化型別,把型別當作引數一樣的傳遞。 泛型的格式 : <資料型別> 注意:這裡的資料型別只能是引用資料型別!!! 泛型好處 (1): 把執行時期的問題提前到了編譯期間 (2): 避免了強制型別轉換 (3):優化了程式設計,解決了黃色警告線 注意:泛型只在編譯期有效 但在執行期就擦除了
public static void main(String[] args) {
// 自定義物件儲存到ArrayList集合
// 使用迭代器遍歷
Student student = new Student("金克斯");
Student student1 = new Student("布里茨");
Student student2 = new Student("維克托");
ArrayList<Student> list = new ArrayList<Student>();
list.add(student);
list.add(student1);
list.add(student2);
Iterator<Student> iterator = list.iterator();
while (iterator.hasNext()){
Student stu=iterator.next();
System.out.println(stu.getName());
}
}
泛型的由來 泛型的由來:通過Object轉型問題引入,早期的Object型別可以接收任意的物件型別,但是在實際的使用中,會有型別轉換的問題。也就存在這隱患,所以Java提供了泛型來解決這個安全問題。 泛型類概述: 把泛型定義在類上 定義格式: public class 類名<泛型型別1,…>
private K k ;
public K getK() {
return k;
}
public void setK(K k) {
this.k = k;
}
}
泛型方法 泛型方法概述: 把泛型定義在方法上 定義格式: public <泛型型別> 返回型別 方法名(泛型型別 變數名)
/**
* 泛型方法
*/
public <E> void show(E e){
System.out.println(e);
}
}
泛型介面概述: 把泛型定義在介面上 定義格式: public interface 介面名<泛型型別>
public abstract void show(T t) ;
}
泛型高階之萬用字元
泛型萬用字元<?> 任意型別,如果沒有明確,那麼就是Object以及任意的Java類了
<? extends E>: 向下限定,E及其子類 <? super E> : 向上限定,E及其父類