<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      493-504Collection接口(1)

      一、練習(xí)

      package com.day5_22;
      
      /**
       * @author alice_huijing
       * @version 1.0
       */
      public class Test01 {
          public static void main(String[] args) {
              /*
                  第一題:1、將字符串中指定部分進(jìn)行反轉(zhuǎn),比如將 abcdef中的bcde反轉(zhuǎn)為aedcbf
                        2、編寫(xiě)方法public static String reverse(String str, int start, int end)
               */
              System.out.println("==交換之前==");
              System.out.println("abcdef");
              System.out.println("==交換之后==");
              try {
                  System.out.println(reverse("abcdef", 1, 4));
              } catch (Exception e) {
                  System.out.println(e.getMessage());
              }
          }
      
          /**
           * 1\
           * 因?yàn)镾tring是不能修改的,需要轉(zhuǎn)換成為char數(shù)組,char數(shù)組的元素可以交換
           * char[] chars = str.toCharArray();
           * 2\
           * 什么時(shí)候產(chǎn)生交換的行為,現(xiàn)在有兩個(gè)箭頭分別指向start的位置和end的位置,start的位置
           * 的箭頭往前面移動(dòng),end的箭頭往后面移動(dòng),當(dāng)兩個(gè)箭頭錯(cuò)開(kāi)或者是指向同一個(gè)元素的時(shí)候就不需要發(fā)生交換的行為了。
           * 3\
           * 最后再將char數(shù)組轉(zhuǎn)換成String返回
           * 4\
           * 規(guī)避一下數(shù)組越界的問(wèn)題
           * 編程思想:寫(xiě)驗(yàn)證代碼的時(shí)候,寫(xiě)出正確的情況然后取反即可,這種是最好的,正確的情況容易想到
           * @param str
           * @param start
           * @param end
           * @return
           */
          public static String reverse(String str, int start, int end) {
              if(!(str!=null && start >=0
                  && end > start
                  && end < str.length())) {
                  throw new RuntimeException("參數(shù)不正確");
              }
              char[] chars = str.toCharArray();
              char temp = ' ';
              for (int i = start,j = end; i < j; i++, j--) {
                  temp = chars[i];
                  chars[i] = chars[j];
                  chars[j] = temp;
              }
              return new String(chars);
          }
      }
      
      
      package com.day5_22;
      
      /**
       * @author alice_huijing
       * @version 1.0
       */
      /*
          第二題
          輸入用戶名,密碼,郵箱,如果信息錄入成功,則提示注冊(cè)成功,否則生成異常對(duì)象
          要求:
          1、用戶名長(zhǎng)度為2或者是3或者是4
          2、密碼的長(zhǎng)度為6,要求全部是數(shù)字
          3、郵箱中包含@和.并且@在。的前面
          isDigital
       */
      public class Test02 {
          public static void main(String[] args) {
              String name = "ali";
              String pwd = "123456";
              String email = "alice@gmail.com";
      
              try {
                  userRegister(name, pwd, email);
                  System.out.println("恭喜你,注冊(cè)成功!");
              } catch (Exception e) {
                  System.out.println(e.getMessage());
              }
          }
      
          /**
           * 輸入姓名,密碼,郵箱-三個(gè)參數(shù)
           * 確定方法名稱-用戶注冊(cè)
           * 拋出異常,返回值為void
           * main中調(diào)用設(shè)置為static
           * @param name
           * @param pwd
           * @param email
           */
          public static void userRegister(String name, String pwd, String email) {
              // 校驗(yàn)
              if (!(name != null & pwd != null && email != null)) {
                  throw new RuntimeException("參數(shù)不能為null");
              }
      
              // 1、確定用戶名
              int userLength = name.length();
              if (!(userLength>=2 && userLength<=4)) {
                  throw new RuntimeException("用戶名長(zhǎng)度為2或者3或者4");
              }
      
              // 2、判斷密碼
              if (!(pwd.length()==6 && isDigital(pwd))) {
                  throw new RuntimeException("密碼長(zhǎng)度為6,要求全部是數(shù)字");
              }
      
              // 3、@和.
              int i = email.indexOf('@');
              int j = email.indexOf('.');
              if (!(i > 0 && j > i)) {
                  throw new RuntimeException("郵箱中包含@和.,并且@在.的前面");
              }
          }
      
          public static boolean isDigital(String str) {
              char[] chars = str.toCharArray();
              for (int i = 0; i < chars.length; i++) {
                  if (chars[i] < '0' || chars[i] > '9') {
                      return false;
                  }
              }
              return true;
          }
      }
      
      
      package com.day5_22;
      
      /**
       * @author alice_huijing
       * @version 1.0
       */
      /*
          第三題:
          1、編寫(xiě)程序,輸入形式為:Han Shun Ping的人名,以Ping,Han .S的形式打印出來(lái)
          其中.S是中間單詞的首字母。
          2、例如輸入"Willian Jefferson Clinton",輸出形式為:Clinton,Willian.J
       */
      //public class Test03 {
      //    public static void main(String[] args) {
      //        String name = "Willian Jefferson Clinton";
      //        printName(name);
      //    }
      //    public static void printName(String str) {
      //        if (str == null) {
      //            System.out.println("str 不能為空");
      //            return ;
      //        }
      //        String[] names = str.split(" ");
      //        if (names.length != 3) {
      //            System.out.println("輸入的字符串格式不正確");
      //            return ;
      //        }
      //        String format = String.format("%s,%s .%c", names[2], names[0], names[1].toUpperCase().charAt(0));
      //        System.out.println(format);
      //    }
      //}
      
      /*
          第四題:
          輸入字符串,判斷里面有多少個(gè)大寫(xiě)字母,多少個(gè)小寫(xiě)字母,多少個(gè)數(shù)字
       */
      public class Test03 {
          public static void main(String[] args) {
              String str = "Alice Python AA107107@Ww";
              countStr(str);
          }
      
          public static void countStr(String str) {
              if (str == null) {
                  System.out.println("輸入不能為null");
                  return;
              }
              int strLen = str.length();
              int numCount = 0;
              int lowerCount = 0;
              int upperCount = 0;
              int otherCount = 0;
              for (int i = 0; i < strLen; i++) {
                  if (str.charAt(i) >= '0' && str.charAt(i) <= '9') {
                      numCount++;
                  } else if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z') {
                      lowerCount++;
                  } else if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z') {
                      upperCount++;
                  } else {
                      otherCount++;
                  }
              }
              System.out.println("數(shù)字有:" + numCount);
              System.out.println("小寫(xiě)字母有:" + lowerCount);
              System.out.println("大寫(xiě)字母有:" + upperCount);
              System.out.println("其他有:" + otherCount);
          }
      }
      
      
      package com.day5_22;
      
      /**
       * @author alice_huijing
       * @version 1.0
       */
      public class Test04 {
          public static void main(String[] args) {
              String s1 = "hspedu";  // 這里直接在常量池中創(chuàng)建一個(gè)字符串常量,s1指向它
              Animal a = new Animal(s1);  // 在堆中創(chuàng)建一個(gè)Animal對(duì)象,對(duì)象的name屬性指向常量池中已經(jīng)存在的hspedu
              Animal b = new Animal(s1);  // 在堆中創(chuàng)建一個(gè)Animal對(duì)象,對(duì)象的name屬性指向常量池中已經(jīng)存在的hspedu
              System.out.println(a==b);  // 當(dāng)前a和b是兩個(gè)堆中不同對(duì)象的引用,所以結(jié)果為False
              System.out.println(a.equals(b));  // 因?yàn)锳nimal中沒(méi)有重寫(xiě)從Object繼承下來(lái)的equals,所以這里判斷的還是是否==,結(jié)果False
              System.out.println(a.name == b.name);  // 因?yàn)閔spedu已經(jīng)存在,所以就不用創(chuàng)建新的,所以兩個(gè)對(duì)象的屬性都是這個(gè),true
      
              String s4 = new String("hspedu");  // 創(chuàng)建一個(gè)字符串對(duì)象,堆中對(duì)象中還有一個(gè)value屬性來(lái)指向池中的hspedu
              String s5 = "hspedu";  // hspedu已經(jīng)存在,所以s5直接指向池中的hspedu
              System.out.println(s1 == s4);  // s1直接指向常量池當(dāng)中的hspedu,s4指向的是堆當(dāng)中的一個(gè)字符串對(duì)象,所以為false
              System.out.println(s4==s5);  // s4指向的是堆當(dāng)中的一個(gè)字符串對(duì)象,s5指向的是池中的hspedu,結(jié)果為false
              String t1 = "hello" + s1;  // 這里底層優(yōu)化,需要在堆當(dāng)中創(chuàng)建一個(gè)字符串對(duì)象,屬性value指向常量池的hellohspedu
              String t2 = "hellohspedu";  // 這個(gè)字符串常量已經(jīng)存在,直接指向即可。
              System.out.println(t1.intern()==t2);  // intern相當(dāng)于指向的是最終常量池的字符串常量,t2是直接指向,所以這里為true
          }
      }
      /*
      false
      false
      true
      false
      false
      true
       */
      class Animal {
          String name ;
          public Animal(String name) {
              this.name = name;
          }
      }
      
      

      二、Collection接口(未完)

      package com.day5_22;
      
      /**
       * @author alice_huijing
       * @version 1.0
       */
      /*
          目錄:
          集合框架體系圖
          Collection接口 特點(diǎn) 方法
          Collection接口的子接口:List實(shí)現(xiàn)類:ArrayList,LinkedList,Vector
          Collection接口的子接口:Set實(shí)現(xiàn)類:HashSet,LinkedHashSet
          Map接口 特點(diǎn)方法 遍歷方式
          Map接口的實(shí)現(xiàn)類:HashMap、Hashtable等
          Collections工具類的使用
          即:
              集合框架體系
              Collection
                  List
                      ArrayList
                      LinkedList
                      Vector
                  Set
                      HashSet
                      LinkedHashSet
                      TreeSet
              Map
                  HashMap
                  Hashtable
                  LinkedHashMap
                  TreeMap
                  Properties
              Collections
         集合的理解以及好處:
          前面我們保存多個(gè)數(shù)據(jù)使用的是數(shù)組,數(shù)組有很多不足的地方,分析一下!:
          數(shù)組,
              1、數(shù)組長(zhǎng)度開(kāi)始時(shí)候必須指定,而且一旦指定,不能更改
              2、保存的時(shí)候必須為同一類型的元素
              3、使用數(shù)組進(jìn)行增加元素比較麻煩
          集合,
              1、可以動(dòng)態(tài)保存任意多個(gè)對(duì)象,使用比較方便!
              2、提供了一系列方便操作對(duì)象的方法
              3、使用集合添加,刪除新元素簡(jiǎn)單明了
       */
      public class Collection05 {
      }
      
      
      package com.day5_22;
      
      import java.util.ArrayList;
      import java.util.HashMap;
      
      /**
       * @author alice_huijing
       * @version 1.0
       */
      public class Collection06 {
          @SuppressWarnings({"all"})
          public static void main(String[] args) {
              ArrayList arrayList = new ArrayList();  // 單列集合
              arrayList.add("jack");  // 單列數(shù)據(jù)
              arrayList.add("tom");
              HashMap hashMap = new HashMap();  // 雙列集合
              hashMap.put("NO1", "北京");  // 雙列數(shù)據(jù)
              hashMap.put("NO2", "上海");
          }
      }
      
      /*
          集合的框架體系(關(guān)于集合的框架體系要求背誦)
          進(jìn)入到Collection接口可以發(fā)現(xiàn),該接口繼承了一個(gè)Iterable的接口
          而Collection下面還有兩個(gè)比較重要的子接口
          List和Set
          而List下面有三個(gè)重要的實(shí)現(xiàn)子類:
              Vector
              LinkedList  這個(gè)是鏈表的
              ArrayList   這個(gè)是數(shù)組的
          而Set下面有兩個(gè)重要的實(shí)現(xiàn)子類:
              HashSet
              TreeSet
          以上是一組集合
      
          另外還有一組集合Map
              Map接口下面有三個(gè)實(shí)現(xiàn)子類:
                  Hashtable,HashMap,TreeMap
              在Hashtable下面有子類Properties
              HashMap下面有子類LinkedHashMap
      
          總結(jié):
              1、集合主要分成兩組
              一組是單列集合,一組是雙列集合
              什么是單列集合,什么是雙列集合?
              2、Collection接口下面有兩個(gè)重要的子接口,List和Set
              它們的實(shí)現(xiàn)子類都是單列集合
              3、Map接口的實(shí)現(xiàn)子類是雙列集合,存放的是K-V這樣的數(shù)據(jù)(鍵值對(duì))
       */
      
      package com.day5_22;
      
      import java.util.ArrayList;
      import java.util.List;
      
      /**
       * @author alice_huijing
       * @version 1.0
       */
      public class Collection08 {
          @SuppressWarnings({"all"})
          public static void main(String[] args) {
              /*
                  接口不能被實(shí)例化,所以以一個(gè)子類來(lái)講解這個(gè)接口里面的常用方法。--ArrayList
                  1)add方法,添加單個(gè)元素
                  2)remove,刪除指定元素
                  3)contains,查找元素是否存在
                  4)size,獲取元素的個(gè)數(shù)
                  5)isEmpty,判斷是否為空
                  6)clear,清空
                  7)addAll,添加多個(gè)元素
                  8)containsAll,查找多個(gè)元素是否都存在
                  9)removeAll,刪除多個(gè)元素
                  10)說(shuō)明,以ArrayList實(shí)現(xiàn)類來(lái)演示
               */
              // 1、創(chuàng)建一個(gè)ArrayList
              // 使用子接口來(lái)接收
              List list = new ArrayList();
      
              // 2、add
              list.add("alice");  // 這里可以看到參數(shù)是一個(gè)Object的,所以只要是Object類以及Object的子類都可以放到list里面
              list.add(10);  // 這里放整數(shù)有一個(gè)自動(dòng)裝箱的過(guò)程。
              list.add(true);  // 也有一個(gè)自動(dòng)裝箱的過(guò)程
              System.out.println("list = " + list);  // list = [alice, 10, true]這里是對(duì)象了
              // 這里相當(dāng)于list.add(new Integer(10)),存放的是對(duì)象。
      
              // 3、remove,刪除指定的元素,不想要可以這樣刪除
              // 這里的remove方法是被重載了的
              // 可以指定刪除索引,也可以指定刪除哪一個(gè)元素Object
              // Object的是返回boolean,如果是按照索引是返回被刪除的對(duì)象
              list.remove(0);  // 刪除第一個(gè)元素
              System.out.println("list = " + list);  // alice沒(méi)有了
      //        list.remove("alice");  // 這個(gè)就是指定刪除某個(gè)對(duì)象元素,或者true或者10
              // 我們通過(guò)list來(lái)進(jìn)行數(shù)據(jù)的添加和刪除非常方便,比數(shù)組方便。
      
              // 4、contains,查找元素是否存在
              System.out.println(list.contains("alice"));  // 之前被刪除了所以已經(jīng)沒(méi)有了
      
              // 5、size可以返回元素的個(gè)數(shù)
              System.out.println(list.size());  // 目前里面應(yīng)該有二個(gè)元素,之前刪除掉了一個(gè)元素
      
              // 6、isEmpty,判斷是否為空
              System.out.println(list.isEmpty());  // 有兩個(gè)元素,所以當(dāng)前為false
      
              // 7、clear 清空
              list.clear();  // 再輸出來(lái)看list = []
              System.out.println("list = " + list);
      
              // 8、addAll可以添加多個(gè)元素,可以傳入一個(gè)Collection c,也就是實(shí)現(xiàn)了這個(gè)接口的類的對(duì)象都可以傳入進(jìn)去
              ArrayList list2 = new ArrayList();
              list2.add("紅樓夢(mèng)");
              list2.add("三國(guó)演義");
              list.addAll(list2);  // add相當(dāng)于python里對(duì)列表的append的操作,而addAll相當(dāng)于python的extend的操作,打散
              System.out.println("list = " + list);// 之前被清空的,現(xiàn)在傳入了一個(gè)list進(jìn)去現(xiàn)在又有了元素
      
              // 9、containsAll 查看多個(gè)元素是否都存在
              System.out.println(list.containsAll(list2));  // 看看這個(gè)list里面是否有l(wèi)ist2的所有元素,剛剛傳入進(jìn)去了,確實(shí)有
      
              // 10、removeAll可以刪除多個(gè)元素
              list.add("聊齋");
              list.removeAll(list2);  // 刪除含有l(wèi)ist2中的所有元素
              System.out.println("list = " + list);
          }
      }
      
      /*
          實(shí)現(xiàn)了Collection的子類有哪些特點(diǎn):
              子類有Vector,ArrayList,LinkedList,HashSet,TreeSet
          Collection接口里面有什么方法也了解一下。
          這個(gè)Collection接口繼承了Iterable,
              public interface Collection<E> extends Iterable<E>
              1)Collection實(shí)現(xiàn)子類可以存放多個(gè)元素,每個(gè)元素可以是Object
              2)有些Collection的實(shí)現(xiàn)類,可以存放重復(fù)的元素,有些不可以
              3)有些Collection的實(shí)現(xiàn)類,有些是有序的比如List,有些是無(wú)序的,比如Set
              4)Collection接口沒(méi)有直接的實(shí)現(xiàn)子類,是通過(guò)它的子接口Set和List來(lái)實(shí)現(xiàn)的。
       */
      
      package com.day5_22;
      
      import java.util.ArrayList;
      import java.util.Collection;
      import java.util.Iterator;
      
      /**
       * @author alice_huijing
       * @version 1.0
       */
      public class Collection09 {
          @SuppressWarnings({"all"})
          public static void main(String[] args) {
              Collection col = new ArrayList();
      
              col.add(new Book("三國(guó)演義", "羅貫中", 10.1));
              col.add(new Book("小李飛刀", "古龍", 5.1));
              col.add(new Book("紅樓夢(mèng)", "曹雪芹", 34.6));
      
              System.out.println("col = " + col);
              // 現(xiàn)在希望能夠遍歷集合
              // 1、先得到這個(gè)集合的對(duì)應(yīng)的迭代器Iterator
              // 只要是實(shí)現(xiàn)了這個(gè)Collection接口的就必須實(shí)現(xiàn)Iterator方法
              Iterator iterator = col.iterator();
              // 2、使用while循環(huán)遍歷
              while (iterator.hasNext()) {  // 看看集合中是否看存在數(shù)據(jù),如果沒(méi)有數(shù)據(jù)就直接退出循環(huán)
                  Object obj = iterator.next();  // 因?yàn)槭裁炊伎梢苑牛苑祷氐氖且粋€(gè)Object的,需要注意。
                  // 3、得到這個(gè)元素對(duì)象之后就可以使用
                  System.out.println("obj = " + obj); // 運(yùn)行類型取決于真正的類型,這里相當(dāng)于多態(tài)數(shù)據(jù)的時(shí)候我們講過(guò)的。
                  // 這里在進(jìn)行while循環(huán)的時(shí)候可以使用快捷鍵快速生成itit然后回車即可生成
              }
              // tip,通過(guò)Ctrl + J的方式可以將當(dāng)前IDEA中存在的所有快捷模板提示出來(lái),比如itit的,sout的等。
      
              /*
                  細(xì)節(jié)說(shuō)明,在使用迭代器進(jìn)行迭代的時(shí)候,當(dāng)你將while循環(huán)退出的時(shí)候需要進(jìn)行一點(diǎn)說(shuō)明:
                      當(dāng)退出while循環(huán)之后,我們這個(gè)游標(biāo),就是這里的箭頭已經(jīng)指向集合中最后的位置了,不能再取了
                      如果再取就會(huì)拋出異常。
               */
              // 這個(gè)地方再取會(huì)出現(xiàn)異常
      //        iterator.next(); // java.util.NoSuchElementException
              /*
                  4、如果希望再次遍歷,需要重置我們的迭代器,就是相當(dāng)于原先這個(gè)箭頭是在集合的開(kāi)始的,我們需要將箭頭復(fù)位
                  iterator = col.iterator(); // 這樣就行了。
               */
              iterator = col.iterator();
              System.out.println(iterator.next()); // 重置了底層的箭頭,這樣又能夠訪問(wèn)了。
          }
      }
      
      class Book {
          private String name;
          private String author;
          private double price;
      
          public Book(String name, String author, double price) {
              this.name = name;
              this.author = author;
              this.price = price;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public String getAuthor() {
              return author;
          }
      
          public void setAuthor(String author) {
              this.author = author;
          }
      
          public double getPrice() {
              return price;
          }
      
          public void setPrice(double price) {
              this.price = price;
          }
      
          @Override
          public String toString() {
              return "Book{" +
                      "name='" + name + '\'' +
                      ", author='" + author + '\'' +
                      ", price=" + price +
                      '}';
          }
      }
      /*
          來(lái)看Collection接口遍歷元素的方式,只要是實(shí)現(xiàn)了這個(gè)接口的類在遍歷包含的元素的時(shí)候可以又兩種方式
          第一種是使用Iterator迭代器的方式
              這個(gè)Iterator是怎么來(lái)的?
          Collection上面還有一個(gè)父接口Iterable,里面有一個(gè)非常重要的方法
          可以通過(guò)iterator方法返回一個(gè)迭代器對(duì)象
          我們可以使用這個(gè)迭代器對(duì)象來(lái)進(jìn)行所有元素的遍歷,但凡是實(shí)現(xiàn)了Collection的子類,都可以獲得一個(gè)迭代器
          來(lái)遍歷里面的所有元素。
          1)Iterator對(duì)象稱為迭代器,主要是用來(lái)遍歷Collection集合中的元素
          2)所有實(shí)現(xiàn)了Collection接口的集合類都有一個(gè)iterator方法,用來(lái)返回一個(gè)實(shí)現(xiàn)了Iterator接口的對(duì)象,
          即可以返回一個(gè)迭代器。
          3)Iterator僅僅用于遍歷集合,Iterator本身并不存放對(duì)象。
          具體底層的實(shí)現(xiàn)就是數(shù)據(jù)結(jié)構(gòu)
      
          得到迭代器之后,每次調(diào)用next就會(huì)往下移動(dòng)一次得到下一個(gè)數(shù)據(jù),移動(dòng)到最后一個(gè)的時(shí)候娶不到東西就會(huì)退出
          在next之后前面一定要有一個(gè)動(dòng)作就是hasNext,這個(gè)是判斷是否還有下一個(gè)元素,如果沒(méi)有就返回false,這個(gè)循環(huán)就會(huì)結(jié)束,
          也就是遍歷也就會(huì)結(jié)束,只會(huì)在這個(gè)集合的最后一個(gè)元素結(jié)束。
          next可以讓指針往下面移動(dòng),將指向的元素返回回來(lái),這個(gè)是next方法的作用。
          1)下移
          2)將下移之后位置的元素返回
      
          Iterator接口的方法:
          1)hasNext
          2)next
          3)remove,這個(gè)使用比較少
      
          注意,在調(diào)用iterator.next()方法之前必須要先調(diào)用iterator.hasNext()進(jìn)行檢測(cè),如果不調(diào)用,且下一條記錄無(wú)效,直接
          調(diào)用it.next()會(huì)拋出NoSuchElementException異常。
       */
      
      package com.day5_22;
      
      import java.util.ArrayList;
      import java.util.Collection;
      
      /**
       * @author alice_huijing
       * @version 1.0
       */
      public class Collection10 {
          @SuppressWarnings({"all"})
          public static void main(String[] args) {
              // 1、創(chuàng)建集合
              Collection col = new ArrayList();
      
              col.add(new Book("三國(guó)演義", "羅貫中", 10.1));
              col.add(new Book("小李飛刀", "古龍", 5.1));
              col.add(new Book("紅樓夢(mèng)", "曹雪芹", 34.6));
      
              // 2、使用增強(qiáng)for循環(huán)
              for(Object book: col) {
                  System.out.println("book = " + book);
              }  // 這個(gè)比使用迭代器看起來(lái)比較方便,效果還是一樣的,這里的增強(qiáng)for不僅可以適用于集合還可以使用在數(shù)組上,前面使用過(guò)。
      
              int[] nums = {1, 8, 10, 90};
              for (int i: nums) {
                  System.out.println("i = " + i);
              }
      
              /*
                  增強(qiáng)for的底層還是迭代器,我們可以在增強(qiáng)for上面下斷點(diǎn),進(jìn)去看
                  也是先調(diào)用了iterator,new了迭代器對(duì)象,然后調(diào)用hashNext
                  然后是next方法,所以這個(gè)看到的增強(qiáng)for循環(huán)也是迭代器,增強(qiáng)for就是一個(gè)簡(jiǎn)化版的迭代器遍歷方式。
                  快捷方式是I
                      for (Object o :) {
      
                      }
               */
      
      
          }
      }
      
      /*
          Collection接口遍歷對(duì)象方式二,可以使用for循環(huán)增強(qiáng)來(lái)遍歷
              增強(qiáng)for循環(huán)是一個(gè)簡(jiǎn)化版的iterator,可以代替iterator迭代器
              本質(zhì)是一樣的,用于遍歷集合或者是數(shù)組。
              基本語(yǔ)法是:
                  for(元素類型 元素名: 集合或者數(shù)組名) {
                      訪問(wèn)元素
                  }
       */
      
      package com.day5_22;
      
      import java.util.ArrayList;
      import java.util.Iterator;
      import java.util.List;
      
      /**
       * @author alice_huijing
       * @version 1.0
       */
      public class Collection11 {
          @SuppressWarnings({"all"})
          public static void main(String[] args) {
              List list = new ArrayList();  // 因?yàn)锳rrayList實(shí)現(xiàn)了List接口,所以可以使用List接收
              list.add(new Dog("小黑", 3));
              list.add(new Dog("大黃", 100));
              list.add(new Dog("大壯", 8));
      
              // 1、先使用for循環(huán)增強(qiáng)
              for (Object dog : list) {
                  System.out.println("dog = " + dog);
              }
      
              // 2、使用迭代器的方式,通過(guò)list拿到一個(gè)迭代器
              Iterator iterator = list.iterator();
              while (iterator.hasNext()) {
                  Object dog = iterator.next();
                  System.out.println("dog = " + dog);
              }
          }
      }
      
      class Dog {
          private String name;
          private int age;
      
          public Dog(String name, int age) {
              this.name = name;
              this.age = age;
          }
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public int getAge() {
              return age;
          }
      
          public void setAge(int age) {
              this.age = age;
          }
      
          @Override
          public String toString() {
              return "Dog{" +
                      "name='" + name + '\'' +
                      ", age=" + age +
                      '}';
          }
      }
      /*
          1、創(chuàng)建3個(gè)Dog{name, age}對(duì)象,放入到ArrayList中,賦給List引用,
          2、使用迭代器和增強(qiáng)for循環(huán)兩種方式來(lái)遍歷
          3、重寫(xiě)Dog的toString方法,輸出name和age
       */
      
      
      package com.day5_22;
      
      import java.util.ArrayList;
      import java.util.List;
      
      /**
       * @author alice_huijing
       * @version 1.0
       */
      public class Collection12 {
          @SuppressWarnings({"all"})
          public static void main(String[] args) {
      //        List list = new ArrayList();
      //        list.add("alice");
      //        list.add("tom");
      //        list.add("mary");
      //        list.add("how");
      //        System.out.println("list = " + list);  // list = [alice, tom, mary, how],添加順序和取出順序是一樣的。
      //
      //        // 第二個(gè)是還可以重復(fù)
      //        list.add("tom");
      //        System.out.println("list = " + list);  // list = [alice, tom, mary, how, tom]
      //
      //        // 然后第三個(gè)是List集合的每個(gè)元素都有其對(duì)應(yīng)的順序索引,即支持索引
      //        // 索引還是從零開(kāi)始的
      //        System.out.println(list.get(3));  // how
      
              // JDK中List接口的實(shí)現(xiàn)子類有非常多
              // 這里例舉出:Vector ArrayList LinkedList
              // 實(shí)現(xiàn)類有:AbstractList,AbstractSequentialList,ArrayList,AttributeList,CopyOnWriteArrayList,
              // LinkedList,RoleList,RoleUnresolvedList,Stack,Vector
      
              /*
                  List接口的常用方法
                      List集合里添加了一些根據(jù)索引來(lái)操作集合元素的方法
                      1)void add(int index, Object ele),在index位置插入ele元素
                      2)boolean addAll(int index, Collection eles),從index位置開(kāi)始將eles中的所有元素添加進(jìn)來(lái)。
                      3)Object get(int index),獲取指定index位置的元素
                      4)int indexOf(Object obj),返回obj在集合中首次出現(xiàn)的位置
                      5)int lastIndexOf(Object obj),返回obj在當(dāng)前集合中末次出現(xiàn)的位置
                      6)Object remove(int index),移除指定index位置的元素,并返回此元素
                      7)Object set(int index, Object ele),設(shè)置指定index位置的元素為ele,相當(dāng)于是替換。
                      8)List subList(int fromIndex, int toIndex),返回從fromIndex到toIndex位置的子集合
                    這八個(gè)方法是需要掌握的。
               */
              // 1、創(chuàng)建一個(gè)ArrayList
              List list = new ArrayList();
      
              // 2、add方法,這里的add方法相當(dāng)于是插入
              list.add("張三豐");
              list.add("賈寶玉");
              // 在index位置插入元素,在張三豐和賈寶玉之間插入一個(gè)人
              // 即,index為1的位置插入一個(gè)對(duì)象
              list.add(1, "alice");  // 如果沒(méi)有索引默認(rèn)是加入到最后的。
              System.out.println("list = " + list);
      
              // 3、addAll,在上一個(gè)的基礎(chǔ)上,將這個(gè)集合里面的元素插入進(jìn)去
              List list2 = new ArrayList();
              list2.add("jack");
              list2.add("tom");
              list.addAll(1, list2);
              System.out.println("list = " + list);
      
              // 4、get方法已經(jīng)講過(guò)
              // 5、indexOf,返回首次出現(xiàn)的位置,和查找差不多
              System.out.println(list.indexOf("tom"));  // 0 1 2,在index為2的位置
      
              // 6、listIndexOf,返回最后一次出現(xiàn)的位置
              list.add("alice");
              System.out.println("list = " + list);
              System.out.println(list.lastIndexOf("alice"));
      
              // 7、將指定索引位置的元素刪除
              list.remove(0);
              System.out.println("list = " + list);
      
              // 8、set,替換
              list.set(1, "瑪麗有只小羔羊");
              System.out.println("list = " + list);
              // 加入索引位置給的是一個(gè)不存在的會(huì)拋出異常,索引越界
              // 如果這里寫(xiě)5看可不可以,也是不行的,也是索引越界,索引一定要是存在的
      
              // 9、subList,返回指定范圍的子集合
              List resList = list.subList(0, 2);
              System.out.println("resList = " + resList);
              // [),返回的是一個(gè)前閉,后開(kāi)的 0,1
      
          }
      }
      
      /*
          前面講了Collection這個(gè)接口的相關(guān)方法,這里再講List這個(gè)接口的相關(guān)方法,以及實(shí)現(xiàn)了這個(gè)接口的子類
          這里使用ArrayList類來(lái)講
          List里面的接口,Set那一邊的不能使用,所以這個(gè)時(shí)候就要開(kāi)始細(xì)化了。
          實(shí)現(xiàn)了List接口的有哪些特點(diǎn):
              1)List集合類中元素有序(即添加順序和取出來(lái)的順序是一樣的),并且是可以重復(fù)的。
              2)List集合中每個(gè)元素都有其對(duì)應(yīng)的順序索引,即支持索引。
              3)List容器中的元素都對(duì)應(yīng)一個(gè)整數(shù)類型的序號(hào)記載其在容器中的位置,可以根據(jù)序號(hào)取容器中的元素。
       */
      
      posted @ 2025-05-25 23:09  請(qǐng)叫我蝦  閱讀(8)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 成人亚欧欧美激情在线观看| 日韩一区二区三区高清视频| 国产精品免费AⅤ片在线观看| 国产精品久久无中文字幕| 美女黄网站人色视频免费国产 | 国产欧美va欧美va在线| 天天做天天爱夜夜夜爽毛片| 国产成人综合久久精品下载| 国产精品亚洲二区在线看| 国产欧美日韩精品第二区| 国产高清免费午夜在线视频| 亚洲精品有码在线观看| 粉嫩蜜臀av一区二区绯色| 久久久久久亚洲精品a片成人| 狠狠噜天天噜日日噜| 深夜av免费在线观看| 亚洲 中文 欧美 日韩 在线| 黄色网站免费在线观看| 亚洲婷婷综合色高清在线| 国产一区二区三区导航| 天天影视色香欲综合久久| 亚洲性日韩精品一区二区| 九九热在线免费观看视频| 一本无码人妻在中文字幕免费| 老熟女熟妇一区二区三区| 亚洲成人四虎在线播放| 五原县| 成人看的污污超级黄网站免费| 国产成人久久综合一区| 日韩av一区二区高清不卡 | 绥芬河市| 厨房与子乱在线观看| 亚洲人成电影网站 久久影视| 舞钢市| 亚洲男人av天堂久久资源| 老王亚洲AV综合在线观看| 国产无套内射又大又猛又粗又爽 | 久久亚洲精品成人综合网| 亚洲日韩乱码中文无码蜜桃臀 | 女同性恋一区二区三区视频| 另类 专区 欧美 制服|