ArrayList(可变长度数组)
特点:查询速度很快,增删稍慢(角标变化),线程不同步
Vector与Arraylist同,但线程同步,效率低,被ArrayList替代
--------------------------------
了解Vector中特殊的东西:枚举---------Vector特有的取出方式
Vector v=new Vector();
v.add("java01");
v.add("java02");
v.add("java03");
Enumeration en=v.elements();
while(en.hasMoreElements()){
System.out.println(en.nextElement());
}
枚举和迭代是一样的,因为枚举的名称以及方法的名称都过长,所以被迭代器取代。
------------------------------
ArrayList 默认够构造一个初始容量为10的空列表,当超过10后,再new 一个ArrayList并在原容量基础上扩容50%(如原列表为10,则new新的列表为15),并
把前ArrayList的内容copy到new的里面
去除ArrayList中重复元素:
class Demo{
Demo(ArrayList al){
ArrayList newAl=new ArrayList();
Iterator it=al.iterator();
while(it.hasNext()){
Object obj=it.next();
if(!newAl.contains(obj))
newAl.add(obj);
}
return newAl;
}
-------------------------
迭代器问题
al.add(Object obj)
若add(new Person());
由多态可知Object obj=new Person();
但obj内没有Person方法,则无法使用Person内方法,此时可强制转型
即在迭代器中:Person p=(Person)it.next();
------------------------
LinkedList:
特点:增删速度快,查询速度慢
因为它是以链表的模式增删查
LinkedList link=new LinkedList();
---------------------
link.addFirst("java01");//将指定元素添加到列表头
link.addFirst("java02");
link.addFirst("java03");
System.out.println(link);//["java03","java02","java01"];
------------------
link.addLast("java01");//将指定元素添加到列表结尾
link.addLast("java02");
link.addLast("java03");
System.out.println(link);//["java01","java02","java03"];
---------------------------------------------------------------------------------
模拟队列/堆栈的数据结构
堆栈:先进后出
队列:先进先出
队列:
class Duilie{
private LinkedList link;
Duilie(){
link=new LinkedList();
}
public void myAdd(Object obj){
link.offerFirst(obj);
}
public Object myGet(){
return link.pollLast();
}
public boolean isNull()[
return link.isEmpty();
}
}
这样就采用了LinkedList封装为了一个具有队列功能的类了,
其本身是链表操作,我们要做与项目相关的容器,需要起一些名字
采用以方便,我们会把原有的集合封装进我们的描述中并对外提供自己更能识别名称的名字
-----------------------------------------------------
List集合可通过重写public boolean equals()来判断元素是否相同,也可直接依据本封装好的方法来判断两个集合是否相同
boolean equals(Object o)
- 比较指定的对象与列表是否相等。当且仅当指定的对象也是一个列表、两个列表有相同的大小,并且两个列表中的所有相应的元素对 相等 时才返回 true( 如果 (e1==null ? e2==null :e1.equals(e2)),则两个元素 e1 和 e2 是 相等 的)。换句话说,如果所定义的两个列表以相同的顺序包含相同的元素,那么它们是相等的。该定义确保了 equals 方法在 List 接口的不同实现间正常工作。