集合

 

集合

对象类型的数组

  1. 定义一个数组,数组中的元素的类型是引用数据类型
  2. 这种数组为对象数组,数组中的每一个元素其实都是一个对象的地址,而非对象本身。

集合的由来

  1. 对象数组的不足
    1. 无法扩展
      • 数组本身的长度是固定的,一旦创建,就无法修改。
      • 结果:每次要添加一个新元素的时候,就需要创建一个新的数组,长度为原来数组的长度+1,将原来数组中的所有元素拷贝到新数组中,添加自己要添加的那个新元素。这些操作和真正的业务逻辑无关。
    2. 解决:
  • 将对象类型的数组,变成某个类型的私有成员变量。
  • 对于数组的各种操作,都封装成公有的方法。
  • 如果要添加一个元素,底层数组拷贝,次数较少,底层数组的拷贝调用者感知不到,只能感知到这个类型是一个可以伸缩的容器,
  • 还在数组的操作上面,增加了很多功能。
  • 上面提到的【某个类型】,就是集合

集合和数组的区别

  1. 共同点         

               都是用于存储数据的容器

     2. 不同点

               存储内容的不同

                          数组既可以存储引用数据类型,也可以存储基本数据类型

                          集合只能存储引用数据类型,如果需要存储基本数据类型,其实里面就是包装类的对象

              存储的数量不同

                         数组是一个不可变的容器,一旦确定好对象,就无发增删

                         集合是一个可以伸缩的容器

              方法的不同

                        数组中只有Object的方法,和一个length属性

                        集合中有很多方法

集合体系的分类

  • 单列集合:每个元素都是一个单独的个体。
  • 双列集合:每个操作都是针对一对数据进行的,一对数据就是作为一个单位。

单列集合的体系

Collection 单列集合的顶层接口

  1. List 有序的子接口

                               ArrayList    顺序存储,查询修改快

                               LinkedList   链式存储,增加删除快

                               Vector  顺序存储,都慢

                       2.Set 无序的子接口

                              HashSet        哈希存储

                              LinkedHashSet

双列集合的体系

     Map 双列集合的顶层接口

               HashMap  哈希表存储

                             LinkedHashMap

Collection

概述和常用方法

单词:收集、集合

单列集合的顶层接口,定义的是单列集合中共有的功能。

collection是一个接口,不能直接创建对象,随意找一个实现类创建对象

使用接口类型的引用,指向实现类的对象

collection类型的引用,指向ArrayList类型的对象。(只能调用接口中的方法)

常用方法

add(Object obj):将obj元素添加到集合中

remove(Object obj):将obj元素从集合中删除

clear():将集合中的元素清空

isEmpty():判断集合是否为空

contains(Object obj):判断集合中是否包含obj元素

size():返回集合中的元素个数

List

概述

  1. 是collection的一个子接口
  2. 特点
    1. 有序:每个元素都有自己的位置,不同位置是有分别的。
    2. 【有索引】:每个元素都有自己的编号
    3. 可以重复:即使值是相同的几个元素,位置和索引也各不相同,可以区分这几个值。
  3. 特有方法:
    1. add(int index,Object obj):在指定索引上,添加指定的元素
    2. remove(int index):删除指定索引上的值
    3. set(int index,Object obj):将指定索引上的值,修改为指定的值
    4. get(int index):根据给定的索引,获取对应位置的值

Collection的第一种遍历方法

  1. 转成数组,通过遍历数组的方式,来间接的遍历集合
  2. Object[] toArray():将调用者集合转成Object类型的数组

集合遍历的第二种方式:迭代器

  1. 更迭、更新换代,从某一个到下一个的过程的含义
  2. 迭代器:专门用于将集合中的元素,一个到另一个逐个进行迭代的对象。
  3. 获取:集合自己内部就应该有一个可以迭代自己的对象,从集合对象中获取即可。
    1. Iterator iterator()
  4. 迭代器的使用:
    1. 方法iterator()返回的是一个iterator接口的实现类对象,可以使用的就是iterator接口中的方法。
    2. hasNext():判断集合中是否还有下一个元素
    3. next():获取集合中的下一个元素
    4. remove():删除迭代器对象正在迭代的那个对象
  5. 迭代器的注意事项
  • 迭代器对象虽然多次调用next方法,都是同样的方法名称,但是每次调用返回的结果是不同的,是因为next方法既可以获取下一个元素,也会让迭代器对象向前移动一步。
  • 如果没有下一个元素,仍然调用next方法,出现java.util.NoSuchElementException(没有当前元素异常),可以使用hasNext方法判断是否有下一个元素,决定是否调用next方法。
  • hasNext方法,判断是否有下一个元素,不会移动迭代器的位置
  • next方法,不仅可以获取下一个元素,还会移动迭代器的位置。
  • 不要只判断一次hasnext方法,就调用多次next方法。

第三种遍历方式

  1. 针对list集合特有的遍历方式
  2. 可以通过集合中的size()方法获取集合索引的范围,根据索引通过get方法可以回去指定索引的值。

并发修改异常

  1. ConcurrentModificationException
    1. 并发   修改      异常
  2. 出现的原因:在使用【迭代器对象】遍历集合的同时,使用【集合对象】增加集合的元素
  3. 解决方法:两种解决方式都是针对list集合可以解决
    1. 方式1:迭代器遍历、迭代器增加
    2. 方式2:集合遍历、集合增加
  4. 解决方式1:迭代器遍历、迭代器增加
    1. 迭代器遍历:和之前一样
    2. 迭代器增加:问题:普通的迭代器中没有增加方法,需要使用list中特有的迭代器
      • 列表迭代器:listIterator.是iterator的子接口,拥有iterator中所有的方法,还有特有的方法
      • 列表迭代器的获取:listIterator()
  5. 解决方式2:集合遍历,集合添加
    1. 集合遍历:list特有的方式遍历,size和get方法结合
    2. 集合添加:集合的add方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值