java集合类框架

这个博客总结得挺好Java - 集合框架完全解析 -

Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。大概分为两种类型容器:(其中Java集合类里面最基本的接口有:)


一、Collection(集合类):代表一组对象,每一个对象都是它的子元素,存储元素集合。分为:

Set:不包含重复元素的Collection(HashSet不排序、LinkedHashset排序)

List:有顺序的collection,并且可以包含重复元素。(ArrayList数组存储元素,LinkedList链表存储元素)

Queue:队列(先进先出,用LinkedListed创建队列)(PriorityQueue:优先队列,是一个基于优先级堆的无界队列,它的元素是按照自然顺序(natural order)排序的。不是线程安全的,入队和出队的时间复杂度是O(log(n))。


二、Map:图,存储键/值对映射。可以把键(key)映射到值(value)的对象,键不能重复。

Map(HashMap无序,LinkedHashMap按插入或访问顺序 ,TreeMap 按键值排序)


三、其他

1、Vector

2、Stack(栈,继承Vector)

3、HashTable

4、CocurrentHashMap(并发,安全性)

5、CopyOnWriteArrayList(线程安全)


迭代器Iterator :迭代器(Iterator) - CSDN博客

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象。Java中的Iterator功能比较简单,并且只能单向移动:

常用方法:

 (1)iterator():要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  (2) next():获得序列中的下一个元素。

  (3) hasNext():检查序列中是否还有元素。

  (4) remove():将迭代器新返回的元素删除。


使用iterator()方法时经常会遇到ConcurrentModificationException异常

主要原因:当调用容器的iterator()方法返回Iterator对象时,把容器中包含对象的个数赋值给了一个变量expectedModCount,在调用next()方法时会比较变量expectedModCount与容器中实际对象的个数modCount的值是否相等,若二者不相等,则会抛出ConcurrentModificationException异常,因此在使用Iterator遍历容器的过程中,如果对容器进行增加或删除操作,就会改变容器中对象的数量,从而导致抛出异常。

单线程解决办法:在遍历的过程中把需要删除的对象保存到一个集合中,等遍历结束后再调用removeAll()方法来删除,或者使用iterator.remove()方法。

多线程解决方法:

1)在JDK1.5版本引入了线程安全的容器,比如ConcurrentHashMap和CopyOnWriteArrayList等。可以使用这些线程安全的容器来代替非线程安全的容器。

2)在使用迭代器遍历容器时对容器的操作放到synchronized代码块中,但是当引用程序并发程度比较高时,这会严重影响程序的性能。

你可能感兴趣的:(java集合类框架)