文章目录 1 collection接口 2 list接口 3 Iterator 4 Vertor 5 ArrayList 6 LinkedList |
主体部分:
(1)collection
Java中有数字包装类(Inteager),字符包装类(String) . 其实也有对象的包装类----用来装对象的(通常是一类对象).这样做的好处是:使用方法和属性便于管理对象。
这种包装类叫做容器。 就想我们的水杯一样,结果都有一定的差异。同样容器由于数据结构的不同,也有很多类型。他们的父类是collection接口,里面有不少方法。
这些是容器共有的方法,比如:add(),remove(); collection又可以分为二大类。该文章介绍list
collection
|_list
|_set
容器的特点
(1)只能存储对象,不能是基本数据类型
(2)长度不是固定的---比数组灵活
(3)都有自己的数据结构
(2)List:
表面上看"列表", 它也是一个接口,他的子类都是List系类的容器(集合)
List 接口方法和collection差不多,多出来的就是list体系的特点:通过index来访问列表。比如:add(int index,Object o);remove(int index);//ect
list----|_Vector
|_ArrayList
|_LinkedList
|_其他
(3)Iterator-----迭代器
作用:用来访问集合中的对象,也是一个接口。里面只有3个方法,很重要。hasNext(),next(),remove();
注意这句话:每一个容器都有一个实现迭代器的内部类。而且控制通过iterator()获取实体对象。
ListIterator 是Iterator子接口,同样的道理,这里多出来的也就是通过index访问元素的方法。可以crud,效果很猛。
待会重点说明怎么使用。
(4) Vector
说了那么多接口,终于来个具体的容器。
Vector数据结构----数组类型----访问速度较慢(crud)---被ArrayList取代
淘汰了,不多说了。
看代码:
public static void main(String[] args) { Vector v=new Vector(); //添加对象---String---二种方法都可以。 v.add("abc1"); v.addElement("abc2"); v.add("abc3"); //使用迭代器遍历。访问对象 for( Iterator it=v.iterator(); it.hasNext();) { System.out.println(it.next()); } }
(5)ArrayList
数据结构--数组
特点:访问速度快,查询较慢,和Vector相似,所以取代Vector
用法:
public static void main(String[] args) { List list=new ArrayList(); list.add("abc1"); list.add("abc2"); list.add("abc3"); Iterator it=list.iterator(); while(it.hasNext()){ Object obj=it.next(); if(obj.equals("abc2")) list.add("abc0");//出现异常 } }
上面出现异常,不能在迭代器遍历是为容器增加object。此时ListIterator作用出来,使用这个迭代器add(E e)就没有问题啦
public static void main(String[] args) { List list=new ArrayList(); list.add("abc1"); list.add("abc2"); list.add("abc3"); ListIterator it=list.listIterator(); while(it.hasNext()){ Object obj=it.next(); if(obj.equals("abc2")) it.add("abc0"); } System.out.println(list); //[abc1, abc2, abc0, abc3] }
说白了就是重写了List里面的方法+自己的一些方法。
(6)LinkedList
数据结构---列表
方法丰富:
getFirst();
get(index);
getLast();
removeFirst();
set(int index, E element); //替换
等
code: 使用LinkedList模拟栈-----先进先出
package cn.com.List; import java.util.LinkedList; public class ListDemo { public static void main(String[] args) { //使用LinkedList 模仿栈和队列. //创建栈, myStack stack=new myStack(); //进栈 stack.add("abc1"); stack.add("abc2"); stack.add("abc3"); //出栈 while(stack.hasNext()){ System.out.println(stack.get()); } System.out.println("____________________________"); //创建队列 和上面类似 } //栈 public static class myStack{ private LinkedList list=null; public myStack(){ list=new LinkedList(); } public Boolean add(Object o){ list.addFirst(o); return true; } public Object get(){ return list.removeFirst(); } public Boolean hasNext(){ if(list.size()==0)return false; else return true; } } //队列 public static class Queue{ private LinkedList list=null; public Queue(){ list=new LinkedList(); } public Boolean add(Object obj){ list.addFirst(obj); return true; } public Object get(){ return list.removeLast(); } public Boolean hasNext(){ if(list.size()==0)return false; else return true; } } }
list系类介绍中三个主要的成员,下节说说set系类
注: 简单总结,更多函数看看 api