美文网首页
java集合类框架

java集合类框架

作者: 取名废同学 | 来源:发表于2018-07-27 14:24 被阅读0次

    这个博客总结得挺好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集合类框架

          本文链接:https://www.haomeiwen.com/subject/fherdftx.html