List子接口

List子接口

特点:有序、有下标、元素可以重复 。

创建集合对象

List list = new ArrayList();

方法:

void add(int index, Object o)//在index的位置插入对象
boolean addAll(int index, Collection c)//将一个元素中的集合添加到此集合中的index位置。
Object get(int index)//返回集合中指定位置的元素
List subList(int fromIndex, int toIndex)//返回fromIndex和toIndex 之间的集合元素

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dXYatyjC-1660013517033)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220802121143156.png)]

这个迭代器,比Collection里的更加强大

常用方法
  1. 添加元素 list.add(); 如果添加的数字数据,会对基本类型进行自动装箱

  2. 删除元素 可以用索引 list.remve(0) //0时下标

    当删除数字时,括号内写要写数字的下标,也可以对数字进行强转

    list.remove((bject)10)list.remove(new Integer(10))

  3. 遍历

    1. 使用for遍历

      or (int i = 0; i < list.size(); i++) {
          System.out.println(list.get(i));
      }
      
    2. 使用增强for

      for (Object object: list) {
          System.out.println((String)object.toString());
      }
      
    3. 使用迭代器

      Iterator it= list.iterator();
      while (it.hasNext()){             //判断有下一个元素吗
          System.out.println(it.next());//如果有输出下一个
           // 可以使用it.remove(); 进行移除元素
           // collection.remove(); 不能用collection其他方法 会报并发修改异常
      }
      
    4. 使用列表迭代器

      ListIterator lit = list.listIterator();
      while (lit.hasNext()){
          System.out.println(lit.nextIndex()+":"+lit.next());//使用迭迭代器从前往后 
      //打印结果为 角标和字符串。。注意中间不加":"会报错
      }
      
      while (lit.hasPrevious()){
          System.out.println(lit.previousIndex()+":"+lit.previous());//使用迭迭代器从后往前
      }
      
  4. 判断 list.contains() 括号内写判断的元素

    list.isEmpty() 判断是否为空

  5. 获取位置 list.indexOf()

  6. 返回子集合sublist(x,y);左闭右开(含头不含尾)

    List subList = list.subList(1,3); //返回下标1、2(3不包含在内)
    
List实现类
  • ArrayList 【重点】:
    • 数组结构实现,查询快、增删慢;
    • JDK1.2版本,运行效率快、线程不安全。
  • Vector:
    • 数组结构实现,查询快、增删慢;
    • JDK1.0版本,运行效率慢、线程安全。
  • LinkedList:
    • 链表结构实现,增删快,查询慢。
ArrayList

创建集合 ArrayList arrayList = new ArrayList<>();

  1. 添加元素 arrayList.add();

  2. 删除元素 arrayList.remove(new Student("name",10));

    这里重写了equals(this == o)方法

    @Override
    public boolean equals(Object o) {
        //1判断是不是同一个对象
        if (this == o) return true;
        //2判断是否为空
        if (o == null) return false;
        //3判断是否是Student类型
        if (o instanceof Student) {
            Student s = (Student) o;
            //4比较属性
            if (this.name.equals(s.getName()) && this.age == s.getAge()) {
                return true;
            }
        }
        //5不满足返回false
        return false;
    }
    
  3. 遍历元素【重点】

    1. 使用迭代器

      Iterator it = arrayList.iterator();
      while (it.hasNext()) {
          Student s = (Student)it.next();
          System.out.println(s.toString);
      }
      
    2. 列表迭代器

      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());
      }
      
  4. 判断

    arrayList.contains(new Student("name",10)); //判断的不是对象,而是具体数据,那就需要new一个对象,并写入数据

    arrayList.isEmpty; 判断是否为空

  5. 查找

    arrayList.indexOf(new Student("name",10)); //查找的不是对象,而是具体数据,那就需要new一个对象,并写入数据

源码分析:

DEFAULT_CAPACITY = 10; //默认容量
//注意:如果没有向集合中添加任何元素时,容量0,添加一个后,容量为10
//每次扩容是原来的1.5倍
elementData存放元素的数组
size 实际元素个数

13.12 ArrayList源码分析_哔哩哔哩_bilibili 这个课程多看几遍

Vector
  • 数组结构实现,查询快、增删慢;
  • JDK1.0版本,运行效率慢、线程安全。

创建集合Vector vector = new Vector<>();

增、删、判断同上

遍历:

枚举器遍历

//使用枚举器
Enumeration en = vector.elements();
while(en.hasMoreElements()){
    String o = (String)en.nextElement();
    System.out.println(o);
}
LinkedList
  • 本质是双向链表

创建链表集合LinkedList li = new LinkedList<>();

常用方法与List一致

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h8PNpoua-1660013543372)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220802175846131.png)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值