读书人

【转】java种集(List/Set/Map/Iterato

发布时间: 2013-08-14 14:27:55 作者: rapoo

【转】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)

?

【转】java种集(List/Set/Map/Iterator)(Enumeration/Vector/Stack/Properties)

?

读书人网 >编程

热点推荐