首页 > 编程语言 >学习笔记4:JavaSE & API(集合)

学习笔记4:JavaSE & API(集合)

时间:2023-12-03 14:14:04浏览次数:36  
标签:元素 list 笔记 add API 数组 集合 new JavaSE

1、集合综述

(1)定义:集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便。

(2)java集合框架中相关接口

  • java.util.Collection接口:所有集合的顶级接口。Collection下面有多种实现类,因此我们有更多的数据结构可供选择。
  • java.util.List:线性表。是可重复集合,并且有序。
  • java.util.Set:不可重复的集合,大部分实现类是无序的。 

(3)集合中的元素:集合不可以放基本类型(如果放基本类型会自动装箱),只可以放引用类型(地址)。

(4)元素重复的判定:依靠元素自身equals比较的结果,为true就认为是重复元素。默认equals比较的是地址。

2、java.util.Collection接口

(1)子接口:

  • List:可重复且有序,常用实现类,ArrayList
  • Set:不可重复,HashSet

(2)常用方法

  • add():是有返回值的,添加成功返回true。
  • size():返回集合的大小。
  • isEmpty():是否为空。
  • clear():清空集合内元素。
  • contains(): 是否包含某元素,通过equals方法比较,默认是比较的地址。
  • remove():删除某元素。对于list而言,重复元素只会删除一次。

(3)集合间的操作

  • addAll():两集合取并集。当添加后的集合发生改变了,返回true。
  • containsAll():判断是否包含所有元素。
  • retainAll():两个集合取交集。
  • removeAll():两个集合删交集。

3、集合的遍历

(1)迭代器模式:java.util.Iterator 迭代器接口。 Iterator iterator(), 该方法可以获取一个用于遍历当前集合的迭代器实现类。

  • hasNext():判断是否有下一个,一定要先判断
  • next():移动到下一个,并取出
  • 示例
        Collection c = new ArrayList();
        c.add("one");
        c.add("#");
        c.add("two");
        c.add("#");
        c.add("three");
        Iterator it = c.iterator();
        //一定先判断,再取出,然后再操作
        while(it.hasNext()){
            String e = (String)it.next();
            System.out.println(e);
            if("#".equals(e)){
                //不可以直接用集合删除元素
                it.remove();
            }
        }
        System.out.println(c);
  • 注意:
    • 遍历过程中,不要通过集合的add、remove改变集合的元素个数。
    • 遍历过程中,可以使用迭代器的remove的方法删除,但是迭代器没有add。
    • Iteartor也是可以加泛型的。

(2)新循环遍历

  • 说明:JDK5之后,推出了一个新的特性,增强型for循环.也称为新循环。是可以使用相同的语法遍历集合或数组。
  • 语法:for(变量:集合){ }

(3)泛型:

  • JDK5推出的新特性。也称作参数化类型,在使用一个类时去指定该类中某个属性的类型、方法返回值的类型、方法参数的类型。
  • 泛型在集合中广泛使用,用于指定该集合中的元素类型。
  • 集合中不指定泛型,默认是Object。

4、List集

(1)定义

  • java.util.List接口,继承自Collection。
  • List集合是可重复集,并且有序,提供了一套可以通过下标操作元素的方法。

(2)常用实现类

  • java.util.ArrayList:连续空间、查询性能好、可重复、有序
  • java.util.LinkedList:链表、增删性能好(首位增删性能最佳)

(3)常用方法

  • get():通过下标访问元素
  • set():设置某个位置的元素,同时,返回值是被替换下来的元素
  • Collections.reverse():反转集合。Collections是集合的工具类,里面有很多静态方法。
  • 重载add():在指定位置添加
  • 重载remove():删除指定位置元素,同时,返回值是删除的元素
  • subList():截取指定字符串,(a, b)含头不含尾。注意:对子集的操作,就是对原集合的操作。
  • clear():清空集合

5、集合转换为数组

(1)Collection提供了一个方法:toArray可以将当前集合转换为一个数组。

(2)toArray():传一个指定类型的数组进去,数组长度固定,返回指定类型的数组。

  • 如果长度过大,则返回值数组的后面几位为null;
  • 如果长度过小,则返回数组长度为集合内部数组的长度;
  • 如果长度正好,则返回正常长度的数组。
        List<String> list = new ArrayList<>();
        list.add("one");
        list.add("two");
        list.add("three");
        /*
            重载的toArray方法要求传入一个数组,内部会将集合所有元素存入该数组后将其返回(前提是该数组长度>=集合的size)。
            如果给定的数组长度不足,则方法内部会自行根据给定数组类型创建一个与集合size一致长度的数组并将集合元素存入后返回。
         */
        String[] array = list.toArray(new String[list.size()]);
        //其实可以直接写成传入长度0
//        String[] array = list.toArray(new String[0]);
        System.out.println(array.length);
        System.out.println(Arrays.toString(array));

6、数组转换为List集合

(1)说明:数组的工具类Arrays提供了一个静态方法asList(),可以将一个数组转换为一个List集合。

(2)Arrays.asList(array):数组转成集合

  • 对该集合的操作,就是对数组的操作,比如set
  • 同时,一切改变数组长度的操作都是报错:UnsupportedOperationException,比如add和remove。

