java基础-集合进阶

单列集合:一次只能添加一对数据

双列集合:一次可以添加多对数据

红色表示接口,蓝色表示实现类

Collection类的一些方法:

注意:Collection是顶层类,向下可以分为List和Set两种

复制代码
package com.jdL.day22classwork;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;

public class CollectionTest1 {
    public static void main(String[] args) {
        //Collection是一个接口,我们不能直接创建对象
        //只能创建接口实现类的对象
        //实现类:ArrayList
        Collection<String> co=new ArrayList<>();

        //添加元素
        //返回值为boolean类
        //细节:如果往list集合中添加数据,方法永远返回true,因为list系列集合是支持重复的
        //如果往set集合中添加数据,如果当前添加的数据不存在,方法返回true,如果添加的数据存在了,方法返回false(set系统不允许重复)
        //添加元素add方法
        co.add("aaaa");
        co.add("bbbb");
        co.add("cccc");
        System.out.println(co);
        //清空数据clear方法,执行之后就会清空集合
        //co.clear();
        //System.out.println(co);
        //remove删除
        //注意:因为collection里面定义的是共性的方法,所以这里没有办法按照索引来删
        //remove返回值也是boolean类型的,删除成功返回true,删除失败返回false
        //如果要删除的元素不存在,就会删除失败
        co.remove("cccc");
        System.out.println(co);
        //cotains:判断元素是否包含
        //底层给是依赖equale判断的,
        //返回值也是返回一个布尔类型的值,如果查询的值包含在集合里面,就返回true,如果不包含就返回false
        //注意:如果集合中是自定义的类对象,比如student,teache这些,也想通过contains来判断是否包含,
        //在student,teache这些类中一定要重新equals方法
        boolean result = co.contains("aaaa");
        System.out.println(result);
        //isEmpty,判断集合是否为空,空集合返回true
        boolean empty = co.isEmpty();
        System.out.println(empty);
        //size,返回集合的长度
        int size = co.size();
        System.out.println(size);
    }
}

Collection的遍历方式:

1、迭代器遍历:迭代器遍历是不依赖索引的

迭代器在java中的类是Iterator,是集合专用的遍历方式

迭代器遍历完指针不会复位,如果想要再次遍历集合,就需要重新获取一个迭代器的对象

复制代码
package com.jdL.day22classwork;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class CollectionTest2 {
    public static void main(String[] args) {
        //创建集合对象,并添加元素
        Collection<String> co=new ArrayList<>();
        co.add("a");
        co.add("b");
        co.add("c");
        co.add("d");
        //创建集合的迭代器对象,默认执行0索引处
        Iterator<String> it=co.iterator();
        //hasNext()判断当前指针指向的集合元素是否为空,如果空的就跳出循环了
        while (it.hasNext()){
            //如果非空,next()获取元素并打印
            String next = it.next();
            System.out.print(next);
        }
        //当上面的循环结束后,指针就是指向没有元素的位置
        //System.out.println(it.next());
      
    }
}

2、增强for遍历:

复制代码
package com.jdL.day22classwork;

import java.util.ArrayList;
import java.util.Collection;

public class CollectionTest3 {
    public static void main(String[] args) {
        //创建集合,并添加对象
        Collection<String> co=new ArrayList<>();
        co.add("a");
        co.add("b");
        co.add("c");
        co.add("d");
        //增强for遍历
        //注意点:s就是一个第三方变量,在遍历过程中会依次表示集合中的每一个元素,不会改变集合中的元素
        //快捷键:集合名称.for
        //细节:
        for(String s:co){
            s="eee";
        }
        System.out.print(co);
    }
}

3、

复制代码
package com.jdL.day22classwork;

import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;

public class CollectionTest4 {
    public static void main(String[] args) {
        //lamdba表达式
        Collection<String> co=new ArrayList<>();
        co.add("a");
        co.add("b");
        co.add("c");
        co.add("d");
        //匿名内部类
//        co.forEach(new Consumer<String>() {
//            @Override
//            //s依次表示集合中的每个元素
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        });
        //lamdba表达式
        co.forEach(s->System.out.println(s));
    }
}

