Java之Collection的相關(guān)操作

一、Collection接口的方法

是抽象接口, 定義集合的相關(guān)操作,存儲元素集合

  • 添加一個元素

        Collection<String> list = new ArrayList();
        list.add("Merry");
        list.add("Jack");
        System.out.println(list);  //重寫了toString方法
  • 刪除一個元素

        list.remove("Jack");
  • 獲取元素的個數(shù)

       System.out.println(list.size());
  • 判斷是否包含一個元素

        if (list.contains("Jack")){
            System.out.println("有這個元素");
        }else{
            System.out.println("沒有這個元素");
        }
  • 判斷是否為空

       if (list.isEmpty()){
            System.out.println("是空的");
        }
  • 判斷是否包含一個元素

        if (list.contains("Jack")){
            System.out.println("有這個元素");
        }else{
            System.out.println("沒有這個元素");
        }
  • 判斷兩個集合是否相同

        Collection<String > list2 = new ArrayList<>();
        list2.add("Android");
        list2.add("Jack");
        list2.add("Tom");
        list2.add("Merry");


        if (list.equals(list2)){
            System.out.println("兩個集合相同");
        }else{
            System.out.println("兩個集合不相同");
        }
  • 清空

        list.clear();
        System.out.println(list);
image.png

二、集合的遍歷

集合框架:Iterator

  • Iterator(迭代器)用于遍歷集合元素,獲取迭代器可以使用Collection定義的方法:-Iterator iterator()
  • 迭代器Iterator是一個接口,集合在重寫Collection的iterator()方法時利用內(nèi)部類提供了迭代器的實現(xiàn)
  • Iterator提供了統(tǒng)一的遍歷集合元素的方式,其提供了用于遍歷集合的方法(一般結(jié)合while()使用):
    ? ?boolean hasNext():判斷集合是否還有元素可以遍歷
    ? ? E next():返回迭代的下一個元素
    ? ? Object next():返回迭代器剛越過的元素的引用,返回值是Object,需要強制轉(zhuǎn)換成自己需要的類型
    ? void remove():刪除迭代器剛越過的元素
  • Iterator有一個很大的優(yōu)點,就是我們不必知道集合的內(nèi)部結(jié)果,集合的內(nèi)部結(jié)構(gòu)、狀態(tài)由Iterator來維持,
  • 通過統(tǒng)一的方法hasNext()、next()來判斷、獲取下一個元素,

1. 使用Iterator來遍歷

        //hasNext 判斷是否有元素
        //next  獲取下一個對象
        //remove 刪除當前遍歷后的對象
        Iterator iterator = list2.iterator();

        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

2. for-each 增強for循環(huán) 快速循環(huán)

       for (String string:list2){
            System.out.println(string+" ");
        }

3. for 循環(huán)

         for (int i = 0;i < list2.size();i++){
            System.out.println(((ArrayList<String>) list2).get(i));
        }

三、List接口 (extends Collection)

ArrayList LinkedArrayList
連續(xù)的內(nèi)存空間 內(nèi)部使用鏈表實現(xiàn) ,基本不連續(xù)
? ? ? ? ? ? ? ?優(yōu)點:訪問方便 get() ???? ? ? ? ? ? ? 缺點:刪除 添加 不高效 優(yōu)點:增加 刪除效率高

集合里面只能放對象,自動的將基本數(shù)據(jù)類型包裝為對應(yīng)的類
基本數(shù)據(jù)類型: byte short int long float double char boolean
包裝類: Byte Short Integer Long Float Double Char Boolean

常見方法:

  • add(element)在末尾添加;
  • add(i,element)在指定位置插入
  • 訪問指定元素
  • 修改一個元素
  • 刪除指定位置的元素
  • 刪除指定的對象
  • 刪除所有 清空
  • 將一個集合的內(nèi)容添加到當前集合中
  • 取兩個集合的交集
  • 訪問某個對象在集合里面的索引 第一次 / 最后一次 出現(xiàn)的位置
  • 將ArrayList 轉(zhuǎn)化為普通數(shù)組
  • 獲取某個范圍的子集合

