1、ArrayList常用方法
ArrayList 實現(xiàn)了List接口,常見的寫法會把引用聲明為接口List類型
public class TestCollection {
public static void main(String[] args) {
ArrayList heros = new ArrayList();
for (int i = 0; i < 5; i++) {
heros.add(new Hero("hero"+i));
}
System.out.println(heros);
//在指定位置增加對象
Hero specialHero = new Hero("special hero");
heros.add(3, specialHero);
System.out.println(heros);
//判斷對象是否在容器中
System.out.println(heros.contains(specialHero));
//獲取指定位置的對象
System.out.println(heros.get(3));
//獲取對象所處位置
System.out.println(heros.indexOf(specialHero));
System.out.println(heros.indexOf(new Hero("hero1")));
//刪除對象
heros.remove(2);
System.out.println(heros);
heros.remove(specialHero);
System.out.println(heros);
//替換指定位置元素
heros.set(3,new Hero("替換"));
System.out.println(heros);
//獲取容器的大小
System.out.println(heros.size());
//轉(zhuǎn)換為數(shù)組
Hero hs[] = (Hero[])heros.toArray(new Hero[]{});
System.out.println(hs);
//把另一個容器的所有對象都加進(jìn)來
ArrayList anotherHeros = new ArrayList();
anotherHeros.add(new Hero("a"));
anotherHeros.add(new Hero("b"));
anotherHeros.add(new Hero("c"));
heros.addAll(anotherHeros);
System.out.println(heros);
//清空數(shù)組
heros.clear();
System.out.println(heros);
}
}
2、泛型Generic
不指定泛型的容器,可以存放任何類型的元素
指定了泛型的容器,只能存放指定類型的元素以及其子類
- 泛型簡寫:
List<Hero> genericheros = new ArrayList<Hero>();
List<Hero> genericheros2 = new ArrayList<>();
public class TestCollection {
public static void main(String[] args) {
//對于不使用泛型的容器,可以往里面放英雄,也可以往里面放物品
List heros = new ArrayList();
heros.add(new Hero("蓋倫"));
//本來用于存放英雄的容器,現(xiàn)在也可以存放物品了
heros.add(new Item("冰杖"));
//對象轉(zhuǎn)型會出現(xiàn)問題
Hero h1= (Hero) heros.get(0);
//尤其是在容器里放的對象太多的時候,就記不清楚哪個位置放的是哪種類型的對象了
Hero h2= (Hero) heros.get(1);
//引入泛型Generic
//聲明容器的時候,就指定了這種容器,只能放Hero,放其他的就會出錯
List<Hero> genericheros = new ArrayList<Hero>();
genericheros.add(new Hero("蓋倫"));
//如果不是Hero類型,根本就放不進(jìn)去
//genericheros.add(new Item("冰杖"));
//除此之外,還能存放Hero的子類
genericheros.add(new APHero());
//并且在取出數(shù)據(jù)的時候,不需要再進(jìn)行轉(zhuǎn)型了,因為里面肯定是放的Hero或者其子類
Hero h = genericheros.get(0);
}
}
3、遍歷容器
- (1)for循環(huán)遍歷
public class TestCollection {
public static void main(String[] args) {
List<Hero> heros = new ArrayList<Hero>();
// 放5個Hero進(jìn)入容器
for (int i = 0; i < 5; i++) {
heros.add(new Hero("hero name " + i));
}
// 第一種遍歷 for循環(huán)
System.out.println("--------for 循環(huán)-------");
for (int i = 0; i < heros.size(); i++) {
Hero h = heros.get(i);
System.out.println(h);
}
}
}
- (2)迭代器遍歷
public class TestCollection {
public static void main(String[] args) {
List<Hero> heros = new ArrayList<Hero>();
//放5個Hero進(jìn)入容器
for (int i = 0; i < 5; i++) {
heros.add(new Hero("hero name " +i));
}
//第二種遍歷,使用迭代器
System.out.println("--------使用while的iterator-------");
Iterator<Hero> it= heros.iterator();
//從最開始的位置判斷"下一個"位置是否有數(shù)據(jù)
//如果有就通過next取出來,并且把指針向下移動
//直到"下一個"位置沒有數(shù)據(jù)
while(it.hasNext()){
Hero h = it.next();
System.out.println(h);
}
//迭代器的for寫法
System.out.println("--------使用for的iterator-------");
for (Iterator<Hero> iterator = heros.iterator(); iterator.hasNext();) {
Hero hero = (Hero) iterator.next();
System.out.println(hero);
}
}
}
- (3)增強型for循環(huán)遍歷
public class TestCollection {
public static void main(String[] args) {
List<Hero> heros = new ArrayList<Hero>();
// 放5個Hero進(jìn)入容器
for (int i = 0; i < 5; i++) {
heros.add(new Hero("hero name " + i));
}
// 第三種,增強型for循環(huán)
System.out.println("--------增強型for循環(huán)-------");
for (Hero h : heros) {
System.out.println(h);
}
}
}