1、通过使用泛型可以在编译期防止将错误类型的对象放到容器中
例子:ArrayList<A> list=new ArrayList<A>();
list.add(new B());// 编译出错
向上转型也可用于泛型,如果一个类是A类的子类,则可放入A的容器中,
class C extends A
list.add(new C());//编译通过
2、迭代器
迭代器是一个对象,java的iterator只能单向移动。工作方式:
1)使用方法iterator()要求容器返回一个Iterator对象。
2)使用next()获取序列的下一个元素
3)使用hasNext()检查序列中是否还有元素
4)使用remove()将迭代器新近返回的元素删除
如何给一个类创建迭代器的能力,两种方法
1)在类里面创建一个iterator()方法
//测试类
public class Test {
public static void main(String[] args) {
Apple a=new Apple();
Iterator<String>iterator=a.iterator();
while (iterator.hasNext())
{
String s=iterator.next();
System.out.println(s);
}
}
}
class Apple {
String[] s=new String[]{"aaa","anbk","dktg","idgi"};
//在类里面创建一个iterator()方法
public Iterator<String> iterator()
{
return new Iterator<String>() {
int index=0;
@Override
public boolean hasNext() {
return index<s.length;
}
@Override
public String next() {
return s[index++];
}
};
}
}
2) 让类实现iterable接口
3、两种基本类型的List
ArrayList和LinkedList
ArrayList的底层实现是动态数组,适合随机访问元素,不适合插入和删除元素
LinkedList的底层实现是双向链表,适合插入删除元素,不适合随机访问。由于linkedlist底层的双向链表的特性,
可将linkedlist直接作为stack和队列来使用。
如:Stack<Integer> s=new LinkedList<Integer> ();//利用向上转型 把linkedlist作为栈使用
Quene<Integere> q=new LinkedList<Integer>(); //利用向上转型 把linkedlist作为队列使用