2.2.3.List接口和实现类

2.2.3.List接口和实现类

  • 特点: 有序、有下标、元素可以重复
  • 方法
    • void add(int index, Object o) // 在index位置插入对象o
    • boolean addAll(int index, Collection c) //将一个集合中的元素添加到此集合中的index位置
    • Object get(int index) // 返回集合中指定位置的元素
    • List subList(int fromIndex, int toIndex) // 返回fromIndex和toIndex之间的集合元素
public class demo {
    public static void main(String[] args) {
        // 先创建集合对象
        List list = new ArrayList();
        // 添加元素
        list.add("苹果");
        list.add("小米");
        list.add(0, "华为");
        System.out.println("元素个数:" + list.size());
        System.out.println(list.toString());
        // 删除元素
        list.remove("苹果");
        System.out.println("删除之后:" + list.size());
        System.out.println(list.toString());
        // 遍历
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        for (Object object: list) {
            System.out.println(object);
        }
        // 迭代器
        Iterator it = list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
        // 列表迭代器
        ListIterator lit = list.listIterator();
        System.out.println("列表迭代器,从前往后");
        while (lit.hasNext()) {
            System.out.println(lit.next());
            System.out.println(lit.nextIndex());
        }
        System.out.println("列表迭代器,从后往前");
        while (lit.hasPrevious()) {
            System.out.println(lit.previousIndex());
            System.out.println(lit.previous());
        }
        // 判断
        System.out.println(list.contains("苹果"));
        System.out.println(list.isEmpty());
        // 获取位置
        System.out.println(list.indexOf("华为"));
    }
}
public class demo {
    public static void main(String[] args) {
        // 创建集合
        List list = new ArrayList();
        list.add(20);
        list.add(30);
        list.add(40);
        list.add(50);
        list.add(60);
        System.out.println("元素个数:" + list.size());
        System.out.println(list.toString());
        // 删除操作
        list.remove(0);
        list.remove(new Integer(20));
        System.out.println("删除元素:" + list.size());
        System.out.println(list.toString());
        // 补充方法 subList, 含头不含尾
        List sublist = list.subList(1, 3);
        System.out.println(sublist);
    }
}

List实现类

  • ArrayList

    • 数组结构实现,查询快,增删慢
    • 运行效率快, 线程不安全
          package com.test.demo;
              
          import java.util.ArrayList;
          import java.util.Iterator;
          import java.util.ListIterator;
              
          public class demo4 {
              public static void main(String[] args) {
                  // 创建结合
                  ArrayList arrayList = new ArrayList();
                  // 添加元素
                  Student s1 = new Student("刘德华", 20);
                  Student s2 = new Student("郭富城", 30);
                  Student s3 = new Student("梁朝伟", 40);
                  arrayList.add(s1);
                  arrayList.add(s2);
                  arrayList.add(s3);
                  System.out.println("元素个数:" + arrayList.size());
                  System.out.println(arrayList.toString());
                  // 删除元素
                  // arrayList.remove(s1);
                  // 正常new的是删不掉的,需要重写equals
                  arrayList.remove(new Student("刘德华", 20));
                  System.out.println("元素个数:" + arrayList.size());
                  System.out.println(arrayList.toString());
                  // 遍历
                  Iterator it = arrayList.iterator();
                  while (it.hasNext()) {
                      Student s = (Student)it.next();
                      System.out.println(s.toString());
                  }
                  ListIterator lit = arrayList.listIterator();
                  while (lit.hasNext()) {
                      Student s = (Student)lit.next();
                      System.out.println(s.toString());
                  }
                  while (lit.hasPrevious()) {
                      Student s = (Student)lit.previous();
                      System.out.println(s.toString());
                  }
                  // 判断
                  System.out.println(arrayList.contains(new Student("梁朝伟", 40)));
                  System.out.println(arrayList.isEmpty());
                  // 查询
                  System.out.println(arrayList.indexOf(s1));
              }
              
              static class Student {
                  private String name;
                  private int age;
                  public Student(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 "Student{" +
                              "name='" + name + '\'' +
                              ", age=" + age +
                              '}';
                  }
              
                  @Override
                  public boolean equals(Object obj) {
                      // 1.判断是不是同一个对象
                      if (this == obj) {
                          return true;
                      }
                      // 2.判断是否为空
                      if (obj == null) {
                          return false;
                      }
                      // 3.判断是否是Student类型
                      if (obj instanceof Student) {
                          Student s = (Student)obj;
                          // 4.比较属性
                          if (this.name.equals(s.getName()) && this.age == s.getAge()) {
                              return true;
                          }
                      }
                      return false;
                  }
              }
          }
      
      • 源码
        DEFAULT_CAPACITY = 10; 默认容量 
            注意:如果没有向集合中添加任何元素时,size为0,容量为0
        elementData 存放元素的数组 
        size 实际元素个数
        add() 添加元素
           //todo::待补充
        
  • Vector

    • 数组结构实现,查询快,增删慢
    • 效率快, 线程安全
    public class demo {
        public static void main(String[] args) {
            // 创建集合
            Vector vector = new Vector();
            vector.add("草莓");
            vector.add("芒果");
            vector.add("西瓜");
            System.out.println("元素个数:" + vector.size());
            // 删除
            vector.remove(0);
            vector.remove("西瓜");
            vector.clear();
            // 使用枚举器
            Enumeration en = vector.elements();
            while (en.hasMoreElements()) {
                String o = (String)en.nextElement();
                System.out.println(o);
            }
            // 判断
            vector.contains("西瓜");
            vector.isEmpty();
            // vector其它方法
            vector.lastElement();
        }
    }
    
  • LinkedList

    • 链表结构实现,增删快,查询慢
      public class demo {
          public static void main(String[] args) {
              // 创建结合
              LinkedList linkedList = new LinkedList();
              // 添加
              Student s1 = new Student("刘德华", 20);
              Student s2 = new Student("郭富城", 20);
              Student s3 = new Student("梁朝伟", 20);
              linkedList.add(s1);
              linkedList.add(s2);
              linkedList.add(s3);
              System.out.println("元素个数" + linkedList.size());
              System.out.println(linkedList);
              // 删除
              linkedList.remove(s1);
              linkedList.remove(new Student("郭富城", 20));
              System.out.println(linkedList.size());
             // linkedList.clear();
              // 遍历
              for (int i = 0; i < linkedList.size(); i++) {
                  System.out.println(linkedList.get(i));
              }
              for (Object object: linkedList) {
                  Student s = (Student)object;
                  System.out.println(s.toString());
              }
              Iterator it = linkedList.iterator();
              while (it.hasNext()) {
                  Student s = (Student) it.next();
                  System.out.println(s.toString());
              }
              ListIterator lit = linkedList.listIterator();
              while (lit.hasNext()) {
                  Student s = (Student) lit.next();
                  System.out.println(s.toString());
              }
              // 判断
              System.out.println(linkedList.contains(s1));
              System.out.println(linkedList.isEmpty());
              // 获取
              System.out.println(linkedList.indexOf(s2));
              System.out.println(linkedList.indexOf(s3));
          }
      }