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()); } }
注意:
- 使用next方法獲取下一個元素,如果沒有元素可以獲取,則出現NoSuchElementException異常,所以通常和hasNext()方法一塊使用
- 集合的遍歷方式:上面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子體系
- List是在java.util包下的介面,需要導包,List是有序的(儲存和讀取的順序是一致的),有整數索引,允許重複的。
- 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的操作不可以越界,否則會報錯。
- 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]