首页 > 编程语言 >Java重点 | Collection集合

Java重点 | Collection集合

时间:2022-12-22 13:02:15浏览次数:30  
标签:Java 元素 System Collection println coll 集合 out

Collection集合

概述

什么是集合?有什么用? 数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它类型的数据。 集合为什么说在开发中使用较多? 集合是一个容器,是一个载体,可以一次容纳多个对象。在实际开发中,假设连接数据库,数据库当中有10条记录,那么假设把这10条记录查询出来,在java程序中会将10条数据封装成10个java对象,然后将10个java对象放到某一个集合当中,将集合传到前端,然后遍历集合,将一个数据一个数据展现出来。

集合不能直接存储基本数据类型,另外集合也不能直接存储java对象,集合当中存储的都是java对象的内存地址。(或者说集合中存储的是引用。) list.add(100);//自动装箱Integer 注意: 集合在iava中本身是一个容器,是一个对象。集合中任何时候存储的都是"引用"。

集合和数组既然都是容器,它们有啥区别呢? 。 数组的长度是固定的。集合的长度是可变的。 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。

在iava中每一个不同的集合,底层会对应不同的数据结构。往不同的集合中存储元素,等于将数据放到了不同的数据结构当中。什么是数据结构?数据存储的结构就是数据结构。不同的数据结构,数据存储方式不同。例如: 数组、二叉树、链表、哈希表...以上这些都是常见的数据结构, 你往集合c1中放数据,可能是放到数组上了。你往集合c2中放数据,可能是放到二叉树上了。 你使用不同的集合等同于使用了不同的数据结构。不同集合对应不同数据结构。 你在iava集合这一章节,你需要掌握的不是精通数据结构。java中已经将数据结构实现了,已经写好了这些常用的集合类,你只需要掌握怎么用?在什么情况下选择哪一种合适的集合去使用即可。 new ArrayList();创建一个集合,底层是数组。 new LinkedList();创建一个集合对象,底层是链表。 new TreeSet();创建一个集合对象,底层是二叉树。 .....

集合在java JDK中哪个包下? java.util.*; 所有的集合类和集合接口都在java util包下。 为了让大家掌握集合这块的内容,最好能将集合的继承结构图背会!!! 集合整个这个体系是怎样的一个结构,需要有印象,后面会介绍继承结构图

在java中集合分为两大类: 一类是单个方式存储元素: 单个方式存储元素,这一类集合中超级父接口:java.util.Collection 一类是以键值对儿的方式存储元素 以键值对的方式存储元素,这一类集合中超级父接口:java.util.Map; 本篇文章会详细介绍Collection集合的全家桶。

Collection集合继承结构图

请添加图片描述 以后的开发主要是用这几个实现类,所以在这个图上就介绍这几个,并不代表就只有这些。

详细介绍

Iterable:可迭代的,可遍历的,所有集合元素都是可迭代的,可遍历的。所有集合继承 Iterable的含义是,所有集合都是可迭代的。

Iterator:集合的迭代器对象。 Collection继承Iterable中的iterator()方法,调用此方法返回Iterator迭代器对象,这个迭代器对象中有 hasNext()方法、next()方法、remove()方法来完成集合的遍历。

Collection:定义的是所有单列集合中共性的方法,所有单列集合都可以使用共性的方法,没有带索引的方法。

List集合存储元素特点:有序可重复,存储的元素有下标。有序实际上是说存进去是这个顺序,取出来还是这个顺序,这里的顺序不是说按照大小排序。有序是因为List集合都有下标,下标从0开始,以1递增。

ArrayList集合:底层采用了数组这种数据结构,ArrayList 集合是非线程安全的。

LinkedList集合:底层采用了双向链表数据结构,对于链表数据结构来说,随机增删效率较高,检索效率较低,链表中的元素,在空间存储上,内存地址不连续。

Vector集合:底层采用了数组这种数据结构,Vector集合是线程安全的,Vector所有方法都有syndronized关键字修饰,所以线程安全,但是效率较低,现在保证线程安全有别的方案,所以Vector使用较少了。

