list

 

1.集合 

 

  數組長度是固定,當添加的元素超過了數組的長度時須要對數組從新定義,太麻煩,java內部給咱們提供了集合類,能存儲任意對象,長度是能夠改變的,隨着元素的增長而增長,隨着元素的減小而減小 java

 

2.數組和集合的區別

  數組:既能夠存儲基本數據類型,又能夠儲存引用數據類型,基本數據類型存儲的是值,引用數據類型存儲的是地址值數組

  集合:只能存儲引用數據類型(對象)集合中也能夠存儲基本數據類型,可是在存儲的時候會自動裝箱變成對象(Integer, Double) 安全

  數組長度是固定的,不能自動增加數據結構

  集合的長度是能夠變的,能夠根據元素的增加而增加 併發

 

3.數組集合是何時用

  若是元素個數是固定的推薦數組測試

  若是元素個數不是固定的推薦用集合(用處會不少)spa

 

4.Collection 集合的基本功能測

 

  Collection集爲單列集合線程

  下有兩個分支   list和set  list又有ArrayLise ,LinkedList,vecort  Set又有 Hashsete 和treesetcode

  list集合內add方法永遠返回true,也就是說什麼類型的數據均可以添加進去對象

 

 1             public static void demo2() {
 2                 //Collection是接口,因此須要父類引用指向子類對象
 3                 Collection c = new ArrayList();
 4                 //add()方法將元素添加到列表尾部
 5                 c.add("a");
 6                 c.add("b");
 7                 c.add("c");
 8                 c.add("d");
 9                 //remove()方法是刪除
10                 boolean b = c.remove("a");
11                 System.out.println(b);  // true
12                 System.out.println(c);  // b c d
13                 
14                 //清空集合
15                 c.clear(); 
16                 System.out.println(c);
17                 //判斷集合是否包含「c」
18                 boolean b1 = c.contains("c"); 
19                  System.out.println(b1);
20                //判斷集合是否爲空
21                 System.out.println(c.isEmpty());
22                 //獲取元素個數
23                 int a = c.size();
24                 System.out.println(a);
25                 
26             }

 

5.集合轉數組遍歷

 

  

 1      Collection c = new ArrayList();
 2         c.add("a");
 3         c.add("b");
 4         c.add("c");
 5         c.add(5);
 6         
 7         //Collection接口中包含了toSArray方法
 8         //把集合轉換成數組,Object類型的數組,再用for循環遍歷
 9         Object []obj = c.toArray();
