Java集合体系之Collection

目录

集合

集合框架定义

集合体系结构

Collection接口常用方法

Collection的通用遍历方式


集合

集合框架定义

集合框架定义:集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体。集合被用于存储、获取、操纵和传输聚合的数据。典型地,集合代表形成一个自然组合的数据条目,如一个学生成绩(一个学生姓名和对应课程、以及成绩的映射)。并且在集合定义时,是提供一种存储空间可变的存储模型,存储的数据容量可以发生改变。

集合体系结构

Java集合可以分为两类,Collection单列集合和Map双列集合。所谓单列集合就是指一次只能添加一个数据(如学生),双列集合是指依次能添加一对数据(如学号,学生姓名)。

Collection——集合接口层级的根。一个集合代表一组对象的聚合,这些对象称为这个集合的“元素”。Collection接口提供了一些最通用的方法,通过这些方法可以实现对集合的基本操作。有的集合允许重复的元素,而其他的集合不允许有重复的元素。有些集合是有序的,有些集合是无序的。Java平台并不提供任何对Collection接口的直接实现,但是提供更加详细的对子接口的实现,诸如Set和List接口。

List——一个有序的集合。List可以包含重复的元素,并且List中的元素是有序排列的。因此使用List通常需要对列表中每个元素的插入位置进行精确的控制,并且能通过元素的整数索引(位置)访问元素。

我们先来了解一下单列集合中的List和set的区别,List系列的集合,属于有序集合,添加的元素是有序、可重复、有索引的,提供了方便的访问、插入、删除等操作。

List中的有序指的是存和取的顺序是一致的,存入的位置和取的index一致。可重复就是说存储的数据不去重,均可以存储。有索引是指通过索引可以获得相应的数据。

Set系列集合:添加的元素是无序、不重复、无索引。无序是指保存和取的时候的顺序可能不一致,不重复就是指保存数据不能重复,后面也可以利用这个特性来去重,无索引指不能通过索引来获取Set里的每一个元素。

Collection接口常用方法

方法名称

说明

int size()

返回集合中元素的个数/集合的长度

boolean contains(Object o)

判断当前集合中是否包含给定的对象

boolean add(E e)

添加元素到当前集合中

boolean remove(Object o)

将当前集合中的指定元素删除

void clear()

清空结合中的所有元素

Collection是单列集合的父类接口,它的功能是全部单列集合都可以继承使用的。其常见的方法有以下内容,size(),返回集合中元素的个数/集合的长度;contains(Object o),是判断当前集合中是否包含给定的对象,add(E e)添加元素到当前集合中,remove(Object o)将当前集合中的指定元素删除,clear(),则是指清空结合中的所有元素。

Collection是一个接口,所以不能通过new 创建对象,所以我们在学习它里面的方法时,只能创建其实现类的对象,我们就先以ArrayList为例。具体方法实现过程如下:

 /**
         * collection是一个接口,所以不能直接创建它的对象,需要创建它的实现类
         */
        Collection<String>  collection=new ArrayList<>();
       /**
        * boolean add(E e)
        * 1.add方法,往集合中添加数据
        *List中添加的数据可重复,所以add返回均为true;
        *set中添加数据不可重复,所以add返回可能会为false;
        */
        collection.add("hello");
        collection.add("world!");
        System.out.println(collection);
        /**
         * int size()
         * 2.size方法  获取集合中元素的长度
         */
        int arraySize=collection.size();
        System.out.println("ArrayList长度为:"+arraySize);
        /**
         * boolean contains(Object o)
         * 3.contains(Object o)
         * 底层是依赖equals方法进行判断是否存在的,所以,如果集合中处处的是自定义对象,也想通过contains
         * 方法来判断是否包含,那么在javabean类中,一定要重写equals方法
         * ArrayList
         */

        //3. boolean contains(Object o);   判断当前集合中是否包含给定的对象
        boolean result= collection.contains("hello");
        System.out.println(result);
        boolean result2= collection.contains("hi");
        System.out.println(result2);

        //4.boolean remove(Object o) 删除一个不存在的对象时,返回false
       boolean flag= collection.remove("world!");
        System.out.println("flag:"+flag);
        System.out.println(collection);
        System.out.println(collection.remove("hi"));


        //5.void clear() 清除对象里的内容
        collection.clear();
        System.out.println(collection);