Set焦合存储元素特点:无字不可重复,无序表示存进去是这个顺序,取出来就不一定是这个顺字了,另外Set集合中元素没有下标。 Set集合中的元素还不能重复。

HashSet集合:在new的时候,底层实际上new了一个HashMap集合。向HashSet集合中存储元素,实际上是存储到HashMap集合中了。HashMap集合是一个哈希表数据结构,HashSet集合初始化容量16。扩容:扩容之后是原容量的2倍。

SortedSet集合存储元素的特点:由于继承了Set集合,所以它的特点也是无序不可重复,但是放在SortedSet集合中的元素可以自动排序。我们成为可排序集合。放到该集合中的元素是自动按照大小顺序排序的。

TreeSet集合:底层实际上是TreeMap newTreeSet集合的时候,底层实际上 new了一个TreeMap集合。往TreeSet集合中放数据的时候,实际上是将数据放到TreeMap集合中了。TreeMap集合底层采用了二叉树数据结构。

Collection接口的常用方法

在这里插入图片描述

详细介绍

public class Collection集合常用方法 {
    public static void main(String[] args) {
        //创建集合对象 可以使用多态
        Collection<String> coll =new ArrayList<>();
        System.out.println(coll); //重写了toString方法  []

        /*
            public boolean add(E e): 把给定的对象添加到当前集合
            返回值是一个Boolean值,一般都返回ture 所以可以不用接收
            添加成功返回ture,一般都成功
         */
        boolean b1 = coll.add("张三");
        System.out.println("b1:"+b1); //b1:true
        System.out.println(coll); //[张三]
        coll.add("李四");
        coll.add("王五");
        coll.add("赵六");
        coll.add("田七");
        System.out.println(coll); //[张三, 李四, 王五, 赵六, 田七]

        /*
            public boolean remove(E e): 把给定的对象在当前集合中删除。
            返回值是一个boolean值,集合中存在元素,删除元素,返回ture
                                 集合中不存在元素,删除失败,返回false
         */
        boolean b2 = coll.remove("赵六");
        System.out.println("b2:"+b2); //b2:true

        boolean b3 = coll.remove("赵四");
        System.out.println("b3:"+b3); //b3:false 不存在 所以返回false
        System.out.println(coll); //[张三, 李四, 王五, 田七]

        /*
            public boolean contains(E e): 判断当前集合是否包含给定的对象
            包含返回 ture
            不包含返回 false
         */
        boolean b4 = coll.contains("李四");
        System.out.println("b4:"+b4);  //b4:true

        boolean b5 = coll.contains("赵四");
        System.out.println("b5:"+b5); //b5:false

        /*
            public boolean isEmpty(): 判断集合是否为空
            集合为空:返回ture
            集合不为空:返回false
         */
        boolean b6 = coll.isEmpty();
        System.out.println("b6:"+b6); //b6:false


        /*
            public int size(): 返回集合中元素的个数
         */
        int size = coll.size();
        System.out.println("size:"+size); //size:4

        /*
            public Onject[] toArray():把集合的元素,存储到数组中
         */
        Object[] arr = coll.toArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

        /*
            public void clear() :清空集合所有元素。但是不删除集合,集合还存在
         */
        coll.clear();
        System.out.println(coll); //[]
        System.out.println(coll.isEmpty()); //true

        /*这些就是这个集合通用的方法
        上面玩的是多态 :把ArrayList集合变成别的子类集合,一样通用
                */
    }
}

Collection的两个方法需要注意的问题

在这里插入图片描述 在这里插入图片描述在这里插入图片描述

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

Iterator迭代器

在这里插入图片描述

在这里插入图片描述

迭代器的代码实现

在这里插入图片描述

