1. 程式人生 > >Java新手:ArrayList類、LinkedList類

Java新手:ArrayList類、LinkedList類

Collection介面

1、 boolean add(Object e): 向集合中新增元素 2、 void clear() :清空集合中所有元素 3、 boolean contains(Object o) :判斷集合中是否包含某個元素 4、 boolean isEmpty():判斷集合中的元素是否為空 5、 boolean remove(Object o) :根據元素的內容來刪除某個元素 6、 int size():獲取集合的長度 7、 Object[] toArray():能夠將集合轉換成陣列並把集合中的元素儲存到陣列中

public class CollectionDemo {
	public static void main(String[] args) {
		Collection c =new ArrayList<>();//Collection是介面,不能例項化,使用多型
		c.add("zhangsan");//增加元素
		c.add("lisi");
		c.add("wangwu");
		System.out.println(c);
		System.out.println(c.contains("lisi"));//判斷集合中是否包含指定元素
		System.out.println(c.contains("zhaoliu"));
		System.out.println(c.isEmpty());//集合是否為空
		System.out.println(c.size());//集合的長度
		System.out.println(c.remove("lisi"));//刪除元素,成功返回true
		Object[] obj = c.toArray();//將集合轉換成一個Object陣列,因為集合中可以存任何型別的物件
		for(int i=0;i<obj.length;i++){
			System.out.println(obj[i]);
		}
		c.clear();//清空集合
		System.out.println(c);
	}
}

輸出結果:

[zhangsan, lisi, wangwu]
true
false
false
3
true
zhangsan
wangwu
[]

8、迭代器 Collection集合元素的通用獲取方式:在取元素之前先判斷集合中有沒有元素,如果有,就把這個元素取出來,繼續判斷,如果還有就再取出來,一直把集合中的所有元素都取出。

  • Iterator it =c.iterator()----獲取迭代器物件
  • E next() :返回下一個元素,用來返回迭代的下一個元素,並把指標向後移動一位。
  • boolean hasNext() :判斷是否有元素可以獲取,判斷集合中是否有元素可以迭代
public static void main(String[] args) {
		Collection c =new ArrayList<>();
		c.add("zhangsan");
		c.add("lisi");
		c.add("wangwu");
		Iterator it =c.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
}

注意:

  1. 使用next方法獲取下一個元素,如果沒有元素可以獲取,則出現NoSuchElementException異常,所以通常和hasNext()方法一塊使用
  2. 集合的遍歷方式:上面7和8 的方法(toArray()和Iterator()兩個方法)

9、併發修改異常ConcurrentModificationException處理(使用迭代器才會出錯): 當使用迭代器遍歷集合時,使用集合中的增加和刪除方法時,會出現併發修改異常,迭代器是依賴於集合的,相當於集合的一個副本,當迭代器在操作的時候,如果發現和集合不一樣,則丟擲異常。 使用迭代器的解決方法:需要使用Iterator的子介面ListIterator來實現向集合中新增

	public static void main(String[] args) {
//		Collection c =new ArrayList<>();//變成下面的
		List c =new ArrayList<>();
		c.add("zhangsan");
		c.add("lisi");
		c.add("wangwu");
//		Iterator it =c.iterator();//變成下邊的
		ListIterator it =c.listIterator();
		while(it.hasNext()){
			String s =(String)it.next();
			if(s.equals("lisi")){
				c.remove("lisi");
			}
		}
		System.out.println(c);
}

輸出結果: [zhangsan, wangwu] 10、泛型 集合中是可以存放任意物件的,只要把物件儲存集合後,這時他們就會被提升成Object型別,當取出物件進行相應的操作時,需要採用型別轉換,可能在轉換的時候出現型別轉換異常。 泛型的好處:避免了型別轉換問題,可以減少黃色警告線,可以簡化程式碼的書寫。

public static void main(String[] args) {
		Collection<Student> c =new ArrayList<>();
		Student s =new Student("zhangsan",18);
		Student s1 = new Student("lisi",19);
		c.add(s);
		c.add(s1);
		Iterator it =c.iterator();
		while(it.hasNext()){
			Student stu = (Student) it.next();
			System.out.println(stu.name);
		}
}

輸出結果: zhangsan lisi 11、增強for迴圈是JDK1.5以後出來的一個高階for迴圈,專門用來遍歷陣列和集合。內部原理其實是個Iterator迭代器,所以在遍歷的過程中,不能對集合中的元素進行增刪操作。

public static void main(String[] args) {
		Collection<Student> c =new ArrayList<>();
		Student s =new Student("zhangsan",18);
		Student s1 = new Student("lisi",19);
		c.add(s);
		c.add(s1);
		for(Student stu :c){   //for(元素型別  變數:集合或者陣列物件){}
			System.out.println(stu.name);
		}
}

List子體系

  1. List是在java.util包下的介面,需要導包,List是有序的(儲存和讀取的順序是一致的),有整數索引,允許重複的。
  2. List的特有功能: 1、void add(int index, E element) :將元素新增到index索引位置上 2、 E get(int index) :根據index索引獲取元素 3、E remove(int index) :根據index索引刪除元素 4、 E set(int index, E element):將index索引位置的的元素設定為element
  • 增刪改查
public static void main(String[] args) {
	   List list =new ArrayList<>();
	   list.add(0, "hello");
	   list.add(1, "world");
	   System.out.println("list="+list);
	   list.add(0, "你好");
	   System.out.println("list=="+list);
	   for(int i=0;i<list.size();i++){
		   System.out.println(list.get(i));
	   }
	   System.out.println("刪除第一個是:"+list.remove(0));
	   System.out.println("修改第一個元素是"+list.set(0, "hi"));
	   System.out.println("list==="+list);
	}

輸出結果:

list=[hello, world]
list==[你好, hello, world]
你好
hello
world
刪除第一個是:你好
修改第一個元素是hello
list===[hi, world]

注意:list的操作不可以越界,否則會報錯。

  1. List常用子類: 1、 ArrayList:底層是陣列結構,查詢快,增刪慢。 2、LinkedList:底層是連結串列,查詢慢,增刪快。 3、LinkedList的特有功能: void addFirst(E e) :向連結串列的頭部新增元素 void addLast(E e) :向連結串列的尾部新增元素 E getFirst() :E getFirst():獲取鏈頭的元素,不刪除元素 E getLast() :獲取鏈尾的元素,不刪除元素 E removeFirst() :返回鏈頭的元素並刪除鏈頭的元素 E removeLast() :返回鏈尾的元素並刪除鏈尾的元素
public static void main(String[] args) {
		LinkedList list =new LinkedList<>();
		list.add("hello");
		list.add("world");
		list.addFirst("java");
		list.addLast("c++");
		System.out.println("list="+list);
		System.out.println(list.getFirst());
		System.out.println(list.getLast());
		System.out.println(list.removeFirst());
		System.out.println(list.removeLast());
		System.out.println("list=="+list);
	}

輸出結果:

list=[java, hello, world, c++]
java
c++
java
c++
list==[hello, world]