开发常见的对象-集合类

数组和集合的区别,为什么会出现集合?

  1. 数据多了,用的是数组,也可以将对象存放在数组中,比如Person[] persons=new Person[3];
  2. 常见的定义数组的方式:int[] ints =new int[3];
  3. 但是这边会出现一个问题:创建对象的个数是在运行的时候确定的,比如在游戏『飞机大战』中,创建子弹的个数和小飞机的个数,以及在『捕鱼达人』游戏中,鱼的个数是随机生成的,而数组的特点是:存放的数据的个数是固定的,而创建对象的个数是不确定的,因此数组不能存放动态创建且个数不确定的元素``『这就是为什么不能用数组存放动态生成元素的原因』
  4. 还有数组不方便增减元素:数组删除增加元素要遍历里面的元素,很麻烦每次
  5. 数组能存基本数据类型,而集合只能存对象
  6. 数组只有一种,集合却有很多种

容器有很多种

  1. 水杯有很多种、教室里面人的排列也是不同的、集合也有很多种(里面数据结构的不同导致)
  2. 抽象:水杯有很多种-圆形的、方形的;但是水杯都是有一个共同点:装水
  3. 保证对最上层的Collection的了解,就就像是了解最基本的水杯一样
  4. 学习体系的方法:学最顶层,用最底层

Collection接口:java.util包

  1. 容器的基本功能:存、取(不是难点,因为后期用的多)

常见方法:

  1. 取出元素,迭代;碗里还有饭吗,给我打一碗,吃完了,还有吗?有,再来一碗;还有吗?没了,好吧,那算了
    a) 迭代器:具备迭代功能的对象,即具备问容器还有没有元素,以及如果有就取出来功能的对象
    b) 迭代器不需要new,直接通过集合.iterator()获得
    c) 迭代器的功能:1、询问有没有下一个;( 回答有或者没有,因此返回值是boolean)2、要是有的话,取出来呗(取出)
  2. 每一个容器都有自己的结构取出元素的方式,要是这样的话,取出元素需要面对每一个具体的集合
    a) 为了降低容器和取出方式的耦合性,将每一个容器的取出方式进行抽取
    b) 即每一个容器都有一个内部类: 罐头都有一个取出该罐头内部糖豆的功能,定义在每一个罐头的内部;
    c) 现在将每一个容器的内部类(实现取出功能),进行抽取,提出共同的功能:抽取出来一个接口:Itarator
  3. Itarator 迭代器接口是取出Collection体系中集合中元素的公共方法,因为需要每一个具体的集合容器去根据自己的内部的数据结构去具体的实现;迭代器结构的通用功能:
    a) Boolean hasNext()-判断容器中还有没有元素
    b) E next()-有的话,就取出该元素
    c) Boolean remove()-有的话,删除该元素
    d)

Collection 中List和Set的区别

  1. List<E>(特有方法围绕着索引)-唯一支持增删改查的集合
    a) 特性
    i. 存入和取出的顺序一样
    ii. 对列表中每一个元素进行精确控制:通过索引(比如通过学号定位学校中每一个同学)
    iii. 且列表中的元素允许重复
    b) 常见方法:
    i. add(index,element)
    ii. remove(index)
    iii. set(index,element)
    iv. indexOf(element)-通过元素获得索引int;若有element返回对应的索引位置,否则返回-1
    v. get(index)-通过索引获得元素element;若index的值不超出(list的大小-1),则正确;否则报java.lang.IndexOutOfBoundsException
    vi.
    vii. 取出元素的两种方式- `
    for (Iterator iterator = list.iterator(); iterator.hasNext();) {
    System.out.println(iterator.next());
    }
    for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
    }

i. 取出元素的过程中出现问题:在遍历到某一元素的时候,删除某一元素,或者添加某一元素,会出现异常` java.util.ConcurrentModificationException
ii. 迭代其中获得的元素的个数是4个,而list添加一个新的元素;这时候迭代器和集合同时操作集合中的元素,会出现迭代的不确定性,因此报出异常
iii. 解决办法;迭代器对元素进行迭代,也用迭代器来更新集合中的元素
iv. ListIterator是利用底层的角标(索引)-在迭代的过程中需要用

ArrayList

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值