首页 > 编程语言 >Java-API基础 03

Java-API基础 03

时间:2024-07-29 08:59:00浏览次数:15  
标签:03 Java 元素 System 集合 add API println out

1. 什么是集合:

  • 集合和数组一样,可以保存一组数据,并且提供了操作数组元素的相关方法,使用用更加方便

2. 集合框架中的相关接口:

  • java.util.Collection接口:是所有集合的顶级接口,封装了所有集合所共有的方法,下面有很多实现类,因此我们可以有更多的数据结构来选择。
  • Collection接口下面有两种常见的子接口:-----------------------明天详细介绍
    • java.util.List:线性表,是可以重复集合,并且有序
    • java.util.Set:不可重复集合,大部分实现类是无序的

3. Collection的常用方法:

  • add():向集合中添加一个元素,成功添加则返回true,否则返回false

  • size():返回当前集合的元素个数

  • isEmpty():判断当前集合是否为空集,当且仅当size()为0时返回true

  • clear():清空集合

  • contains():判断集合是否包含某元素(equals()相等即为true)

  • remove():从集合中删除给定元素(equals()相等即为true),成功删除则返回true

    public class CollectionDemo {
        public static void main(String[] args) {
            Collection c = new ArrayList();
            c.add(new Point(1,2));
            c.add(new Point(3,4));
            c.add(new Point(5,6));
            c.add(new Point(7,8));
            c.add(new Point(9,0));
            c.add(new Point(1,2));
            //[元素1.toString(), 元素2.toString(), 元素3.toString(), ......]
            System.out.println(c); //[(1,2), (3,4), (5,6), (7,8), (9,0), (1,2)]
    
            /*
              boolean contains(Object o):
              判断当前集合是否包含给定元素o
              判断依据是给定元素是否与当前集合存在equals()比较为true的情况
             */
            Point p = new Point(1,2);
            boolean contains = c.contains(p);
            System.out.println("是否包含:"+contains); //true
    
            /*
              boolean remove(Object o):-----一般都不接收boolean结果
              从当前集合中删除与给定元素o的equals()比较为true的元素
              若存在重复元素则只删除一次
             */
            c.remove(p);
            System.out.println(c);
    
    
            //集合中存放的是元素的引用
            Collection cc = new ArrayList();
            Point pp = new Point(1,2);
            cc.add(pp); //将pp添加到cc中-----------将pp的引用装到了cc中
            System.out.println("pp:"+pp); //(1,2)
            System.out.println("cc:"+cc); //[(1,2)]
    
            pp.setX(100);
            System.out.println("pp:"+pp); //(100,2)
            System.out.println("cc:"+cc); //[(100,2)]
    
            /*
            Collection c = new ArrayList();
            c.add("one");
            c.add("two");
            c.add("three");
            c.add("four");
            c.add("five");
            //集合重写了Object的toString()方法,返回格式如下:
            //[元素1.toString(), 元素2.toString(), 元素3.toString(), ......]
            System.out.println(c); //[one, two, three, four, five]
    
            System.out.println("size:"+c.size()); //5,输出集合的元素个数
            //isEmpty()判断集合是否为空集(size()为0表示空集)
            System.out.println("是否为空集"+c.isEmpty()); //false
    
            c.clear(); //清空集合
            System.out.println("集合已清空");
            System.out.println(c); //[]
            System.out.println("size:"+c.size()); //0
            System.out.println("是否为空集:"+c.isEmpty()); //true
            */
        }
    }
    
  • addAll():将参数集合中的元素添加到当前集合中,添加后当前集合发生改变则返回true

  • containsAll():判断当前集合中是否包含参数集合中的所有元素

  • ratainAll():取交集(交集元素留着)

  • removeAll():删交集(交集元素删除)

    public class CollectionOperDemo {
        public static void main(String[] args) {
            Collection c1 = new ArrayList();
            c1.add("java");
            c1.add("c++");
            c1.add(".net");
            System.out.println("c1:"+c1); //c1:[java, c++, .net]
    
            Collection c2 = new ArrayList();
            c2.add("android");
            c2.add("ios");
            c2.add("java");
            System.out.println("c2:"+c2); //c2:[android, ios, java]
    
            c1.addAll(c2); //将c2添加到c1中
            System.out.println("c1:"+c1); //c1:[java, c++, .net, android, ios, java]
            System.out.println("c2:"+c2); //c2:[android, ios, java]
    
            Collection c3 = new ArrayList();
            c3.add("c++");
            c3.add("android");
            c3.add("php");
            System.out.println("c3:"+c3); //[c++, android, php]
    
            boolean contains = c1.containsAll(c3); //判断c1中是否包含c3中的所有元素
            System.out.println("是否包含:"+contains); //false
    
            /*
            //取交集:c1中仅保留与c3所共有的元素,而c3不变
            c1.retainAll(c3);
            System.out.println("c1:"+c1); //c1:[c++, android]
            System.out.println("c3:"+c3); //c3:[c++, android, php]
            */
    
            //删交集:将c1中与c3共有的元素删除,c3不变
            c1.removeAll(c3);
            System.out.println("c1:"+c1); //c1:[java, .net, ios, java]
            System.out.println("c3:"+c3); //c3:[c++, android, php]
        }
    }
    
  • iterator():获取一个用于遍历当前集合元素的迭代器

  • toArray():将集合转换为数组

4. 集合的遍历:

  • Collection接口提供了统一的遍历集合的方式:迭代器模式。通过iterator()方法可以获取一个用于遍历当前集合元素的迭代器(Iterator接口)

  • java.util.Iterator接口:定义了迭代器遍历集合的相关操作,不同的集合都实现了用于遍历自身元素的迭代器实现类,但我们无需记住它们的名字,从多态的角度把它们看成Iterator即可。

  • 迭代器遍历遵循的步骤为:问(hasNext())、取(next())、删(remove()),但删除并不是必要操作

    public class IteratorDemo {
        public static void main(String[] args) {
            Collection c = new ArrayList();
            c.add("one");
            c.add("#");
            c.add("two");
            c.add("#");
            c.add("three");
            c.add("#");
            c.add("four");
            c.add("#");
            c.add("five");
            System.out.println(c); //[one, #, two, #, three, #, four, #, five]
    
            /*
              迭代器的常用方法:
              1)boolean hasNext()----------问(必要操作)
                询问集合是否还有"下一个"元素可供迭代
                注意:迭代器默认开始位置在集合第1个元素之前
                     无论调用了多少次的hasNext(),迭代器的位置都不会改变
              2)Object next()--------------取(必要操作)
                迭代器向后移动一个位置来指向集合的下一个元素并将其获取
              3)void remove()--------------删(删除并非必要操作)
                删除next()方法所获取的元素
             */
            Iterator it = c.iterator(); //获取集合c的迭代器
            while(it.hasNext()){ //若有下一个元素
                String str = (String)it.next(); //获取下一个元素并强转为String类型
                System.out.println(str);
                if("#".equals(str)){
                    //c.remove(str); //迭代器遍历过程中不允许通过集合的方式来增删元素,否则会报异常
                    it.remove(); //删除next()方法所获取的元素
                }
            }
            System.out.println(c);
        }
    }
    

5. 增强for循环/新循环:

  • jdk1.5时推出了一个特性:增强型for循环,也称为新循环,让我们使用相同的语法遍历集合和数组。它的内部是通过Iterator实现的,所以不能动态的增删元素。

  • 语法:

    for(元素类型 变量名 : 集合或数组){
        循环体
    }
    
    public class NewForDemo {
        public static void main(String[] args) {
            String[] array = {"one","two","three","four","five"};
            for(int i=0;i<array.length;i++){
                System.out.println(array[i]);
            }
            for(String str : array){ //str表示的就是数组中的每个元素
                System.out.println(str);
            }
    
            Collection c = new ArrayList();
            c.add("one");
            c.add("two");
            c.add("three");
            c.add("four");
            c.add("five");
            Iterator it = c.iterator();
            while(it.hasNext()){
                String str = (String)it.next();
                System.out.println(str);
            }
            for(Object obj : c){ //obj代表集合中的每个元素
                String str = (String)obj;
                System.out.println(str);
            }
    
        }
    }
    

6. 泛型:

  • JDK1.5时推出了一个特性:泛型

  • 泛型也称为参数化类型,允许我们在使用一个类时,传入某个类型来规定其内部的属性、方法参数或返回值类型,使得我们使用时更加方便。

    • 泛型在集合中被广泛使用,用来指定集合中元素的类型
    • 若不指定泛型的具体类型,则默认为Object
    • 若指定了泛型的具体类型,则在获取泛型的值时,编译器会自动补充强转操作
    public class GenericDemo {
        public static void main(String[] args) {
            Collection<Point> c = new ArrayList<>();
            c.add(new Point(1,2));
            c.add(new Point(3,4));
            c.add(new Point(5,6));
            c.add(new Point(7,8));
    
            Iterator<Point> it = c.iterator();
            while(it.hasNext()){
                Point p = it.next();
                System.out.println(p);
            }
    
            for(Point p : c){
                System.out.println(p);
            }
    
            /*
            Collection<String> c = new ArrayList<>(); //泛型集合
            c.add("one");
            c.add("two");
            c.add("three");
            c.add("four");
            c.add("five");
            //c.add(123); //编译错误,123的类型违背了集合c所指向的泛型的实际类型String
    
            //迭代器所指定的泛型应当与其遍历的集合的泛型一致
            Iterator<String> it = c.iterator();
            while(it.hasNext()){
                String str = it.next();
                System.out.println(str);
            }
    
            for(String str : c){
                System.out.println(str);
            }
             */
        }
    }
    

