Java学习(集合)

 底层接口Collection

上图中红色是接口,蓝色是实现类。

List系列集合:添加的元素是有序(存和取的顺序一样),可重复(集合中所存的元素可以重复),有索引(可以通过索引找集合中的元素)。

Set系列集合:添加的元素是无序,不重复,无索引。

Collection是单列集合的祖宗接口,它的功能的全部单列集合都可以继承使用的。

Collection是一个接口,我们不能直接创建他的对象。所以,我们只能创建他实现类的对象。

public static void main(String[] args) {
        Collection<String> coll=new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");//添加
        //如果我们要往List系列集合中添加数据,那么方法永远返回true,因为其允许元素重复
        //如果往Set系列集合中添加数据,若当前添加元素不存在,返回true,表示添加成功
        //若添加元素已经有了,返回false,表示添加失败。因其不允许元素重复
        System.out.println(coll);

        coll.remove("aaa");//删除元素“aaa”
        System.out.println(coll);

        coll.clear();//清空
        //因为Collection里面定义的是共性的方法,所以此时不能通过索引来删除。只能通过元素的对象来删除
        //方法会有一个布尔类型的返回值,删除成功返回true,否则返回false
        //如果要删除的元素不存在,就会删除失败
        System.out.println(coll);

        boolean result = coll.contains("bbb");//判断元素bbb是否存在与coll集合中
        //底层是依赖equals方法进行判断是否存在的
        //如果集合中存储的是自定义的对象,也想通过contains方法判断,那么在Javabean类中一定要重写equals方法
        System.out.println(result);

        boolean result2=coll.isEmpty();//判断是否为空
        System.out.println(result2);
        int size=coll.size();//获取集合长度
        System.out.println(size);
    }

运行后:

 Collection的遍历方法

一、迭代器遍历

迭代器遍历集合时不依赖索引。

迭代器在Java中的类是lterator,迭代器是集合专用的遍历方式。

获取迭代器:Iterator<E>  iterator( )    返回迭代器对象,默认指向当前集合的0索引

Iterator中常用的方法:boolean hasNext()判断当前位置是否有元素,有返回true,没有返回false。E next()获取当前位置元素,并将迭代器对象移向下一个位置。

public static void main(String[] args) {
        Collection<String> coll=new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");
        //获取迭代器对象
        Iterator<String> it=coll.iterator();
        while(it.hasNext()){
            //next方法的两件事情:获取元素和移动指针
            String str=it.next();//不依赖索引
            System.out.println(str);
        }
    }

注意细节:

1.报错NoSuchElementException(当前位置没有元素了)

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

3.循环中只能用一次next方法(多次使用可先用一个变量存储,之后用变量表示元素)

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

关于细节第三点:

当输入为元素为偶数个时,不会报错,但为奇数个时,会报NoSuchElementException的错误。

偶数个元素: 

public static void main(String[] args) {
        Collection<String> coll=new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");
        //获取迭代器对象
        Iterator<String> it=coll.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
            System.out.println(it.next());
        }
    }

奇数个元素: 

public static void main(String[] args) {
        Collection<String> coll=new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");
        coll.add("eee");
        //获取迭代器对象
        Iterator<String> it=coll.iterator();
        while(it.hasNext()){
            System.out.println(it.next());//这个读取的元素有:aaa,ccc,eee
            System.out.println(it.next());//这个读取的元素有:bbb,ddd
            //执行最后一行代码时,指针会指向最后一个元素的下一位,其位置没有元素,所有返回NoSuchElementException错误
        }
    }

二、增强for遍历

增强for遍历的底层就是迭代器,为了简化迭代器的代码书写的

所有的单列集合和数组才能用增强for进行遍历

格式:

for(元素的数据类型 变量名:数组或集合){
     
}
public static void main(String[] args) {
        //创建集合并添加元素
       Collection<String> coll=new ArrayList<>();
       coll.add("zhangsan");
       coll.add("lisi");
       coll.add("wangwu");
       //利用增强for进行遍历
        //注意:s就是一个第三方变量,在循环的过程中依次表示集合中的一个数据
        for (String s : coll) {
            System.out.println(s);
        }//快捷键:输入coll.for后按回车
    }

 三、Lambda表达式遍历

public static void main(String[] args) {
        //创建集合并添加元素
       Collection<String> coll=new ArrayList<>();
       coll.add("zhangsan");
       coll.add("lisi");
       coll.add("wangwu");
       //利用匿名内部类的形式
        //底层原理:也会自己遍历集合,依次得到每一个元素
        //把得到的每一个元素传递给下面的accept方法
       coll.forEach(new Consumer<String>() {
           @Override
           //s依次表示集合中的每一个数据
           public void accept(String s) {
               System.out.println(s);
           }
       });
        System.out.println(" ");
       //lambda表达式
        coll.forEach(s-> System.out.println(s));
    }

 

 List集合

Collection的方法List都继承了

List集合因为有索引,所有多了很多索引操作的方法

public static void main(String[] args) {
        //创建集合并添加元素
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");

        //在指定位置插入指定元素,原来索引上的元素会依次往后移
//        list.add(1,"qqq");
//        System.out.println(list);//[aaa,qqq,bbb,ccc]

        //删除指定索引处的元素,返回被删除元素
//        String remove=list.remove(0);
//        System.out.println(remove);//aaa
//        System.out.println(list);//[bbb,ccc]

        //修改指定索引处的元素,返回被修改的元素
//        String res=list.set(0,"yyy");
//        System.out.println(res);//aaa
//        System.out.println(list);//[yyy,bbb,ccc]

        //返回索引处的元素
        String s=list.get(0);
        System.out.println(s);//aaa
    }

 遍历方式(五种)

1.迭代器遍历:在遍历过程中需要删除元素,请使用迭代器

2.增强for

3.Lambda表达式

 以上三种遍历方式和Collection的用法相同。

4.普通for循环:需要有索引

 public static void main(String[] args) {
        //创建集合并添加元素
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        for(int i=0;i<list.size();i++){
            String s=list.get(i);
            System.out.println(s);
        }
}

 5.列表迭代器:List集合中独有的。在遍历过程中需要添加元素,使用列表迭代器

public static void main(String[] args) {
        //创建集合并添加元素
        List<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        ListIterator<String> it=list.listIterator();
        while(it.hasNext()){
            String s=it.next();
            System.out.println(s);
        }
}

课程:(185集开始)【黑马程序员Java零基础视频教程_上部(Java入门,含斯坦福大学练习题+力扣算法题和大厂java面试题)】 https://www.bilibili.com/video/BV17F411T7Ao/?p=189&share_source=copy_web&vd_source=f40060a0c705f24bc2896a5d9ce74c68 icon-default.png?t=N7T8https://www.bilibili.com/video/BV17F411T7Ao/

  • 29
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值