一、简介
如果要存放多个对象,可以使用数组,但是数组有局限性。比如声明长度是10的数组,不用的数组就浪费了,超过10的个数,又放不下。
为了解决数组的局限性,引入容器类的概念。 最常见的容器类就是ArrayList。容器的容量"capacity"会随着对象的增加,自动增长,不会出现数组的越界问题。
二、ArrayList常用方法
public class TestCollection {
public static void main(String[] args) {
ArrayList<Hero> heroes = new ArrayList<>();
Hero h = new Hero("hh");
heroes.add(new Hero("alpha")); //把对象添加在集合最后面
heroes.add(new Hero("bravo"));
heroes.add(1, new Hero("charlie")); //把对象添加在集合中1的位置
heroes.add(h);
System.out.println(heroes.size()); //获取集合的大小
System.out.println(heroes.toString());
System.out.println("使用增强型for循环遍历集合元素:");
for (Hero hero : heroes) {
System.out.println(hero);
}
System.out.println("使用普通for循环遍历集合元素:");
for(int i=0; i<heroes.size(); i++) {
System.out.println(heroes.get(i));
}
System.out.println("使用Iterator遍历集合元素:");
for(Iterator<Hero> it = heroes.iterator(); it.hasNext(); ) {
Hero hero = (Hero) it.next();
System.out.println(hero);
}
System.out.println(heroes.contains(h)); //判断一个对象是否在集合中,判断标准: 是否是同一个对象,而不是name是否相同
System.out.println(heroes.get(2)); //获取指定位置的对象,如果输入的下标越界,一样会报错
System.out.println("hh所处的位置:"+heroes.indexOf(h)); //获取一个对象在集合中的位置,判断标准是对象是否相同,而非对象的name值是否相等
System.out.println("新的英雄,名字也是\"bravo\"所处的位置:"+heroes.indexOf(new Hero("bravo"))); //找不到返回-1
heroes.remove(2); //根据下标删除集合中的元素
heroes.remove(h); //把对象从集合中删除
System.out.println(heroes.toString());
heroes.set(0, h); //替换指定位置的元素
System.out.println(heroes.toString());
Hero[] hs = (Hero[]) heroes.toArray(new Hero[]{}); //toArray可以把一个ArrayList对象转换为数组
System.out.println(hs);
heroes.clear(); //清空一个集合,输出结果为[]
List<Hero> hero1 = new ArrayList<>();
hero1.add(new Hero("Delphi"));
System.out.println(heroes.toString());
System.out.println(hero1.toString());
}
}
三、打印结果