7. 集合与数组的互转:

  • 集合转换为数组:

    public class CollectionToArray {
        public static void main(String[] args) {
            Collection<String> c = new ArrayList<>();
            c.add("one");
            c.add("two");
            c.add("three");
            c.add("four");
            c.add("five");
            System.out.println(c); //[one, two, three, four, five]
    
            //若参数数组元素个数==集合元素个数,那就正常转换
            //若参数数组元素个数<集合元素个数,那也正常转换(按照集合大小给数组)
            //若参数数组元素个数>集合元素个数,那也正常转换,同时在末尾补默认值
            String[] array = c.toArray(new String[5]);
            System.out.println(Arrays.toString(array)); //[one, two, three, four, five]
    
        }
    }
    
  • 数组转换为集合:

    public class ArrayToList {
        public static void main(String[] args) {
            String[] array = {"one", "two", "three", "four", "five"};
            System.out.println("array:"+ Arrays.toString(array)); //[one, two, three, four, five]
    
            //asList()方法会返回内部的ArrayList,内部直接引用给定数组array
            List<String> list = Arrays.asList(array);
            System.out.println("list:"+list); //[one, two, three, four, five]
    
            //对数组操作后,集合也会相应的改变
            array[1] = "six";
            System.out.println("array:"+ Arrays.toString(array));
            System.out.println("list:"+list);
    
            //对集合操作后,数组也会做相应的改变
            list.set(2,"seven"); //将集合的第3个元素修改为seven
            System.out.println("array:"+ Arrays.toString(array));
            System.out.println("list:"+list);
    
            //给集合添加/删除元素相当于给数组添加/删除元素
            //而数组是定长的,不会自动扩容/缩容,因此发生不支持操作异常
            list.add("!!!!"); //运行时会发生不支持操作异常
        }
    }
    

标签:03,Java,元素,System,集合,add,API,println,out
From: https://blog.csdn.net/weixin_68522070/article/details/140761823

相关文章

  • HV000030: No validator could be found for constraint ‘javax.validation.constrai
    原文链接:https://blog.csdn.net/miachen520/article/details/119817478错误原因:数字类型不能使用javax.validation.constraints.Pattern注解解决办法方法一:.将字段类型设置为String类型;方法二:使用其他验证注解验证,数字的有@Size,@Min,@Max,@Range现将@Valid常用注解介绍如下:Be......
  • [Java]基础语法
    注释注释就是程序中对代码进行解释说明的文字生效范围:注释不影响程序执行,因为运行的字节码文件中不保留注释字面量数据在程序中的书写格式称为字面量变量在内存中开辟一块区域,用来存储数据,这块空间称为变量定义变量使用变量变量的优势便于数据的扩展和......
  • vue js事件方法调用api并返回值
    //确认confirm(id){if(this.isEdit&&this.form.list!==undefined&&this.form.list.length<=0){this.$notify({title:'表身为空时不能确认',type:'error'})}else{this.confirmLoading=trueinCo......
  • python中的Telebot API不断断开连接
    使用远程机器人,不断断开服务。我暂时让它在发生这种情况时重新启动。下面是我的代码和错误:importrandomimporttelebotfromtelebot.typesimportInlineKeyboardMarkup,InlineKeyboardButtonfromthreadingimportTimer,Eventfromdotenvimportload_dotenvimporto......
  • 当 API 返回无交易时,如何检索特定 Cosmos 地址的交易数据?
    我正在尝试使用Python和aiohttp检索Cosmos区块链上特定地址的交易数据。该地址在Mintscan上显示有61笔交易,但在查询区块链的API时,它没有返回任何交易。这是我当前的代码:importaiohttpimportasyncioasyncdeffetch_transactions_for_address(node_url,addres......
  • 如何在 FastAPI 中手动创建 UploadFile?
    背景我正在尝试为我的FastAPI应用程序编写测试。我有一个对象ImageRecord,它将图像上传到S3。方法签名如下:asyncdefupload_image(file:UploadFile,s3_client=None)->'ImageRecord':API逻辑(即实际的@app.post函数)调用此方法来上传对象。我想......
  • javascript中的symbol
    symbol的使用功能类似于一种标志唯一性的ID理解唯一性<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title></head><body><script>lets1=Symbol()lets......
  • Mocreak Office Installer(Office安装部署工具) v2.3.0.703 中文绿色版
    概述Mocreak是一款一键自动化下载、安装、部署正版Office的办公增强工具。该工具完全免费、无广告、绿色、无毒、简约、高效、安全。软件特点一键快速下载、安装、部署最新版MicrosoftOffice软件。提供简约、高效,且可自定义的图形界面,提升部署效率。支持将Office安装......
  • 上手多线程(Java)用多线程,就能让图画动起来!
    多线程的三个关键:1.继承Thread类,重写run方法2.线程工作代码在run方法中写3.启动时,调用线程对象的start()如下,教大家实现一个简单的多线程项目一.首先写好一个界面,创建一个按钮对象并加入监听点击按钮后会启动一个新的线程ThreadDraw来进行绘图操作......
  • java基础 手写回忆篇
     java特性:分布行,跨平台性,安全行,多线程,面向对象编程,简单性高级语言分为编译型和解释型:编译型:整个程序写完一起编译速度快效率高解释性:需要一句解释一句编译速度慢效率低java是两者综合:编译器(javac)先把你写好的代码编译成class文件(字节码文件)再用jvm,java虚拟机(解释器)解释执......