首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java的collection拾掇

2012-10-10 
java的collection整理1、java的集合结构:(java.util包中)Collection????????|--List?????????????? |--Arra

java的collection整理

1、java的集合结构:(java.util包中)

Collection

????????|--List

?????????????? |--ArrayList

???????????????|--LinkedList

???????????????|--vector

????????????????????? |--stack

??????? |--Set

?????????????? |--EnumSet

???????????????|--TreeSet

?????????????? |--HashSet(类似于HashMap)

?

Map

??? |--HashMap

????|--Hashtable

?

?

2、具体区别:

(1)ArrayList和LinkedList的区别:

??????? LinkedList实现了List接口,类似于双向链表,允许null元素。提供了get,remove,insert等方法。

??????? LinkedList没有同步方法,如果多个线程同时访问LinkedList需要自己实现同步方法。

??????? 一种实现同步方法:

???????? List list = Conllections.synchronizedList(new LinkedList<String>());

????????ArrayList实现了List接口,类似于大小可变的数组。ArrayList也是非同步的。

??????? Vector类
??????? Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建
??????? 的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线
??????? 程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出
??????? ConcurrentModificationException,因此必须捕获该异常。
??????? Stack 类
?????? ?Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆
?????? ?栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方
??????? 法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

?

(2)List和Set的区别:

??????? A、List允许多次插入null值,Set只允许插入一次null;

???????????? set的add()方法是:public boolean add(E e),只有当set中不存在当前值时,才会插入成功;

???????????? List的add()方法无此要求,可以允许重复插入;

?

??????? B、List可以使用list.get(int index)方法访问,Set是无序的,只能通过Iterator迭代访问;

???????????? List是有序的Collection,可以精确的控制每个元素,可以使用每个元素的索引(元素在List中的下标,类似于数组的下标):?

Map<Object, Object> table = new Hashtable<Object, Object>();table.put(null, null);

??? 会报java.lang.NullPointerException异常,换成HashMap则正常;

??????????

?

3、Collections和Collection的区别:

Collections.reverse(list); //list中元素顺序反转

Collections.sort(list);//按大小排序

Collections.synchronizedList(list);//该list加同步的方法

?

?

4、总结:

1)如果涉及到堆栈、队列等操作,应该使用List。对于快速插入、删除元素,应该使用LinkedList;而如果希望快速的随机访问元素,使用ArrayList。

2)建议使用一个简单的数组(Array)来代替Vector或ArrayList。尤其是对于执行效率要求高的程序更应如此。因为使用数组(Array)避免了同步、额外的方法调用和不必要的重新分配空间的操作。

?

热点排行