Java中级内容之集合框架ArratList

一. 与数组的区别

1. 使用数组的局限性

如果要存放多个对象,可以使用数组,但是数组有局限性。
比如 声明长度是10的数组:不用的数组就浪费了;超过10的个数,又放不下;

2. ArrayList存放对象

为了解决数组的局限性,引入容器类的概念。 最常见的容器类就是ArrayList
容器的容量"capacity"会随着对象的增加,自动增长只需要不断往容器里增加英雄即可,不用担心会出现数组的边界问题。
Hero:
Java中级内容之集合框架ArratList
TestJava中级内容之集合框架ArratList

二. 常用方法

1.增加 add

add 有两种用法:

第一种是直接add对象,把对象加在最后面
heros.add(new Hero("hero " + i));
第二种是在指定位置加对象
heros.add(3, specialHero);

Java中级内容之集合框架ArratList

2.判断是否存在 contains

通过方法contains 判断一个对象是否在容器中。
判断标准: 是否是同一个对象,而不是name是否相同。
Java中级内容之集合框架ArratList

3.获取指定位置的对象 get

通过get获取指定位置的对象,如果输入的下标越界,一样会报错。
Java中级内容之集合框架ArratList

4.获取对象所在的位置 indexOf

indexOf用于判断一个对象在ArrayList中所处的位置。与contains一样,判断标准是对象是否相同,而非对象的name值是否相等。
Java中级内容之集合框架ArratList

5.删除 remove

remove用于把对象从ArrayList中删除。
remove可以根据下标删除ArrayList的元素

heros.remove(2);

也可以根据对象删除

heros.remove(specialHero);

Java中级内容之集合框架ArratList

6.替换 set

set用于替换指定位置的元素。
Java中级内容之集合框架ArratList

7.获取大小 size

size 用于获取ArrayList的大小。
Java中级内容之集合框架ArratList

8.转换为数组 toArray

toArray可以把一个ArrayList对象转换为数组。
需要注意的是,如果要转换为一个Hero数组,那么需要传递一个Hero数组类型的对象给toArray(),这样toArray方法才知道,你希望转换为哪种类型的数组,否则只能转换为Object数组。
Java中级内容之集合框架ArratList

9.把另一个容器所有对象都加进来 addAll

addAll 把另一个容器所有对象都加进来。
Java中级内容之集合框架ArratList

10.清空 clear

clear 清空一个ArrayList。
Java中级内容之集合框架ArratList

三. List接口

ArrayList实现了接口List。常见的写法会把引用声明为接口List类型

注意:是java.util.List,而不是java.awt.List
因为ArrayList实现了List接口,所以List接口的方法ArrayList都实现了。

Java中级内容之集合框架ArratList

四. 泛型Generic

不指定泛型的容器,可以存放任何类型的元素
指定了泛型的容器,只能存放指定类型的元素以及其子类
Java中级内容之集合框架ArratList

五. 遍历

forJava中级内容之集合框架ArratList
迭代器Java中级内容之集合框架ArratList

增强for循环

使用增强型for循环可以非常方便的遍历ArrayList中的元素,这是很多开发人员的首选。

增强型for循环也有不足:
无法用来进行ArrayList的初始化
无法得知当前是第几个元素了,当需要只打印单数元素的时候,就做不到了。 必须再自定下标变量。

Java中级内容之集合框架ArratList