day22 Collection 迭代器 增强for List

1.Collection集合

1.1数组和集合的区别【理解】

  • 相同点

    都是容器,可以存储多个数据

  • 不同点

    • 数组的长度是不可变的,集合的长度是可变的

    • 数组可以存基本数据类型和引用数据类型

      集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类

1.3Collection 集合概述和使用【应用】

  • 创建Collection集合的对象

    • 多态的方式

    • 具体的实现类ArrayList

  • Collection集合常用方法

    方法名说明
    boolean add(E e)添加元素
    boolean remove(Object o)从集合中移除指定的元素
    boolean removeIf(Object o)根据条件进行移除
    void clear()清空集合中的元素
    boolean contains(Object o)判断集合中是否存在指定的元素
    boolean isEmpty()判断集合是否为空
    int size()集合的长度,也就是集合中元素的个数

1.4Collection集合的遍历

1.4.1 迭代器遍历
  • 迭代器介绍

    • 迭代器,集合的专用遍历方式

    • Iterator<E> iterator(): 返回此集合中元素的迭代器,通过集合对象的iterator()方法得到

  • Iterator中的常用方法

    boolean hasNext(): 判断当前位置是否有元素可以被取出 ​ E next(): 获取当前位置的元素,将迭代器对象移向下一个索引位置

  • Collection集合的遍历

     public class IteratorDemo1 {
         public static void main(String[] args) {
             //创建集合对象
             Collection<String> c = new ArrayList<>();
     ​
             //添加元素
             c.add("hello");
             c.add("world");
             c.add("java");
             c.add("javaee");
     ​
             //Iterator<E> iterator():返回此集合中元素的迭代器,通过集合的iterator()方法得到
             Iterator<String> it = c.iterator();
     ​
             //用while循环改进元素的判断和获取
             while (it.hasNext()) {
                 String s = it.next();
                 System.out.println(s);
             }
         }
     }
  • 迭代器中删除的方法

    void remove(): 删除迭代器对象当前指向的元素

     public class IteratorDemo2 {
         public static void main(String[] args) {
             ArrayList<String> list = new ArrayList<>();
             list.add("a");
             list.add("b");
             list.add("b");
             list.add("c");
             list.add("d");
     ​
             Iterator<String> it = list.iterator();
             while(it.hasNext()){
                 String s = it.next();
                 if("b".equals(s)){
                     //指向谁,那么此时就删除谁.
                     it.remove();
                 }
             }
             System.out.println(list);
         }
     }
1.4.2 增强for
  • 格式

    for(集合/数组中元素的数据类型 变量名 : 集合/数组名) {

    // 已经将当前遍历到的元素封装到变量中了,直接使用变量即可

    }

  • 代码

     public class MyCollectonDemo1 {
         public static void main(String[] args) {
             ArrayList<String> list =  new ArrayList<>();
             list.add("a");
             list.add("b");
     ​
             //1,数据类型一定是集合或者数组中元素的类型
             //2,str仅仅是一个变量名而已,在循环的过程中,依次表示集合或者数组中的每一个元素
             //3,list就是要遍历的集合或者数组
             for(String str : list){
                 System.out.println(str);
             }
         }
     }
  • 细节点注意:

1.报错NoSuchElementException

2.迭代器遍历完毕,指针不会复位

3.循环中只能用一次next方法

4.迭代器遍历时,不能用集合的方法进行增加或者删除

1.4.3 lambda表达式

利用forEach方法,再结合lambda表达式的方式进行遍历  

 //1.创建集合并添加元素
         Collection<String> coll = new ArrayList<>();
         coll.add("zhangsan");
         coll.add("lisi");
 ​
         //lambda表达式
         coll.forEach(s -> System.out.println(s));

2.List集合

2.1List集合的概述和特点【记忆】

  • List集合的特点

    • 存取有序

    • 可以重复

    • 有索引

2.2List集合的特有方法【应用】

  • 方法介绍

    方法名描述
    void add(int index,E element)在此集合中的指定位置插入指定的元素
    E remove(int index)删除指定索引处的元素,返回被删除的元素
    E set(int index,E element)修改指定索引处的元素,返回被修改的元素
    E get(int index)返回指定索引处的元素

2.3List集合的五种遍历方式【应用】

  1. 迭代器

  2. 列表迭代器

  3. 增强for

  4. Lambda表达式

  5. 普通for循环

代码示例:

 //创建集合并添加元素
 List<String> list = new ArrayList<>();
 list.add("aaa");
 list.add("bbb");
 list.add("ccc");
 ​
 //1.迭代器
 Iterator<String> it = list.iterator();
      while(it.hasNext()){
         String str = it.next();
         System.out.println(str);
 }
 ​
 //2.增强for
 for (String s : list) {
        System.out.println(s);
  }
 ​
 //3.Lambda表达式
 //forEach方法的底层其实就是一个循环遍历,依次得到集合中的每一个元素
 //并把每一个元素传递给下面的accept方法
 //accept方法的形参s,依次表示集合中的每一个元素
 list.forEach(s->System.out.println(s) );
 ​
 //4.普通for循环
 //size方法跟get方法还有循环结合的方式,利用索引获取到集合中的每一个元素
 for (int i = 0; i < list.size(); i++) {
             //i:依次表示集合中的每一个索引
             String s = list.get(i);
             System.out.println(s);
  }
 ​
 // 5.列表迭代器
 //获取一个列表迭代器的对象,里面的指针默认也是指向0索引的
 //额外添加了一个方法:在遍历的过程中,可以添加元素
 ListIterator<String> it = list.listIterator();
 while(it.hasNext()){
     String str = it.next();
     if("bbb".equals(str)){
         //qqq
         it.add("qqq");
     }
 }
 System.out.println(list);

2.4 细节点注意:

List系列集合中的两个删除的方法

 1.直接删除元素
 2.通过索引进行删除

3.数据结构

3.1数据结构之栈和队列【记忆】

  • 栈结构

    先进后出

  • 队列结构

    先进先出

3.2数据结构之数组和链表【记忆】

  • 数组结构

    查询快、增删慢

  • 队列结构

    查询慢、增删快

4.List集合的实现类

4.1List集合子类的特点【记忆】

  • ArrayList集合

    底层是数组结构实现,查询快、增删慢

  • LinkedList集合

    底层是链表结构实现,查询慢、增删快

4.2LinkedList集合的特有功能【应用】

  • 特有方法

    方法名说明
    public void addFirst(E e)在该列表开头插入指定的元素
    public void addLast(E e)将指定的元素追加到此列表的末尾
    public E getFirst()返回此列表中的第一个元素
    public E getLast()返回此列表中的最后一个元素
    public E removeFirst()从此列表中删除并返回第一个元素
    public E removeLast()从此列表中删除并返回最后一个元素
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值