Collection的通用遍历方式

  • 迭代器遍历
    • 迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式。
    • 获取迭代器
      • Iterator iterator():返回迭代器对象,默认指向当前集合的0索引。
    • Iterator的常用方法:
      • hasNext():判断当前位置是否有元素,有元素则返回true,没有则返回false
      • next():获取当前位置的元素,并将迭代器对象移向下一个对象

接下来我们来学习一下Collection的通用遍历方式。迭代器遍历、增加for遍历、lambda表达式遍历。之前在数组的时候会使用普通for循环遍历,但是普通for遍历时通过索引遍历出来的,而Set中没有索引,所以普通for只适用于list集合。

什么是迭代器遍历呢,所谓迭代就是一个一个把元素获取出来,迭代器最大的特点,它是不依赖索引的。迭代器在Java中的类是Iterator,迭代器是集合专用的遍历方式。那么我们如何获取迭代器呢?通过Iterator iterator():iterator方法返回迭代器对象,默认指向当前集合的0索引。获取迭代器后我们怎么使用呢,那我们就简单来看一下Iterator的常用方法,第一个是hasNext(),判断当前位置是否有元素,有元素则返回true,没有则返回false;还有另外一个方法:next():获取当前位置的元素,并将迭代器对象移向下一个对象。

 public static void main(String[] args){
        //1.创建集合,并添加对象
        Collection<String> arrayList=new ArrayList<>();
        arrayList.add("hello");
        arrayList.add("world");
        arrayList.add("!");

        // 2.获取迭代器,迭代器就好比一个箭头,默认指向集合的0索引处
        // 创建指针
        Iterator<String> iterator=arrayList.iterator();
        //3.利用循环不断的取获取集合中的每一个元素,hasNext()判断是否有元素
        while(iterator.hasNext()) {
            //4.next()方法,获取元素,移动指针
            String arr = iterator.next();
            System.out.println(arr);
        }
    }

第1步:通过new ArrayList创建集合,并添加对象。第2步:获取迭代器,迭代器就好比一个箭头,默认指向集合的0索引处。我们使用while循环来做元素获取,使用iterator.hasNext()来判断当前位置是否有元素,如果有元素返回true,我们则使用next()做元素的获取,next在做获取的时候还会将指针移到下一个位置。

迭代器是不依赖指针的,它是通过hasNext判断当前位置是否有元素,使用next()获取元素并指针向后移动的。在使用的过程中我们需要注意指针的位置,指针超过后再使用next获取则会报异常。在迭代器遍历的过程中不能通过集合的方法进行增加/删除,但是可以使用迭代器自己的remove方法。在迭代器外边我们可以使用集合的方法进行增加/删除。

迭代器学习完毕了,那么我们再来看一下增加for遍历。增强for遍历的底层是迭代器,它是为了简化迭代器书写的,所有的单列集合和数组才能用增加for遍历。格式如下for(数据类型 变量名:数据/集合){},在使用增加for遍历的时候,需要注意修改增加for中的变量,不会改变集合中原本的数据,因为变量是局部变量,只在方法内生效。而不会改变整体的值。我们来看一下代码:

public static void main(String[] args) {
        //1.创建集合,并添加对象
        Collection<String> arrayList=new ArrayList<>();
        arrayList.add("hello");
        arrayList.add("world");
        arrayList.add("!");
        //2.利用增强for进行遍历
        for(String arr:arrayList){
 //        修改增加for中的变量,不会改变集合中原本的数据,arr是一个局部变量
//            arr="hi";
            System.out.println(arr);
        }
        System.out.println(arrayList);

    }

打印的时候如果在里面修改arr的值为hi,循环之后再打印你说ArrayList会是什么呢,打印出来的ArrayList不会改变,因为在增强for中,arr只是一个第三方变量,修改第三方变量并不会修改集合中原本的数据。

connection它是单列集合的顶层接口,它里面所有的方法都被list和set系列的集合所共享,比如说常见的方法:add clear remove Size等,;

有三种通用的遍历方式,第1种浏迭代器遍历,第2中是增加for遍历,第三种就是lambda表达式遍历。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值