JavaEE學習日誌持續更新----> 必看!JavaEE學習路線(文章總彙)
集合的數據結構
棧
特點:先進後出
隊列
特點:先進先出
數組
特點:查詢快,增刪慢
鏈表
特點:查詢慢,增刪快
紅黑樹
特點:查詢速度非常快
List集合
List接口
java.util.List接口 extends Collection接口
List接口的特點:
- 有序集合。 存儲元素和取出元素的順序時一致的,存儲:123,取出:123。
- 有索引,包含了一些帶索引的特有方法。
- 允許存儲重複元素
帶索引的方法:
void add(int index, E element)
將指定元素插入此列表中的指定位置(可選操作)。E get(int index)
返回此列表中指定位置的元素。E remove(int index)
刪除此列表中指定位置的元素(可選操作)。E set(int index, E element)
用指定的元素替換此列表中指定位置的元素(可選操作)。
public class Demo01 {
public static void main(String[] args) {
//創建一個List集合對象
List<String> list = new ArrayList<>();
//往集合中添加元素
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("a");
System.out.println(list);//[a, b, c, d, a]
//void add(int index, E element) 將指定元素插入此列表中的指定位置(可選操作)。
//在c和d之間添加w
list.add(3,"w");
System.out.println(list);//[a, b, c, w, d, a]
//E get(int index) 返回此列表中指定位置的元素。
System.out.println(list.get(0));//a
System.out.println(list.get(4));//d
//E remove(int index) 刪除此列表中指定位置的元素(可選操作)。
//把d後邊的a刪除
String s1 = list.remove(5);
System.out.println("被移除的元素:"+s1);//被移除的元素:a
System.out.println(list);//[a, b, c, w, d]
//E set(int index, E element) 用指定的元素替換此列表中指定位置的元素(可選操作)。
//把w替換爲小貓
String s2 = list.set(3, "小貓");
System.out.println("被替換的元素:"+s2);//被替換的元素:w
System.out.println(list);//[a, b, c, 小貓, d]
}
}
注意:使用帶索引的方法,一定不要超出索引的使用範圍,否則就會拋出索引越界異常。
IndexOutOfBoundsException
索引越界異常,一般集合會拋出ArrayIndexOutOfBoundsException
數組索引越界異常StringIndexOutOfBoundsException
字符串索引越界異常
三種遍歷的方法:
- 普通for循環遍歷
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
- 迭代器遍歷
Iterator<String> it = list.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
- 增強for循環遍歷
for (String s : list) {
System.out.println(s);
}
ArrayList集合
List接口的可調整大小的陣列實現。
請注意,此實現不同步。(多線程)
特點:
- 實現了List接口,數組大小可根據元素的增加或刪除調整大小。
- 底層實現爲數組,查詢快,增刪慢**
- 此實現不同步(多線程)
Vector集合
特點:
- 實現List接口,可增長的對象數組。
- 底層實現爲數組,查詢快,增刪慢**
- 是同步的 (單線程) 。
從Java 2平臺v1.2開始,該類被改進以實現List接口,使其成爲Java
Collections Framework的成員。
與新的集合實現不同, Vector是同步的。
如果不需要線程安全實現,建議使用ArrayList代替Vector 。
LinkedList集合
java.util.LinkedList
特點:
- 實現了List接口
- 底層是一個雙向鏈表結構:查詢慢,增刪快
- LinkedList集合中包含了一些操作首尾元素的方法
操作首尾元素的方法
- 添加首尾元素
public void addFirst(E e)
將指定元素插入此列表的開頭。public void addLast(E e)
將指定元素添加到此列表的結尾。等效於add()方法public void push(E e)
將元素推入此列表所表示的堆棧。等效於addFirst()方法
private static void show01() {
//創建LinkedList集合對象
LinkedList<String> linked = new LinkedList<>();
//往集合中添加元素
linked.add("aaa");
linked.add("bbb");
linked.add("ccc");
linked.add("ddd");
linked.add("aaa");
System.out.println(linked);//[aaa, bbb, ccc, ddd, aaa]
//public void addFirst(E e) :將指定元素插入此列表的開頭。
//public void push(E e) :將元素推入此列表所表示的堆棧。等效於addFirst()方法
//linked.addFirst("www");
linked.push("www");
System.out.println(linked);//[www, aaa, bbb, ccc, ddd, aaa]
//public void addLast(E e) :將指定元素添加到此列表的結尾。等效於add()方法
linked.addLast("com");
//linked.add("com");
System.out.println(linked);//[www, aaa, bbb, ccc, ddd, aaa, com]
}
- 獲取首尾元素
public E getFirst()
返回此列表的第一個元素。public E getLast()
返回此列表的後一個元素。
private static void show02() {
//創建LinkedList集合對象
LinkedList<String> linked = new LinkedList<>();
//往集合中添加元素
linked.add("aaa");
linked.add("bbb");
linked.add("ccc");
linked.add("ddd");
//linked.clear();//如果集合中沒有元素,NoSuchElementException
//防止程序拋出異常
if(!linked.isEmpty()) {
String first = linked.getFirst();
System.out.println(first);//aaa
String last = linked.getLast();
System.out.println(last);//ddd
}
}
- 移除首尾元素
public E removeFirst()
移除並返回此列表的第一個元素。public E removeLast()
移除並返回此列表的後一個元素。public E pop()
從此列表所表示的堆棧處彈出一個元素。等效於removeFirst()方法
private static void show03() {
//創建LinkedList集合對象
LinkedList<String> linked = new LinkedList<>();
//往集合中添加元素
linked.add("aaa");
linked.add("bbb");
linked.add("ccc");
linked.add("ddd");
System.out.println(linked);//[aaa, bbb, ccc, ddd]
//linked.clear();
//String first = linked.removeFirst();
String pop = linked.pop();
System.out.println(pop);//aaa
String last = linked.removeLast();
System.out.println(last);//ddd
System.out.println(linked);//[bbb, ccc]
}