68.List集合java
(1)概念api
List是有序的集合,就像咱們的數組同樣。咱們能夠把list理解爲是一個長度可變的數組,並且提供了豐富的api。List的集合底層就是數組。數組
(2)List的添加和得到安全
import java.util.ArrayList; import java.util.List; public class ListTest { public static void main(String[] args) { List l1=new ArrayList(); //List中添加 l1.add("孫悟空"); l1.add("豬八戒"); l1.add("沙和尚"); //指定索引位置添加 l1.add(3,"挑擔子"); List l2=new ArrayList(); l2.add("唐僧"); l2.add("白龍馬"); l2.add("孫悟空"); l2.add("豬八戒"); l2.add("沙和尚"); //指定索引位置添加子集合的內容 l1.addAll(1,l2); System.out.println(l1); //Object o = l1.get(1);根據索引得到集合中的元素,默認返回的是Object的,可是若是已知是String類型能夠強轉 String o = (String) l1.get(1); System.out.println(o); //得到集合中"孫悟空"第一次出現的索引,若是不包含該元素則返回-1 int i=l1.indexOf("孫悟空"); System.out.println(i); //得到集合中"孫悟空"最後一次出現的索引,若是不包含該元素則返回-1 int j=l1.lastIndexOf("孫悟空"); System.out.println(j); } }
(3)List的遍歷方法多線程
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class ListTest1 {
public static void main(String[] args) {
List l1 = new ArrayList();
//List中添加
l1.add("孫悟空");
l1.add("豬八戒");
l1.add("沙和尚");
//指定索引位置添加
l1.add(3, "白龍馬");
ListIterator listIterator = l1.listIterator();
while (listIterator.hasNext()){
Object next = listIterator.next();
System.out.println(next);
//使用迭代器遍歷的過程當中集合自己是不能更改的,這樣有多線程的併發問題;可是能夠經過迭代器更改集合,所做的更改不參與本次遍歷
if(next.equals("白龍馬")){
listIterator.add("蹄兒朝西");
}
}
System.out.println("-----------ListIterator第二次遍歷------------");
//list使用迭代器遍歷是能夠逆轉的,對比Collection
while (listIterator.hasPrevious()){
Object previous = listIterator.previous();
System.out.println(previous);
}
System.out.println("-----------使用for循環遍歷------------");
//還可使用for循環進行遍歷
for (int i = 0; i < l1.size(); i++) {
Object o=l1.get(i);
System.out.println(o);
//for循環中是能夠更改集合的,i < l1.size()此處使用的是可變的動態的集合長度,所以所做的更改參與此次的遍歷
if(o.equals("蹄兒朝西")){
l1.add("馬有失蹄");
}
}
}
}
(4)List刪除方法併發
import java.util.ArrayList; import java.util.List; public class ListTest2 { public static void main(String[] args) { List l1 = new ArrayList(); //List中添加 l1.add("孫悟空"); l1.add("豬八戒"); l1.add("沙和尚"); l1.add("孫悟空"); l1.add("豬八戒"); l1.add("沙和尚"); System.out.println("//刪除集合中指定索引的元素----------------"); l1.remove(2); System.out.println("//刪除集合中第一次檢索到的指定元素----------------"); l1.remove("豬八戒"); System.out.println(l1); List l2 = new ArrayList(); l2.add("唐僧"); l2.add("白龍馬"); l2.add("豬八戒"); l2.add("沙和尚"); l1.addAll(1, l2); System.out.println("//指定索引位置添加子集合的內容----------------"); System.out.println(l1); l1.removeAll(l2); System.out.println("//刪除集合全部子集合包含的元素----------------"); System.out.println(l1); l1.set(1,"孫行者"); System.out.println("//修改指定索引處的元素----------------"); System.out.println(l1); l1.clear(); System.out.println(l1); } }
69.ArrayListapp
List 接口的大小可變數組的實現。實現了全部可選列表操做,並容許包括 null 在內的全部元素。除了實現 List 接口外,此類還提供一些方法來操做內部用來存儲列表的數組的大小。(此類大體上等同於 Vector 類,除了此類是不一樣步的。)性能
ArrayList的底層是數組的原理。spa
ArrayList中的元素和能夠重複線程
是有序的集合,長度不固定。
不是線程安全的。
效率高。
ArrayList在添加數據的時候初始的長度是10,後續會以5個長度來擴充集合的長度。
ArrayList不是線程安全的集合,適合不要求線程安全的需求來實現。
好處是性能高。
缺點就是線程不安全,可能帶來數據不許確。
若是線程要是同步的話,性能就會變低。
70.LinkedList
List 接口的連接列表實現。實現全部可選的列表操做,而且容許全部元素(包括 null)。除了實現 List 接口外,LinkedList 類還爲在列表的開頭及結尾 get、remove 和 insert 元素提供了統一的命名方法。這些操做容許將連接列表用做堆棧、隊列或雙端隊列。
此類實現 Deque 接口,爲 add、poll 提供先進先出隊列操做,以及其餘堆棧和雙端隊列操做。
全部操做都是按照雙重連接列表的須要執行的。在列表中編索引的操做將從開頭或結尾遍歷列表(從靠近指定索引的一端)。
Linked也不是線程安全的。
鏈表:儲存了元素和先後的地址
LinkedList是鏈表爲原理,添加修改刪除的性能高。
import java.util.LinkedList; public class LinkListTest { public static void main(String[] args) { LinkedList list=new LinkedList(); list.add("取經"); list.addFirst("西天"); list.addLast("上大路"); System.out.println(list);//[西天, 取經, 上大路] /*list.removeFirst();//[取經, 上大路] list.removeLast();//[取經]*/ Object pop = list.pop();//出棧 System.out.println(pop);//西天 棧頂的元素出棧 System.out.println(list);//[取經, 上大路] list.push("小西天");//壓棧 棧頂添加進去 System.out.println(list);//[小西天, 取經, 上大路] Object pop1 = list.pop(); System.out.println(pop1);//小西天 棧頂的元素出棧 System.out.println(list);//[取經, 上大路] } }
71.Vector
Vector
類能夠實現可增加的對象數組。與數組同樣,它包含可使用整數索引進行訪問的組件。可是,Vector
的大小能夠根據須要增大或縮小,以適應建立 Vector
後進行添加或移除項的操做。
import java.util.Enumeration; import java.util.Vector; public class VectorTest { public static void main(String[] args) { Vector list=new Vector(); list.add("banana"); list.add(0,"apple"); Vector list2=new Vector(); list2.add("pineappple"); list2.add("pineapple cake"); list.addAll(list2); System.out.println(list.get(2)); System.out.println(list.elementAt(2)); System.out.println("---------Vector中使用elements()遍歷----------"); Enumeration elements = list.elements(); while (elements.hasMoreElements()){ Object o = elements.nextElement(); System.out.println(o); } System.out.println("---------Vector中使用for循環遍歷----------"); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } }