Java中级内容之集合框架ArratList
一. 与数组的区别
1. 使用数组的局限性
如果要存放多个对象,可以使用数组,但是数组有局限性。
比如 声明长度是10的数组:不用的数组就浪费了;超过10的个数,又放不下;
2. ArrayList存放对象
为了解决数组的局限性,引入容器类的概念。 最常见的容器类就是ArrayList
容器的容量"capacity"会随着对象的增加,自动增长只需要不断往容器里增加英雄即可,不用担心会出现数组的边界问题。
Hero:
Test
二. 常用方法
1.增加 add
add 有两种用法:
第一种是直接add对象,把对象加在最后面
heros.add(new Hero("hero " + i));
第二种是在指定位置加对象
heros.add(3, specialHero);
2.判断是否存在 contains
通过方法contains 判断一个对象是否在容器中。
判断标准: 是否是同一个对象,而不是name是否相同。
3.获取指定位置的对象 get
通过get获取指定位置的对象,如果输入的下标越界,一样会报错。
4.获取对象所在的位置 indexOf
indexOf用于判断一个对象在ArrayList中所处的位置。与contains一样,判断标准是对象是否相同,而非对象的name值是否相等。
5.删除 remove
remove用于把对象从ArrayList中删除。
remove可以根据下标删除ArrayList的元素
heros.remove(2);
也可以根据对象删除
heros.remove(specialHero);
6.替换 set
set用于替换指定位置的元素。
7.获取大小 size
size 用于获取ArrayList的大小。
8.转换为数组 toArray
toArray可以把一个ArrayList对象转换为数组。
需要注意的是,如果要转换为一个Hero数组,那么需要传递一个Hero数组类型的对象给toArray(),这样toArray方法才知道,你希望转换为哪种类型的数组,否则只能转换为Object数组。
9.把另一个容器所有对象都加进来 addAll
addAll 把另一个容器所有对象都加进来。
10.清空 clear
clear 清空一个ArrayList。
三. List接口
ArrayList实现了接口List。常见的写法会把引用声明为接口List类型
注意:是java.util.List,而不是java.awt.List
因为ArrayList实现了List接口,所以List接口的方法ArrayList都实现了。
四. 泛型Generic
不指定泛型的容器,可以存放任何类型的元素
指定了泛型的容器,只能存放指定类型的元素以及其子类
五. 遍历
for
迭代器
增强for循环
使用增强型for循环可以非常方便的遍历ArrayList中的元素,这是很多开发人员的首选。
增强型for循环也有不足:
无法用来进行ArrayList的初始化
无法得知当前是第几个元素了,当需要只打印单数元素的时候,就做不到了。 必须再自定下标变量。