Java學(xué)習(xí):Collection集合

一、學(xué)習(xí)目的

Java語(yǔ)言中數(shù)組可以存儲(chǔ)多個(gè)元素,它的缺點(diǎn)就是數(shù)組一旦創(chuàng)建,它的長(zhǎng)度就不能再發(fā)生改變。但在實(shí)際的開發(fā)過(guò)程中,我們需要一個(gè)可以隨時(shí)改變大小的數(shù)組,因此Java語(yǔ)言就提供了Collection集合。

二、學(xué)習(xí)內(nèi)容

一、Collection接口

Collection抽象接口,定義集合的相關(guān)操作:
1,List接口 列表 特點(diǎn):存儲(chǔ)的數(shù)據(jù)有序 內(nèi)容可重復(fù)
例如 :
ArrayList:接口實(shí)現(xiàn)類, 數(shù)組, 隨機(jī)訪問
LinkedArrayList:接口實(shí)現(xiàn)類, 鏈表, 插入刪除
2,Set接口 “集合” 特點(diǎn):存儲(chǔ)的數(shù)據(jù)無(wú)序 數(shù)據(jù)之間不重復(fù)
例如: HashSet 使用hash表(數(shù)組)存儲(chǔ)元素

三、List接口的方法:
List方法
四、List方法具體使用

1,add 方法,集合末尾添加元素

    // 添加一個(gè)元素
    Collection<String> list = new ArrayList();
    list.add("hello world");
    list.add("Merry");
    System.out.println(list);

2,刪除集合中的元素

    //刪除一個(gè)元素
    list.remove("hello world");
    System.out.println(list);
    System.out.println(list.size());

3,判斷是否包含某個(gè)元素

     //判斷是否包含一個(gè)元素
    if(list.contains("Merry")){
        System.out.println("包含");
    }else{
        System.out.println("不包含");
    }

4,判斷集合是否為空

    //判斷是否為空
    if(list.isEmpty()){
        System.out.println("集合為空");
    }

5,判斷兩個(gè)集合是否相同

    //判斷兩個(gè)集合是否相同
    Collection<String> list2 = new ArrayList<>();
    list2.add("Jack");
    list2.add("and");
    list2.add("Merry");
    if(list.equals(list2)){
        System.out.println("兩個(gè)集合內(nèi)容相同");//比較集合的內(nèi)容
    }else{
        System.out.println("兩個(gè)集合內(nèi)容不相同");
    }

6,遍歷集合

  • 使用Iterator來(lái)遍歷集合
    1, hasNext 判斷是否由有元素;
    2, next 獲取下一個(gè)元素;

    Iterator iterator = list2.iterator();
    while(iterator.hasNext()){
        System.out.print(iterator.next()+" ");
    }
    

3,錯(cuò)誤的使用示范示范:

   while(iterator.next() != null){
     System.out.println(iterator.next());
   }       // 錯(cuò)誤方式
  • 使用快速循環(huán)實(shí)現(xiàn)

     //2,for each 快速循環(huán)
      for(String obj:list2){
          System.out.print(obj+" ");
      }
    
  • for循環(huán)實(shí)現(xiàn)

     //for循環(huán)
      for(int i = 0; i < list2.size(); i++){
          System.out.println(((ArrayList<String>) list2).get(i)+" ");
      }
    
五、ArrayList類的使用
  • ArrayList :連續(xù)的內(nèi)存空間 優(yōu)點(diǎn):訪問方便, get()方法 ; 缺點(diǎn):刪除,添加
  • LinkedArrayList :內(nèi)部使用鏈表實(shí)現(xiàn) 內(nèi)存基本不連續(xù) 優(yōu)點(diǎn):增加 刪除方便 ;缺點(diǎn):訪問不方便
    注:集合里面只能存放引用,如果要存放基本數(shù)據(jù)類型,要自動(dòng)將基本數(shù)據(jù)類型轉(zhuǎn)化成包裝類 ,byte->Byte , char->Char ,int->Integer , long->Long, float->Float , double->Double

(1)ArrayList方法的具體使用
1,向集合中增加元素

   ArrayList<Integer> score = new ArrayList<>();
    score.add(2);
    score.add(3); //添加是在末尾添加
    score.add(0,1);  //在指定位置插入元素
    System.out.println(score);

2,訪問元素

   //訪問指定元素
   int temp = score.get(2);
   System.out.println(temp);

3,修改指定位置的元素

     //修改一個(gè)元素
    score.set(0,0); //修改第一個(gè)元素0
    System.out.println(score);

4,刪除一個(gè)元素

     //刪除
    score.remove(0);//刪除指定位置的元素
    score.remove((Integer)2); //刪除指定的對(duì)象,整數(shù)2

    score.clear();//清空 刪除所有
    System.out.println(score);

5,將一個(gè)集合的所有元素添加到另外一個(gè)集合

    ArrayList<Integer> a2 = new ArrayList<>();
    a2.add(1);
    a2.add(2);
    a2.add(3);
    a2.add(4);
    a2.add(5);
    score.addAll(a2);//將一個(gè)集合直接添加到另外一個(gè)
    System.out.println(score);

