【转】java类集(List/Set/Map/Iterator)(Enumeration/Vector/Stack/Properties)
java实现类集的包: java.util.*包
类集:动态对象数组(可以保存多个对象在一个数组之中)或链表
????????? 问题:数组长度不可改变,当需要向数组中增加数据的时候需要去考虑对象数组的容量
java类集接口框架
Collection????????? 元素的类集,即对象,每次存放单个对象
??????? 子接口: List???????? (? ArrayList??????????LinkedList )
????????子接口: Set??????????(?? HashSet???????? TreeSet? )
???????? SortedSet
Map?????????????????? 每次存放一对值:key——> value
???????? SortedMap
Iterator???????????????输出接口,只要是集合都要去是要使用Iterator输出
????????? ListIterator
?
详解:
Collection 接口:在一般开发中为了清楚的表现处理数据的存放,往往不直接使用Collection
Collection?的子接口List:(????? ArrayList???/??LinkedList?????? )
#?ArrayList???? ?List 使用必须依靠子类——>ArrayList???????? (继承了AbstractList类)
?????????????????? 如果使用List,则格式为:List list=new ArrayList();
?????????????????? 向对象数组中加入数据?????? list.add("对象");
?????????????????? 向对象数组中移除数据?????? list.remove("对象");
???????????????????直接打印System.out.println(all);?????? 结果:[对象1,对象2,对象3]????????
???????????????????????????????? 对象数据输出顺序与加入顺序一致
?????????使用类集的时候在加入对象的时候最好只加入同一类对象
?????????????????????? 只能让集合中只加入一种对象:JDK1.5支持?????
??????????????????????? List<java.lang.String>? list = new ArrayList<java.lang.String>();
?????? ? 需要一个一个对象打印出来的时候,方法有:
?????????????? 1,使用for循环: size()方法求出对象数组的长度
???????????????2,使用Iterator输出:因为集合的长度不固定,所以Iterator采用的方法是一个一个判断输出
????????????????????????? (? 判断是否有下一个元素:public boolean hasNext()? )
??????????????????????????? Iterator iter=list.iterator();
??????????????????????????? While(iter.hasNext()){
??????????????????????????????????? Object obj=iter.next();
??????????????????????????????????? System.out.println(obj);
????????????????????????????? }
?
??????? (Collection)集合操作的主要方法:
????????加入数据:public boolean add(Object obj)
????????删除数据:public boolean remove(Object obj)
????????????????????????? public boolean remove(int index)
??????? 为Iterator实例化:public Iterator iterator()
????????取出元素的个数:public int size()
#LinkedList????? 提供了一个链接列表数据结构????
?
Collection?的?子接口Set:( HashSet?? /?? TreeSet)
异同
??????? 1,Set的基本使用与List一致,但是HashSet子类存放时是无序的(散列存放)。
??????? Set<java.lang.String> set=new HashSet<java.lang.String>();
???????? 2,List中的数据允许重复元素,重复元素保留下来。
?????????????? Set中的数据不允许有重复元素,重复元素被替换掉。
#HashSet??????????无序存放(散列存放)
#TreeSet???????????有序存放??(升序存放)
?????????????????? 靠Comparable接口排序(如,输入为GBEACFD,输出为ABCDEFG)
?
Iterator :从前到后顺序输出(不能从后向前)
??????? ListIterator:允许双向遍历列表,并可修改单元
???????
Map接口中?? (?HashMap??? /?????TreeMap?)
#HashMap??映射类???? key——>value??????? 异步处理方式
?
Map的主要功能是作为查找使用,不是输出使用。
????????? 存入数据方法:put(Object key,Object value)
?????? ?? 取出数据方法:Object get(Object key)???????????????// 根据key取value
?
??????????????? Map<java.lang.String,java.lang.String> map=new HashMap<java.lang.String,java.lang.String>();
??????????????? map.put("键","数据值");
????????????????System.out.println(map.get("键"));
?
Map接口的对象不能直接使用Iterator输出。
???????? 如果一定要使用Iterator输出Map接口对象的内容,必须使用以下步骤:
???????? Map -> Set -> Iterator -> Map.Entry -> key、values
?
??????????????????Set set=map.entrySet();
????????????????? Iterator iter=set.iterator();
????????????????? while(iter.hasNext()){
??????????????????????????? Map.Entry me=(Map.Entry)iter.next();
??????????????????????????? System.out.println(me.getKey()+"——>"+me.getValue());
???????????????????}
#TreeMap??按key排序
?
以上均为JAVA 2 所带新特性!!
?
以下介绍JAVA 1:
#Enumeration:枚举,与Iterator的功能一直,都是用于输出集合中的内容
????????????????????????????????????????????? Enumeration??????????????????????????????????????? Iterator
?判断是否有下一个内容????????? hasMoreElements()????????????????????????????? hasNext()
?取值??????????????????????????????????????nextElement()???????????????????????????????????????next()?
?
?
List和Set都不能使用Enumeration输出
而List的另外一个子类:Vector 可以使用Enumeration 输出
#Vector????实现动态数组,同步处理
?????????????????? Vector vector=new Vector();???? //如果换为List vector=new Vector();则Enumeration无法使用
??????????????????? vector.add("elements");
????????????????????vector.add("elements");
??????????????????? vector.add("elements");
??????????????????? Enumeration e=vector.elements();
??????????????????? while(e.hasMoreElements()){
??????????????? ??? ?? System.out.println(e.nextElement())
???????????????????? }
?
栈是一个先进后出(后进先出)的操作
#Stack????????(Vector的子类)
?
??????????????????? Stack stack=new Stack();
????????????????????? stack.push("a");
????????????????????? stack.push("b");?
????????????????????? stack.push("c");?
??????????????????????stack.push("d");
???????????????????? while(!stack.empty()){
????????????????????? System.out.println(stack.pop());
???????????????????? }
//浏览器的页面的前进后退就是利用堆栈实现
//若栈中所有内容弹出
?
#HashTable??? 与HashMap相似,但HashTable是同步处理方式的
??????????????????????? 不支持迭代函数
#Properties?????? HashTable的子类
属性类?,用来保持值的列表
异同:Properties类主要是保存字符串的,而Hashtable是保存对象的
????????? setProperty(String key,String value)
????????? getProperty(String key)
?

?