代碼示例:

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

        //訪問指定元素
        score.get(1);

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

        //刪除
        score.remove(0);  //刪除指定位置的元素
        System.out.println(score);

        score.remove((Integer)2);  //刪除指定的對象
        System.out.println(score);

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

        ArrayList<Integer> a1 = new ArrayList<>();
        a1.add(1);
        a1.add(2);
        a1.add(3);

        //將一個集合的內(nèi)容添加到當前集合中
        score.addAll(a1);
        System.out.println(score);

        ArrayList<Integer> a2 = new ArrayList<>();
        a2.add(2);
        a2.add(3);
        score.retainAll(a2);  //取兩個集合的交集
        System.out.println(score);

        //indexOf 訪問某個對象在集合里面的索引
        ArrayList<Integer> a3 = new ArrayList<>();
        a3.add(1);
        a3.add(2);
        a3.add(2);
        a3.add(1);
        System.out.println(a3.indexOf(2)); //第一次出現(xiàn)的位置
        System.out.println(a3.lastIndexOf(2)); //最后一次出現(xiàn)的位置

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

        System.out.println("\n----------------------------");
        Object[] objects1 = a3.toArray();
        for (Object ob:objects1){
            System.out.print(ob);
        }

        System.out.println(" \n----------------------------");
        Iterator iterator = a3.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next());
        }


      // 獲取某個范圍的子集合
        List<Integer> integers = a3.subList(1,3);
        System.out.println("\n"+integers);
 

四、Lambda表達式

 ArrayList<Integer> nums = new ArrayList<>();
        nums.add(1);
        nums.add(2);
        nums.add(3);
        nums.add(4);

        //Lambda表達式
        nums.removeIf(element -> element % 2 == 0);

        for (int i = 0;i < nums.size();i++){
            Integer obj = nums.get(i);
            if (obj % 2 == 0){
                nums.remove(i);
                i--;  //管理好i的指向  防止跳過某個元素
            }
        }
        System.out.println(nums);

使用方式:

1. 使用方式 定義一個類實現(xiàn)接口

        ArrayClass ac = new ArrayClass();
        int[] num = {1,2,3,4,5,6};
        GYLClass gc = new GYLClass();
        ac.test(num,gc);
//閉包 closure 把函數(shù)作為一個方法的參數(shù)
class ArrayClass{
    public void test(int[] target,Show show){
        for (int element:target){
            show.customShow(element);
        }
    }
}

//必須是接口 這個接口里面只有一個方法
interface Show{
    void customShow(int element);
}

class GYLClass implements Show{

    @Override
    public void customShow(int element) {
        System.out.println(element);
    }
}

2. 使用匿名類

   ArrayClass ac = new ArrayClass();
        int[] num = {1,2,3,4,5,6};
        GYLClass gc = new GYLClass();
        ac.test(num, new Show() {
            @Override
            public void customShow(int element) {
                System.out.println(element);
            }
        });

3. 使用Lambda表達式

   // 如果參數(shù)是一個接口對象 且接口里面只有一個方法
     //   把這個方法作為參數(shù)傳遞  可以省略方法名
        ArrayClass ac = new ArrayClass();
        int[] num = {1,2,3,4,5,6};
        ac.test(num,(int element) -> {System.out.println(element); } );

4. 如果只有一個參數(shù) 參數(shù)類型可以省略

        ArrayClass ac = new ArrayClass();
        int[] num = {1,2,3,4,5,6};
        ac.test(num,element -> {System.out.println(element);});

5. 如果代碼塊里只有一行語句 大括號可以省略

        ArrayClass ac = new ArrayClass();
        int[] num = {1,2,3,4,5,6};
        ac.test(num,element -> System.out.println(element));

Java集合框架:


Java集合框架

五、心得體會

??對于Collection類的一些方法還有一些不太理解的地方,需要多加練習!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 一、基礎(chǔ)知識:1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,565評論 0 4
  • 四、集合框架 1:String類:字符串(重點) (1)多個字符組成的一個序列,叫字符串。生活中很多數(shù)據(jù)的描述都采...
    佘大將軍閱讀 874評論 0 2
  • Java 語言支持的類型分為兩類:基本類型和引用類型。整型(byte 1, short 2, int 4, lon...
    xiaogmail閱讀 1,450評論 0 10
  • 小編費力收集:給你想要的面試集合 1.C++或Java中的異常處理機制的簡單原理和應(yīng)用。 當JAVA程序違反了JA...
    八爺君閱讀 5,216評論 1 114
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,251評論 0 38

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