6,取兩個(gè)集合的交集

    ArrayList<Integer> a3 = new ArrayList<>();
    a3.add(1);
    a3.add(2);
    score.retainAll(a3);
    System.out.println(score);//輸出兩個(gè)集合的交集

7,查找某個(gè)元素在集合里的索引位置

     //訪問某個(gè)對(duì)象在集合里面的索引位置
    ArrayList<Integer> a4 = new ArrayList<>();
    a4.add(1);
    a4.add(2);
    a4.add(1);
    a4.add(2);
    a4.add(3);
    a4.add(1);
    System.out.println(a4.indexOf(1));//集合里面兩個(gè)1,輸出的是第一個(gè)1出現(xiàn)的位置
    System.out.println(a4.lastIndexOf(1));//最后一個(gè)1出現(xiàn)的位置

8,將ArrayList轉(zhuǎn)化成普通數(shù)組
第一種:

    //將ArrayList轉(zhuǎn)化為普通數(shù)組
   Integer[] objects = new Integer[a4.size()];
   a4.toArray(objects);
   for(Integer integer:objects){
       System.out.print(integer+" ");
   }

第二種:

  Object[] objects1 = a4.toArray();
    for(Object  integer:objects1){
        System.out.print(integer+" ");
    }
    Iterator iterator = a4.iterator();
    while(iterator.hasNext()){
        System.out.print(iterator.next()+" ");
    }

9,刪除符合某種條件的元素

    //刪除某個(gè)范圍內(nèi)的數(shù)據(jù)
    ArrayList<Integer> nums = new ArrayList<>();
    nums.add(1);
    nums.add(2);
    nums.add(3);
    nums.add(4);
    //Lambda表達(dá)式
    nums.removeIf(element-> element%2 == 0);
    System.out.println(nums);

注意:不能使用循環(huán)的方式刪除

六、Lambda表達(dá)式的使用

(1) Lambda 是一個(gè)匿名函數(shù),我們可以把 Lambda表達(dá)式理解為是一段可以傳遞的代碼(將代碼像數(shù)據(jù)一樣進(jìn)行傳遞)。可以寫出更簡(jiǎn)潔、更靈活的代碼。作為一種更緊湊的代碼風(fēng)格,使Java的語(yǔ)言表達(dá)能力得到了提升。
(2)使用:

//閉包 enclusure 把函數(shù)作為一個(gè)方法的參數(shù)
class ArrayClass{
public void test(int[] target,Show s){
    for(int element :target){
        s.customShow(element);
      }
  }
}
//必須是接口 這個(gè)接口里面只有一個(gè)方法
interface Show{
void customShow(int element);
}

如果參數(shù)是一個(gè)接口類對(duì)象,且接口里面只有一個(gè)方法 把這個(gè)方法作為參數(shù)傳遞可以省略方法名 ,如果只有一個(gè)參數(shù),和參數(shù)類型可以省略,如果代碼塊里面只有一行語(yǔ)句,大括號(hào)也可以省略 ;

  ArrayClass ac = new ArrayClass();
  int[] num = {1,2,3,4,5,6};
  ac.test(num,(int element) -> {System.out.print(element+" ");});
七、Map接口

Map接口 保存有映射關(guān)系的對(duì)象 鍵值對(duì) 鍵不能相同 值可以相同
例如:
HashMap 底層數(shù)據(jù)結(jié)構(gòu)采用哈希表實(shí)現(xiàn),元素?zé)o序且唯一,線程不安全,效率高;

三、學(xué)習(xí)感悟

今天學(xué)習(xí)的難點(diǎn)就是Lambda表達(dá)式的使用,這點(diǎn)內(nèi)容不容易理解,需要多思考,多聯(lián)系。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java集合類可用于存儲(chǔ)數(shù)量不等的對(duì)象,并可以實(shí)現(xiàn)常用的數(shù)據(jù)結(jié)構(gòu)如棧,隊(duì)列等,Java集合還可以用于保存具有映射關(guān)...
    小徐andorid閱讀 2,079評(píng)論 0 13
  • 四、集合框架 1:String類:字符串(重點(diǎn)) (1)多個(gè)字符組成的一個(gè)序列,叫字符串。生活中很多數(shù)據(jù)的描述都采...
    佘大將軍閱讀 872評(píng)論 0 2
  • 1、Collection集合-概述 1)、集合是一個(gè)裝”引用類型”的”容器” 2)、Java內(nèi)部提供了很多”集合類...
    煙火式Java閱讀 283評(píng)論 0 0
  • 1、Collection集合-概述 1)、集合是一個(gè)裝”引用類型”的”容器” 2)、Java內(nèi)部提供了很多”集合類...
    煙火式Java閱讀 1,238評(píng)論 0 5
  • title: java集合框架學(xué)習(xí)總結(jié) tags:集合框架 categories:總結(jié) date: 2017-03...
    行徑行閱讀 1,815評(píng)論 0 2

友情鏈接更多精彩內(nèi)容