1、集合的出现
java是一门面向对象的语言,需要对对象进行操作,那么对象就需要容器存储,为了满足比那花的需求就出现了集合
2、特点
- 长度可变
- 其存储内容只能是引用类型
- 存储内容不限制同一种数据类型,可以同时存储多种引用类型
3、继承体系结构
为了满足变化的需求,java提供了不同的集合类,这些集合类的数据结构都不尽相同。但是都需要提供存储和遍历的功能,不断地向上公共功能就形成了它地体系图。
4、集合类中的功能
集合体系中所有地类和接口都直接或间接继承了Collection,所以Collection有的功能,其实现类都有
- List子类
1>ArratList:
A: 功能:没有特有功能,相当于List实现类
B: 特点:
底层数据结构是数组,查询快、增删慢
线程不安全,效率高
2>Vector:
A:有特有功能
a: 添加
public void addFirst(E obj) --add(已经可以被这个方法替代)
b: 获取
public E elementAt(int index) --get替代
public Enumeration<E> elements() --iterator替代
B:特点:
底层是数组,查询快、增删慢
线程安全,效率低
3>LinkedList:
A:有特有功能
a:添加
addFirtst()
addLast()
b:删除
removeFirst()
removeLast()
c:获取
getFirst()
getLast()
B:底层是链表,查询慢、增删快
线程不安全,效率高
2、获取功能迭代器的详述
A: 是集合的获取元素的方式
B:是依赖于集合而存在的
C:迭代器的原理和源码
public interface Inteator{
boolean hasNext();
Object next();
}
Iterator it = c.iterator(); //调用iterator方法的时候,运行返回的是new Itr
相关类和接口
public interface interable{
Iterator iterator();//这里这个返回值类型本来就是一个迭代器,这个迭代器的具体实现在ArrayList类中
}
public interface Collection extends Iterable {
Iterator iterator();//继承自父类的
}
public interface List extends Collection {
Iterator iterator();//继承自父类的
}
public interface ArrayList implements List{
public Iterator iterator() {
return new Itr();//Itr是接口的实现类,因为返回类型是接口,而里面能new对象的肯定是实现类
}
//内部类中实现了Iterable中的抽象方法
private class Itr implements Iterator(){
public boolean hasNext(){
}
public Object next(){
}
}
}
注意:可以看到迭代器同样定义为接口,而不是一个详细地实现类。
A: java中提供了很多的集合类,而这些集合类的数据结构是不同的,所以,存储的方式和遍历的方式
应该是不同的。进而遍历方式也应该是不同的,如果定于成一个具体地类显然是不合理地。
B:而无论那种集合,都应该具备获取元素的操作,并且,最好在辅助于判断功能,这样,在获取前,先判断,这样就更不容易出错。也就是说,判断功能和获取功能应该是一个集合遍历的所具备的,而每种集合的方式又不太一样,所以我们把这两个功能提取出来,并不提供具体的实现,这种方式就是接口。那么真正的实现类在真正的具体的子类中。