public class 迭代器 {
    public static void main(String[] args) {
        //创建一个集合对象
        Collection<String> coll = new ArrayList<>();
        //往集合添加元素
        coll.add("飞飞");
        coll.add("东海");
        coll.add("彬彬");
        coll.add("家庆");
        coll.add("奥迪");
        coll.add("雨朋");

        /*
            1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
            注意:
                Iterator<E> 接口也是有泛型的,迭代器的泛型跟着集合走,
                集合是什么泛型,迭代器就是什么泛型
         */
        // 多态  接口                  实现类对象
        Iterator<String> it = coll.iterator();
        //2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
        boolean b = it.hasNext();
        System.out.println(b); //ture 返回ture 有元素
        //3.使用Iterator接口中的方法next取出集合下一个元素
        String next = it.next();
        System.out.println(next); //游飞

       /*
            后面重复上面两行代码,就可以取出后面的,一直到最后,没有下一个元素返回false
            发现使用迭代器取出集合中元素的代码,是一个重复的过程
            所以我们可以使用循环优化
            不知道集合中有多少元素,使用while循环
            循环结束条件,hasNext方法返回false
       */
        while (it.hasNext()){
            String e = it.next();
            System.out.println(e);
        }
    }
}

迭代器和remove方法冲突问题

在这里插入图片描述 在这里插入图片描述 总结:在这里插入图片描述

增强for循环

在这里插入图片描述

注意:增强for循环必须有遍历的目标。 目标只能是Collection或者是数组 增强for循环仅仅只能是作为遍历操作出现 工作或者学习过程中,只要是遍历,就使用增强for循环

标签:Java,元素,System,Collection,println,coll,集合,out
From: https://blog.51cto.com/u_15841797/5962669

相关文章

  • JAVA垃圾回收器与垃圾回收算法
    查看当前垃圾回收器类型命令java-XX:+PrintCommandLineFlags-versionjps+jinfo:先使用jps查看java进程号,在使用jinfo查看该进程的配置评估垃圾回收器性能时,重点关注......
  • java中的多态
    多态中,编译看左边,运行看右边不多逼逼,直接上代码。代码:(我觉得我们老师给的代码好归好,但不太容易理解,我就私自改了点,顺眼多了)classParent{publicintmyValue=100;//Par......
  • JavaScript Date 对象知识点复习
    复制单个代码控制台运行看结果从Date对象返回一个月中的某一天(1~31)。console.log("newDate().getDate()"-----------,newDate().getDate())从Date对象返......
  • Java学习笔记6
    1.类和对象1.1类和对象​ 客观存在的事物皆为对象,所以我们也常常说万物皆对象。类:类的理解类是对现实生活中一类具有共同属性和行为的事物的抽象类是对象的数据......
  • 基础教程-布尔-列表-元组-集合-字典
    布尔评估结果大部分都为true除空值(例如()、[]、{}、""、数字0和值None)外,没有多少值会被评估为False。当然,值False的计算结果为False。运算符类型作用......
  • 如何通过Java提取PDF中的图片
    PDF文档格式具有固定的文档布局,可以避免他人对其进行随意更改。但这也在一定程度上影响了我们对PDF的操作,例如,当我们需要将PDF文档中的图片用于其他地方时。​​FreeSpire.......
  • 如何通过Java提取PDF中的图片
    PDF文档格式具有固定的文档布局,可以避免他人对其进行随意更改。但这也在一定程度上影响了我们对PDF的操作,例如,当我们需要将PDF文档中的图片用于其他地方时。FreeSpire.PDF......
  • java 查看对象占用内存大小(代码库)
    <dependency><groupId>com.carrotsearch</groupId><artifactId>java-sizeof</artifactId><version>0.0.5</version></dependency>importcom.carrotse......
  • Java学习笔记5
    1.方法概述概念​ 方法(method)是程序中最小的执行单元。注意:方法必须先创建才可以使用,该过程称为方法的定义。方法创建后并不是直接可以运行的,进行方法的调用才会执......
  • 多个NX版本实现java调用
    设置环境变量只能实现一个NX版本的调用如果一台电脑上有几个NX版本就要把环境变量删了单独去设置 找到安装各个NX版本安装目录下的ugii文件夹里的ugii_env.dat文件#NX......