Java--集合--List接口

  1. List接口和常用方法(底层是一个Object类型的数组)
    1.  

       

      package com.model.list;
      
      import java.util.ArrayList;
      import java.util.List;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/6/11 10:26
       */
      public class ListDemo01 {
          public static void main(String[] args) {
      
              List<Object> list = new ArrayList<>();
              List<Object> list1 = new ArrayList<>();
              list.add("zzh");
              list.add("zzh1");
              list1.add("a");
              list1.add("b");
      
      //        1) void add(int index, Object ele):在index位置插入ele元素
              list.add(1,"张三丰");
              System.out.println("在下标为1的位置插入张三丰:"+list);
      //        2) boolean addAll(int index, Collection ele):从index位置开始将 ele中的所有元素添加进来
              list.addAll(1, list1);
              System.out.println("从下标为1开始插入list1中的所有元素:"+list);
      //        3) Object get(int index):获取指定index位置的元素
              for (int i=0;i<list.size();i++){
                  System.out.println("获取到了下表为"+i+"的元素的值为:"+list.get(i));
              }
      //        4) int indexOf(Object obj):返回obj在集合中首次出现的位置
              System.out.println("首次出现张三丰的位置:"+list.indexOf("张三丰"));
      
      //        5) int lastIndexOf(Object obj):返回obj在当前集合中末次出现的位置
              System.out.println("最后一次出现张三丰的位置:"+list.lastIndexOf("张三丰"));
      //        6) Object remove(int index):移除指定index位置的元素,并返回此元速素
              System.out.println("移除了:"+list.remove(0));
      //        7) Object set(int index, Object ele):设置指定index位置的元素为ele ,相当于是替换.
              list.set(1, "B");
              System.out.println("下标位1的元素换成B:"+list);
      //        8) List subList(int fromIndex, int tolndex):返回从fromIndex到tolndex位置的子集合
              //注意 自己和返回的是  下表为0 和1 的并不包括2 :即返回  开始下标<=subList<结束下标 之间的元素
              System.out.println("返回从 第一个到第三个的子集合"+list.subList(0, 2));
      //
          }
      }
  2. List接口课堂练习

    1.  

    2.  

      package com.model.list;
      
      import java.util.ArrayList;
      import java.util.Iterator;
      import java.util.List;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/6/11 10:53
       */
      public class ListDemo02 {
      /*
          添加10个以上的元素(比如String "hello" ),在2号位插入-个元素"韩顺平教
          育",获得第5个元素,删除第6个元素,修改第7个元素,在使用迭代器遍历集
          合,要求:使用List的实现类ArrayList完成。
      */
      
          public static void main(String[] args) {
              List<Object> list = new ArrayList<>();
      
              for (int i = 0; i < 12; i++) {
                  list.add("hello"+i);
              }
              list.add(2, "韩顺平教育");
              System.out.println("获取到第五个元素:"+list.get(4));
              System.out.println("删除了第六个元素:"+list.remove(5));
              list.set(6, "zzh");
              Iterator<Object> iterator = list.iterator();
              while (iterator.hasNext()) {
                  Object next =  iterator.next();
                  System.out.println(next);
      
              }
      
      
          }
      }
  3. List的三种遍历方式

    1.  

      package com.model.list;
      
      import javax.swing.plaf.synth.SynthOptionPaneUI;
      import java.util.*;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/6/11 11:03
       */
      public class ListDemo03 {
      
          //List的三种实现类:ArrayList,LinkedList,Vector
          public static void main(String[] args) {
              List<Object> list = new ArrayList<>();
      //        Vector<Object> list = new Vector<>();
      //        LinkedList<Object> list = new LinkedList<>();
              for (int i = 0; i < 10; i++) {
                 list.add(i);
              }
      //        1.迭代器
              Iterator<Object> iterator = list.iterator();
              while (iterator.hasNext()) {
                  Object next =  iterator.next();
                  System.out.println(next);
      
              }
              System.out.println("***********************");
      
      
      //        2.增强for循环
              for (Object o :list) {
                  System.out.println(o);
              }
              System.out.println("***********************");
      //        3.for循环方式
              for (int i = 0; i < list.size(); i++) {
                  System.out.println(list.get(i));
              }
      
          }
      }
  4. 课堂练习

    1. package com.model.list;
      
      import java.util.ArrayList;
      import java.util.LinkedList;
      import java.util.List;
      import java.util.Vector;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/6/11 11:11
       */
      public class ListDemo04 {
      
      /**
          使用List的实现类添加三本图书,并遍历,打印如下效果
      
          名称:XX   价格:XX   作者:XXX
          名称:XX   价格:XX   作者:XXX
          名称:XX   价格:XX   作者:XXX
      
          1)按价格排序,从低到高(使用冒泡法)
          2)要求使用ArrayList、LinkedList 和Vector三种集合实现
      */
      
          public static void main(String[] args) {
      //        List<Book> list = new ArrayList<>();
      
      //        List<Book> list = new Vector<>();
              List<Book> list = new LinkedList<>();
              list.add(new Book("三国演义", 18.9d, "罗贯中"));
              list.add(new Book("水浒传", 18.5d, "施耐庵"));
              list.add(new Book("西游记", 18.2d, "吴承恩"));
              list.add(new Book("红楼梦", 18.1d, "曹雪芹"));
              list.add(new Book("红楼梦", 18.8d, "曹雪芹"));
              list.add(new Book("红楼梦", 18.4d, "曹雪芹"));
              list.add(new Book("红楼梦", 18.8d, "曹雪芹"));
      
              for (Book book :list) {
                  System.out.println("名称:"+book.getName()+"\t"+"价格:"+book.getPrice()+"\t"+"作者:"+book.getAuthor());
              }
      
              System.out.println("******排序之后******");
              list= (ArrayList<Book>) sort(list);
              for (Book book :list) {
                  System.out.println("名称:"+book.getName()+"\t"+"价格:"+book.getPrice()+"\t"+"作者:"+book.getAuthor());
              }
      
      
          }
      
      /*    public static List<Book> sort(List<Book> list){
      
              for (int i = 0; i < list.size(); i++) {
                  for (int j=i+1;j<list.size();j++){
                      if(list.get(i).getPrice()>list.get(j).getPrice()){
                          Book book =list.get(i);
                          list.set(i, list.get(j));
                          list.set(j, book);
                      }
                  }
              }
            return list;
          };*/
      
          public static List<Book> sort(List<Book> list){
              for (int i = 0; i < list.size()-1; i++) {
                  //第几轮,第一轮结束找到了最大的一个放在最后面,第二轮找到了倒数第二大的,所以内循环中,每次次都要减去 i ,因为后面的后位置已经确定了
                  // 三个数需要循环两轮,循环次数等于数据的长度-1
      //            其中外层循环用于控制排序轮数,一般为要排序的数组长度减1,因为最后一次循环只剩下一个数组元素,不需要对比,同时已经完成排序了。
      //            内层循环主要是用于对比数组中每个邻近元素的大小,以确定是否交换位置,对比和交换的次数随排序轮数而减少。
                  for (int j=0;j+1<list.size()-i;j++){
                      if (list.get(j).getPrice()>list.get(j+1).getPrice()){
                          Book book=list.get(j);
                          list.set(j, list.get(j+1));
                          list.set(j+1, book);
                      }
                  }
      
              }
              return list;
          }
      }
      class Book{
          private String name;
          private double price;
          private String author;
      
          public Book(String name, double price, String author) {
              this.name = name;
              this.price = price;
              this.author = author;
          }
      
          public String getName() {
              return name;
          }
      
          @Override
          public String toString() {
              return "Book{" +
                      "name='" + name + '\'' +
                      ", price=" + price +
                      ", author='" + author + '\'' +
                      '}';
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public double getPrice() {
              return price;
          }
      
          public void setPrice(double price) {
              this.price = price;
          }
      
          public String getAuthor() {
              return author;
          }
      
          public void setAuthor(String author) {
              this.author = author;
          }
      }

       

  5. List接口的实现细节(可以放入null,且可以多个null)

    1.  

      package com.model.list;
      
      import java.util.ArrayList;
      import java.util.List;
      
      /**
       * @Description:测试类
       * @Author: 张紫韩
       * @Crete 2021/6/11 16:39
       */
      public class ListDemo05 {
      
          public static void main(String[] args) {
      
      
              /**
               *  //ArrayList可以放空值且可以放多个空值,有序可重复,有数组实现存储,线程不安全,效率高
               *     public boolean add(E e) {
               *         ensureCapacityInternal(size + 1);  // Increments modCount!!
               *         elementData[size++] = e;
               *         return true;
               *     }
               *     ArrayList线程不安全的,源码中没有synchronized
               *
               * */
              List<Object> list = new ArrayList<>();
              list.add(null);
              list.add("张紫韩");
              list.add(null);
              for (Object s:list){
                  System.out.println(s);
              }
      
          }
      }
  6. ArrayList源码分析

    1. 扩容机制
      1.  

         

         

           

         

               

           

         

          
posted @ 2021-06-11 17:08  张紫韩  阅读(86)  评论(0编辑  收藏  举报