/**
* @author StormWangxhu
* @version 創建時間:2017年11月3日 上午10:03:44
*
*/
今天來總結一下集合,這篇主要總結一下List藉口及其相關的實現類。
首先看一下集合的框架。
再一張
最後一張性能總結性圖:
從上圖中可以看到,List接口主要有兩個實現類,ArrayList和LinkedList,主要講一下第一個。
1、ArrayList
(1) 關於ArrayList的實現原理,以後通過看源代碼來總結。
(2)、
ArrayList的一些方法,實現增刪改查:
結合代碼看:
package com.stormwang.List;
import java.util.ArrayList;
import java.util.Iterator;
import javax.rmi.ssl.SslRMIClientSocketFactory;
import javax.swing.plaf.synth.SynthSpinnerUI;
/**
* @author StormWangxhu
* @version 創建時間:2017年11月3日 上午10:03:44
*
*/
/**
* List 是一個藉口
* ArrayList是其一個實現類!
* 特點: 查詢元素快,增刪效率低下!
* 那麼,這種缺陷,由LinkedList集合來克服:後面再練習!
* LinkedList特點:
* 刪除效率高!
* ArrayList 練習
* 實現集合元素的增刪改查!
* */
public class ListDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList arrayList = new ArrayList<>();
//實現集合的增刪改查
arrayList.add("hello!");
arrayList.add("I am java!");
arrayList.add("今天是11月3號!,我在圖書館學習!");
arrayList.add("我也會很牛逼的對嗎!");
arrayList.add(3, "我是指定位置插入的元素");
System.out.println(arrayList.size());
System.out.println("以下是直接輸出集合元素:");
System.out.println(arrayList);
//遍歷集合
System.out.println("使用迭代器遍歷集合:");
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()) {
Object object = (Object) iterator.next();
System.out.println(object);
}
//刪
System.out.println("刪操作:");
if (arrayList.get(2).equals("今天是11月3號!,我在圖書館學習!")) {
arrayList.remove(2);
System.out.println("第三個元素刪除成功");
}else {
System.out.println("刪除失敗!");
}
//使用foreach 循環輸出集合元素
System.out.println("使用foreach循環輸出集合元素:");
for (Object object : arrayList) {
System.out.println(object);
}
//改
System.out.println("改操作:");
System.out.println("現在集合大小爲:"+arrayList.size());
arrayList.set(1, "我是新的第二個元素,原來已被我替換!!");
//ArrayList 有序,可重複
arrayList.set(0, arrayList.get(1));
System.out.println("...");
/**
*
* 問題:這一部分爲什麼會執行不了? 拋出異常!
Iterator iterator2 = arrayList.iterator();
while (iterator.hasNext()) {
Object object = (Object) iterator.next();
System.out.println(object);
}*/
System.out.println("現在集合元素爲:");
for (Object object : arrayList) {
System.out.println(object);
}
//查操作
//如果沒有元素返回真
if (!arrayList.isEmpty()) {
System.out.println(arrayList.isEmpty());
}
if (arrayList.contains(2)) {
System.out.println("什麼鬼!");
}else {
System.out.println("包含操作查詢失敗!");
}
Object object ;
System.out.println("查操作:");
object =arrayList.get(0);
System.out.println("第一個元素爲:"+object);
//使用toString()方法,將集合元素轉換爲字符串。
System.out.println(arrayList.toString());
System.out.println(arrayList);
}
}
ArrayList 特點:
1、實現:
集合底層是使用了一個數組來保存元素的,在增加、刪除指定位置元素時,會導致創建新的數組,效率比較低,因此不適用於做大量的增刪操作。但這種數據結構,允許程序通過索引的方式來訪問元素。因此使用ArrayList集合查找元素很便捷。
2、提供的查找方法:
LinkedList
1、特點:
LinkedList
* 該集合內部維護了一個雙向循環鏈表,鏈表中的每一個元素
* 都使用引用的方式記住它的前一個元素和後一個元素,從而
* 可以將所有的元素彼此連接起來。
當插入一個新元素時,只需要修改元素之間的這種引用關係即可。
當刪除一個節點也是如次。正因爲LinkedList的存儲結構,Linkedlist集合對元素的增刪操作具有很高的效率。
下面通過一組圖片看LinkedList的結構:
上圖爲新增一個元素時:只需要讓黃色部分的節點記住它後面是新元素,讓黃顏色後面的記住它前面的是新元素。
通過代碼演示一下該類的特長————增、刪操作
package com.stormwang.List;
import java.util.Iterator;
import java.util.LinkedList;
/**
* @author StormWangxhu
* @version 創建時間:2017年11月3日 下午6:55:57
*
*/
/**
* LinkedList
* 該集合內部維護了一個雙向循環鏈表,鏈表中的每一個元素
* 都使用引用的方式記住它的前一個元素和後一個元素,從而
* 可以將所有的元素彼此連接起來。
* */
public class LinkedListTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList linkedList = new LinkedList<>();
//增操作
System.out.println("增加元素:");
linkedList.add("stu1");
linkedList.add("stu2");
linkedList.add("stu3");
linkedList.add("stu4");
System.out.println(linkedList.toString());
//向指定位置插入元素
linkedList.add(2, "指定位置");
Iterator iterator = linkedList.iterator();
while (iterator.hasNext()) {
Object object = (Object) iterator.next();
System.out.println(object);
}
//在最前面插入元素
linkedList.addFirst("First");
//刪除最後一個元素
linkedList.removeLast();
//返回此列表的第一個元素。
System.out.println(linkedList.getFirst());
System.out.println(linkedList);
//刪除指定元素
linkedList.remove(3);
System.out.println(linkedList);
//刪除最後一個元素
linkedList.removeLast();
System.out.println(linkedList);
//刪除第一個元素
linkedList.removeFirst();
System.out.println(linkedList);
}
}
LinkedList在增刪方面有7個特有的方法。
看看:
增
刪
具體可以查看API
下面看看ArrayList和LinkedList的區別:
總結:
ArrayList:
有序 可重複
查找效率高,大批量增加、刪除操作慢。
線程不安全
LinkedList
有序 可重複
增刪效率高! 查找效率不好。
線程安全