一、概述
数组、集合都是对多个数据进行存储的,简称容器
【注】
这里的存储指的是内存层面的存储(链式存储等),而不是持久化存储
1.1 数组
1.2集合
由于数组的诸多缺点,Java中引入新的存储数据的结构:集合。而不同集合的底层数据结构不同,因此要学习很多不同的集合。分类如下:
其中,Collection的存储方式为一个数据一个数据的存储,Map是一对儿一对儿的存储。Collection为接口,List和Set为子接口,最后通过ArrayList和LinkedList俩个实现类来实现。Map集合没有子接口,直接通过两个实现类来实现。
数组和集合的区别
- 数组长度固定,但集合长度可变
- 数组中存储的是同一类元素,可以存储基本数据类型值,集合存储的都是对象,而且对象类型可以不一致。
二、方法
1增
- add
- addAll
2删
- clear
如果集合中有元素则删除返回true如果没有元素则删除失败返回false;返回值也可以是void,清空元素,集合还在 - remove
3查看
- iterator
是Collection集合的通用获取方式,在取出之前先进行判断,直到取完为止。Iterator迭代器是一个接口,需要使用对应的实现类对象。通过调用Collection的iterator()方法返回实现类对象。
【常用方法】
- boolean hasNext():判断是否有下一个元素
- E next():返回迭代的下一个元素
【使用步骤】
- 获取实现类对象
- 判断是否有下一个元素
- 取出元素
增强for循环:for each专门用来遍历数组和集合的
格式:
For(数组/集合的数据类型 变量名:集合/数组名){
} - size
4判断
- contains
- equals
- isEmpty
2.1 List接口(不唯一,有序)
2.1.1特点
- 有序集合,存储和取出的顺序是一致的
- 有索引,包含一些带索引的方法
- 允许存储重复的元素
2.1.2 带有索引的方法(防止索引异常)
Collection中的方法在List中同样可以使用
- Add
- Get:通过索引查看元素,在通过普通for循环的方式遍历List集合的时候用get()方法。
- Remove
- Set(替换指定索引的元素)
【注】 在集合中存入的是Interger类型的数据的时候,调用remove方法删除的是某个index的数据
2.1.3 遍历方法
for,迭代器和增强for循环
2.1.4 List接口的实现类
- ArrayList
- LinkedList
不同实现类的方法的使用围绕CRUD展开
2.2 Set接口(唯一,有序)
2.2.1遍历方式
- 迭代器
- 增强for循环
【注意事项】
- 如果泛型是自定义类型,一定要重写hashcode和equals方法
- 如果要使输出与输入顺序一样,要使用LinkHashSet
2.2.2 比较器
比如在String类中实现了Comparable接口,这个接口中有一个抽象方法CompareTo,String类中重写该方法即可。当比较自定义数据类型时,也需要让该类实现Comparable接口。然后在重写的comoaraTo方法中通过get方法或者其它方法来实现。类似这样比较的逻辑在自定义类中实现的叫做内部比较器。当写在自定义类的外部时,需要实现的接口变为Comparator,然后重写其中的compara方法即可。
2.3 Map接口
- 在创建Map集合时,可以指定泛型也可以不指定泛型。在向内部添加数据时使用put方法。
- 在对key和values进行集合遍历时,要分别使用keyset和values的方法来获取对应的集合对象,最后通过增强for循环的方式遍历。对于values也可以通过普通for循环加get得到对应的key来遍历。
- EntrySet方法得到的就是整个(key,values)
三、遍历方式
由于collection中无法得到对应索引,所以无法通过普通for循环来遍历
- forEach
- 通过集合对象调用iterator方法,输出前hasnext进行判断
未完待续
系列
Java(一):Java(初级)初识
Java(二):Java(初级)基础语法
Java(三):Java(初级)流程控制
Java(四):Java(初级)方法
Java(五):Java(初级)数组
Java(六):Java(初级)面向对象
Java(七):Java(中级)异常
Java(八):Java(中级)常用类
Java关键字