学习java很重要的一个知识就是集合框架,集合框架就像一个容器(就像装花生的罐子,可以把很多的对象装进去)。
java中有很多种集合类型,比如ArrayList(列表),Map(键-值对表),Set(集合,类似于数学中的集合)。
最常见的集合类型就是ArrayList,跟数组类似,但是数组需要预先给定数组长度,而ArrayList不需要,它的实现有个自动扩容机制,会自动扩容。
ArrayList结合java中的“泛型”使用,什么是泛型呢,我的理解就是在声明ArrayList容器的时候,指定这种容器能装入什么对象(可以装入子类对象),只能装入这种对象,如果不是这种对象的话就会报错。
集合框架类一般都可以支持泛型,那么可不可以让普通的类也支持泛型呢?答案是可以的,在类后加上<T>表示该类支持泛型,T是Type的缩写,是一个约定俗成,当然也可以用A,B,C之类的表示,但没必要,T简单明了。
比如用双向链表设计一个栈,在声明变量的时候放入一个Hero对象,那么这个栈就只能放入Hero对象了。
package generic;
import java.util.HashMap;
import java.util.LinkedList;
import charactor.Hero;
import property.Item;
public class MyStack<T> {
LinkedList<T> values = new LinkedList<T>();
public void push(T t) {
values.addLast(t);
}
public T pull() {
return values.removeLast();
}
public T peek() {
return values.getLast();
}
public static void main(String[] args) {
//在声明这个Stack的时候,使用泛型<Hero>就表示该Stack只能放Hero
MyStack<Hero> heroStack = new MyStack<>();
heroStack.push(new Hero());
//不能放Item
heroStack.push(new Item());
//在声明这个Stack的时候,使用泛型<Item>就表示该Stack只能放Item
MyStack<Item> itemStack = new MyStack<>();
itemStack.push(new Item());
//不能放Hero
itemStack.push(new Hero());
}
}
回到ArrayList,遍历这个ArrayList,有三种方法,分别是:for循环,iterator迭代器,for:增强for循环。
注意:只能在迭代器中进行元素的删除,其余两种方法中如过删除会出问题。
Map和Set都是接口,它们的一个实现分别是HashMap和HashSet
HashMap是一个键值对,键不可以重复,值可以重复,什么是键-值对,就是一个关键字对应一个值。
HashSet类似数学中的集合,同一个值只能出现一次。
更多推荐
java集合框架
发布评论