(3)new ArrayList(list):包含Collection的构造器,创建的ArrayList包含Collection的所有元素。Collection可以是list也可以是set,如果是set,注意它会去重。

        String[] array = {"one","two","three","four","five"};
        System.out.println("array:"+ Arrays.toString(array));
        
        //方法一:asList,数组和集合是同一引用
        List<String> list = Arrays.asList(array);
        System.out.println("list:" + list);
        //对该集合的操作就是对原数组对应的操作
        list.set(1,"six");
        System.out.println("list:" + list);
        System.out.println("array:"+ Arrays.toString(array));
        //会改变数组长度的操作都是不支持的,因为数组是定长的。
        //会抛出异常:java.lang.UnsupportedOperationException(不支持的操作异常)
        //list.add("seven");

        //方法二:addAll
        List<String> list2 = new ArrayList<>();
        list2.addAll(list);
        System.out.println("list2:"+list2);

        //方法三:所有的集合都支持一个参数为Collection的构造器,作用是在创建当前集合的同时包含给定集合中的所有元素
        List<String> list3 = new ArrayList<>(list);
        list3.add("seven");
        System.out.println("list3:"+list3);

7、集合的排序

(1)java.util.Collections类:集合的工具类,里面定义了很多静态方法用于操作集合。

(2)Collections.sort(list):自然排序,升序。

(3)Collections.shuffle(list):乱序。

(4)Collections.sort(list, comparator):使用Comparator比较器。

(5)两种排序比较:
  • Collections.sort(list):list的元素需要实现Comparable接口,重写compareTo()方法。
  • Collections.sort(list, comparator):使用Comparator比较器,并实现compare方法。
(6)示例
        /********************************** 自然排序 *********************************************/
        List<Integer> list = new ArrayList<>();
        Random random = new Random();
        for(int i=0;i<10;i++){
            list.add(random.nextInt(100));
        }
        System.out.println(list);
        Collections.sort(list);
        System.out.println(list);

        /********************************** 自定义类型排序 *********************************************/
        List<Point> list2 = new ArrayList<>();
        list2.add(new Point(1,2));
        list2.add(new Point(15,8));
        list2.add(new Point(9,7));
        System.out.println(list2);
        Collections.sort(list2,new Comparator<Point>() {
            @Override
            public int compare(Point o1, Point o2) {//compare:比较
                int len1 = o1.getX()*o1.getX()+o1.getY()* o1.getY();
                int len2 = o2.getX()*o2.getX()+o2.getY()* o2.getY();
                return len1-len2;
            }
        });
        //lambda写法
        Collections.sort(list2,(o1,o2)->
                o1.getX() * o1.getX() + o1.getY() * o1.getY() -
                o2.getX() * o2.getX() - o2.getY() * o2.getY()
        );
        System.out.println(list);

 

 

标签:元素,list,笔记,add,API,数组,集合,new,JavaSE
From: https://www.cnblogs.com/cleven/p/17872783.html

相关文章

  • Jquery - 学习笔记
    1.Jquery的下载与安装1.1下载https://jquery.com/1.2安装<!doctypehtml><htmllang="zh/cn"><head><metacharset="UTF-8"><title>jquerylearn</title></head><body><!--引入jquery-->&......
  • 学c笔记归纳 第二篇——基本数据类型
    基本数据类型告诉编译器,变量是什么类型,不同类型占内存大小不同,单位:字节char字符型 1short短整型2int整型  4long长整型 4longlong更长的整型 ......
  • 计算几何学习笔记
    叉乘(叉积)定义(二维):\[\vec{p_1}\times\vec{p_2}=x_1y_2-x_2y_1=-\vec{p_2}\times\vec{p_1}\]性质:若\(\vec{p_2}\)在\(\vec{p_1}\)的逆时针方向,则结果大于0。若\(\vec{p_2}\)在\(\vec{p_1}\)的顺时针方向,则结果小于0。若\(\vec{p_2}\)与\(\vec{p_1}\)共线,......
  • 学习笔记12
    一、苏格拉底挑战二、遇见的问题三、实践过程......
  • 学习笔记十二
    MySQL数据库系统一、MySQL简介MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,分为社区版和商业......
  • 商用密码的产业发展及应用创新学习笔记
    商用密码的产业发展及应用创新讲解人:北京数字认证股份有限公司:林雪焰共建可信任的数字世界密码技术数字信任(DigitalTrust)数据安全(DataSecurity)数字身份管理(DigitalIdentityManagement)以密码技术为核心的自主知识产权产品及服务1.身份与访问管理2.密码基......
  • 学习笔记12——20211303
    一、学习任务自学教材第14章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X知识点,请你以苏格拉底的方式对我进行提问,一次一个问题”核心是要求GPT:......
  • 学习笔记12
    学习笔记12教材知识点总结14.1MySQL简介关系数据库系统:数据存储在表中,表由多个行和列组成表之间互相关联,关系结构使得可在表上查询来检索信息并修改数据库中的数据MySQL:开源数据库管理系统,有服务器和客户机组成14.2安装MySQLUbuntuLinux:sudoapt-getinsta......
  • Unity学习笔记--数据持久化Json
    JSON相关json是国际通用语言,可以跨平台(游戏,软件,网页,不同OS)使用,json语法较为简单,使用更广泛。json使用键值对来存储。认识json文件//注意字典类型存储时,键是以string类型存储的需要添加“”{"name":"TonyChang","age":21,"sex":true,"Float":2.5,"arrarys"......
  • openGauss学习笔记-139 openGauss 数据库运维-例行维护-检查应用连接数
    openGauss学习笔记-139openGauss数据库运维-例行维护-检查应用连接数如果应用程序与数据库的连接数超过最大值,则新的连接无法建立。建议每天检查连接数,及时释放空闲的连接或者增加最大连接数。139.1操作步骤以操作系统用户omm登录数据库主节点。使用如下命令连接数据库......