List集合:

特点:有序:存和取的顺序是一致的

有索引:可以通过索引操作元素

可重复:存储的元素可以重复

复制代码
package com.jdL.day22classwork;

import java.util.ArrayList;
import java.util.List;

public class ListTest1 {
    public static void main(String[] args) {
        //创建一个集合
        List<String> list = new ArrayList<>();
        //添加元素
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        //打印集合
        System.out.println(list);
        //add(int index,e element):在指定的索引处添加元素,添加之后原索引处的元素依次向后移动
        list.add(2,"哈");
        System.out.println(list);
        System.out.println("-----------------");
        //remove(int index):删除指定索引删除元素,返回被删除的元素,删除后,原索引之后的元素依次想前移动
        String remove = list.remove(2);
        System.out.println(remove);
        System.out.println(list);
        
    }
}

remove这个方法需要注意一下:

复制代码
package com.jdL.day22classwork;

import java.util.ArrayList;
import java.util.List;

public class ListTest2 {
    public static void main(String[] args) {
        //
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        //
        list.remove(1);
        //这里是表示删除1的值还是删除1索引处的值呢?
        //答案是:索引1,因为在调用方法的时候,如果方法出现了重载,优先调用,实参和形参类型一致的那个方法
        //如果非要删除1值的数据,可以利用索引,也可以手动装箱,如下:
        Integer i=Integer.valueOf(1);
        list.remove(i);
    }
}

List独有的遍历方式

复制代码
package com.jdL.day22classwork;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.function.Consumer;

public class ListTest3 {
    public static void main(String[] args) {
        //创建集合
        List<String> list = new ArrayList<String>();
        //添加对象
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        //1、迭代器遍历
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            String next = iterator.next();
            System.out.print(next);
        }
        //2、增强for
        for(String s:list){
            System.out.print(s);
        }
        //3、lamdba表达式
        list.forEach(s->System.out.println(s));
        //4、普通的for循环
        for(int i=0;i<list.size();i++){
            System.out.print(list.get(i));
        }
        System.out.println("------------------");
        //5、列表迭代器
        //获取了一个列表迭代器的对象,里面的指针也是默认指向0索引
        //额外添加了一个方法:在遍历过程中,可以添加元素
        ListIterator<String> st = list.listIterator();
        while(st.hasNext()){
            String next = st.next();
            //当遇到a的时候,就在a的后面添加一个字符
            if(next.equals("a")){
                //不能用集合的add,只能用迭代器本身的方法
                st.add("我");
            }
        }
        System.out.println(list);
    }
}
相关推荐
foundbug999几秒前
MATLAB中实现信号迭代解卷积功能
开发语言·深度学习·matlab
Seven977 分钟前
SPI机制:服务扩展的核心技术
java
NE_STOP16 分钟前
shiro_实现分布式会话SessionManager、限制密码重试次数和并发登录控制
java
雪风飞舞20 分钟前
python根据音频生成柱状图
开发语言·python·音视频
Seven9720 分钟前
剑指offer-63、数据流中的中位数
java
毕设源码-钟学长22 分钟前
【开题答辩全过程】以 基于Spring Boot的社区养老服务管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
nbsaas-boot28 分钟前
slice / map 在 Go GC 与内存碎片上的真实成本
开发语言·后端·golang
会飞的小新39 分钟前
Shell 脚本中的信号与 trap:从 Ctrl+C 到优雅退出
linux·开发语言
LawrenceLan42 分钟前
Flutter 零基础入门(十):final、const 与不可变数据
开发语言·flutter·dart
深念Y44 分钟前
夸克网盘 应用程序无法启动,因为应用程序的并行配置不正确。有关详细信息,请参阅应用程序事件日志,或使用命令行sxstrace.exe 工具。
windows·bug·报错·系统·更新·网盘·夸克