10         for (int i = 0; i < obj.length; i++) {
11             System.out.println(obj[i]);
12         }



 1         //輸出自定義對象,和存儲自定對象的方法
 2         Collection c = new ArrayList();
 3         c.add(new Student("z",34));
 4         c.add(new Student("x",45));
 5         c.add(new Student("s",23));
 6         
 7         //將集合轉爲數組,
 8         Object []obj = c.toArray();
 9         for (Object object : obj) {
10             //getset方法輸出
11             System.out.println(object);
12         }
13         for (int i = 0; i < obj.length; i++) {
14             //向下轉型,轉到Student類中,調用getset方法,這樣就能夠本身輸出內容
15             Student s = (Student)obj[i];
16             System.out.println(s.getName() + " " + s.getAge());

 

6.Collection集合自帶All功能測試

  

 1         Collection c = new ArrayList();
 2         c.add("c");
 3         c.add("b");
 4         c.add("a");
 5         Collection c1 = new ArrayList();
 6         c1.add("c");
 7         c1.add("b");
 8         c1.add("a");
 9         
10         //addAll是把c1中每個元素都添加到c中,添加一個元素c長度加一
11         c.addAll(c1);
      //輸出結果爲[c, b, a, c, b, a] 長度6
12 13 //add是把c1做爲一個對象,多爲一個總體,直接添加到c中,c1添加進去夠c的長度只加1 14 c.add(c1);
      //輸出結果爲[c, b, a,[c, b, a]] 長度4

 

 1     Collection c = new ArrayList();
 2         c.add("c");
 3         c.add("b");
 4         c.add("a");
 5         Collection c1 = new ArrayList();
 6         c1.add("c");
 7         c1.add("b");
 8 9         
10         //刪除  調用集合與傳入集合的交集
11         c.removeAll(c1);
12         System.out.println(c);
13         //輸出結果  a
        Collection c = new ArrayList();
        c.add("c");
        c.add("b");
        c.add("a");
        Collection c1 = new ArrayList();
        c1.add("c");
        c1.add("b");
//判斷調用集合是否包含傳入集合
        c.containsAll(c1);
 1         Collection c = new ArrayList();
 2         c.add("c");
 3         c.add("b");
 4         c.add("a");
 5         Collection c1 = new ArrayList();
 6         c1.add("c");
 7         c1.add("b");
 9         
10         //若是調用集合改變,就返回true,若是調用者沒改變,就返回false
11         
12         c.retainAll(c1);//取調用集合和錄入集合的交集,輸出調用者的話,是不會輸出出來兩個集合之間的交集
13         System.out.println(c);
14         //輸出結果  a

 

7.迭代器遍歷

 1     Collection c = new ArrayList();
 2         c.add("c");
 3         c.add("b");
 4         c.add("a");
 5         //使用迭代器進行遍歷
 6         Iterator iter = c.iterator();
 7         //hasNext是判斷還有沒有下一個元素
 8         while(iter.hasNext()) {
 9             //next是輸出下一個元素
10             System.out.println(iter.next());
11         }
 1    //遍歷自定義對象


     Iterator iter = c.iterator(); 2 3 while(iter.hasNext()) { 4 System.out.println(iter.next()); 5 } 6 7 /*輸出結果 8 * Student [name=z, age=34] 9 * Student [name=x, age=45] 10 * Student [name=s, age=23] 11 */ 12 13 14 while(iter.hasNext()) { 15 Student s = (Student)iter.next(); 16 System.out.println(s.getName() + " " + s.getAge()); 17 } 18 /*輸出結果 19 * z 34 20 * x 45 21 * s 23 22 */ 23

 

1  //  size是集合長度
2     for (int i = 0; i <list.size(); i++) {
3                 //System.out.println(list.get(i));
4                 Student s= (Student)list.get(i);
5                 System.out.println(s.getName()+"..."+s.getAge());

   

8.併發修改異常產生的緣由和解決方案

  naex();方法在一個循環中只容許使用一次,不然會對是數據

 1 /*
 2          * 判斷集合中有沒有word元素,若是有就添加javaee,
 3          */
 4         List list = new ArrayList();
 5         list.add("a");
 6         list.add("word");        
 7         list.add("c");
 8         list.add("b");
 9         
10         //迭代器添加元素
11         ListIterator lis = list.listIterator();
12         while (lis.hasNext()) {
13             //向下轉型到string類
14             String str = (String)lis.next();
15             //進行判斷
16             if (str.equals("word")) {
17                 //這是使用迭代器去添加元素,而不是list自己去添加
18                 lis.add("javaee");
19             }
20             
21         }
22         
23         System.out.println(list);
24         //輸出結果爲 [a, word, javaee, c, b]

 

9.vector特有功能

老師沒講,vector會被Arraylist代替,可是須要知道油脂和氣個東西

,代碼也插一下

 1     public static void demo() {
 2         Vector v = new Vector(); // 建立集合對象,List的子類
 3         v.add("a"); // 在集合出現後,爲了實現list的接口,添加的功能
 4         v.addElement("a"); // Vector類出現自己就有的特有的功能
 5         v.addElement("b");
 6         v.addElement("c");
 7         v.addElement("d");
 8 
 9         // Vector迭代s
10         Enumeration en = v.elements(); // 獲取枚舉
11         while (en.hasMoreElements()) { // 判斷集合中是否有元素
12             System.out.println(en.nextElement());// 獲取集合中的元素
13         }
14     }

10.數據結構之鏈表和數組(須要背下來,知識點)

  數組是:查詢快修改快,增刪慢

  鏈表是,查詢慢修改慢,增刪快

 

11.list類的三個子類的特色(須要背,知識點)

  ArrayList:

      底層數據結構是數組,查詢快 ,增刪慢,

      線程不安全,效率高

 

  LinkedList:

      底層數據結構是鏈表,查詢慢,增刪快

      線程不安全,效率高

 

  Vector:

      底層數據結構是數組,查詢快,增刪慢。

      線程安全,效率低

      Vector 相對於 ArrayList 查詢慢(線程安全)

         相對於 LinkedList 增刪慢 (數組結構)

 

  Vector 和 ArrayList 的區別:

      Vector是線程安全效率低

      ArrayList是線程不安全效率高

      共同點:都是數組實現的

  

  ArrayList和LinkedList的區別:

      ArrayList 底層是是數組結果 查詢快,增刪慢

      LinkedList  底層是鏈表結果 查詢慢,增刪快

      共同點:線程都是不安全的

 

  List的三個兒子:

      查詢多,增刪慢用ArrayList

      增刪多,查詢慢用 linkedList

      若是都多就用 ArraayList

相關文章
相關標籤/搜索