美文网首页
集合知识

集合知识

作者: 后来丶_a24d | 来源:发表于2019-10-26 17:39 被阅读0次

目录


集合图

集合图.png

集合机制

快速失败

  • java.util包下面的所有的集合类都是快速失败fail-fast迭代器的,而java.util.concurrent包下面的所有的类都是安全失败fail-safe迭代器的。快速失败的迭代器会抛出ConcurrentModificationException异常,而安全失败的迭代器永远不会抛出这样的异常。因为安全失败是基于之前的数据进行一份拷贝,所以不受源集合的影响。
  • 可以通过遍历集合,添加到另一个新集合解决遍历时修改问题
  • 通过modCount统计修改次数
  • foreach不能add或者remove否则会报错,但普通for循环可以(如果每次删除一个元素之后忘记了将角标减一的话可能会出问题的),迭代器也可以(迭代器是modCount != expectedModCount这么判断的, 每次迭代器操作会expectedModCount = modCount, 如果用的不是迭代器而是list.remove会报错)
  • 迭代器会有相应的checkModify会可能fast-fail
while(integerIterator.hasNext()){
    Integer x = integerIterator.next();
    // 正常
    integerIterator.remove();
    // 这段代码会报错ConcurrentModificationException
    //list.remove(1);
}

安全失败

  • ConcurrentHashmap之类的并发安全类,不会抱ConcurrentModificationException,因为他是并发安全的
  • COW也不会抱ConcurrentModificationException,因为它也是并发安全的。

for in 和 iterator区别 和 普通for循环效率对比

  • for循环适合访问顺序结构,可以根据下标快速获取指定元素.而Iterator 适合访问链式结构,因为迭代器是通过next()和Pre()来定位的.可以访问没有顺序的集合
    Foreach的内部实现是通过迭代器来完成的,实现Iterable接口的类可以使用Foreach句型
    虽然数组也可以使用Foreach句型,但数组并不是Iterable。Map虽然不能使用Foreach,但可以通过Map.Entry来对Map进行Foreach遍历

Map也可以用stream

Map<String, String> map = new HashMap<>();
map.entrySet().stream().filter();
  • 由 TreeMap 和 ConcurrentSkipListMap 实现的 NavigableMap 接口解决了需要选择Map有序性
    LinkedHashMap 可以作为LRU 这样可以轻松创建一个能够定期清理以节省空间的程序
    SortedMap (由 TreeMap 或 ConcurrentSkipListMap 实现),键保证按排序顺序

Stack栈

  • 在需要栈行为时使用 LinkedList ,或者从 LinkedList 类创建的 onjava.Stack 类。因为Stack继承自Vector,有性能之类的问题。

EnumSet,EnumMap

  • 相当于操作Enum的set和map, 很多都基与位运算。
  • 使用 BitSet 而不是 EnumSet 的唯一原因是,不知道在运行时需要多少标志 bitset使用long。
    BitSet占空间太大,尽量不要用。

不可修改的类

  • 不可修改的类会抛出UnsupportedOperationException异常 大部分操作都是可选操作都不会抛出这种异常
List<Integer> list2 = new ArrayList<>();
list2.add(3);
list2.add(4);
// 会抛出异常
List<Integer> list3 = Collections.unmodifiableList(list2);
list3.add(4);

参考文章

相关文章

  • 集合知识

    目录 集合图 集合机制 快速失败 java.util包下面的所有的集合类都是快速失败fail-fast迭代器的,而...

  • 知识图谱技术解剖

    本体、知识库、知识图谱、知识图谱识别之间的关系? 本体:领域术语集合。 知识库:知识集合。 知识图谱:图状具有关联...

  • java基础-day15-集合和Object

    集合和Object 1. 集合 1.1 为什么要使用集合 1.2 集合结构简述 1.3 集合常用方法 【补充知识点...

  • java集合系列——List集合总结 还不学吗?

    在编程过程中,会很频繁的使用集合,集合的相关知识也非常重要,也是每一个开发人员必须掌握的知识。一:集合的概念集合:...

  • java-集合

    CollectionListSet泛型MapCollections Collecton1.1 集合知识回顾集合类的...

  • DVA知识集合

    react与dva 来自本人的博客园 :http://www.cnblogs.com/shaoshuai0305/...

  • SQL知识集合

    什么是数据库? 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库, 每个数据库都有一个或多个不...

  • java知识集合

    i=0;i= i++ ;结果i=0 因为先引用,后计算java使用中间变量缓存机制i=i++可以分为几步:1. t...

  • css知识集合

    1.可继承和不可继承元素 不可继承样式:display、margin、border、padding、backgro...

  • 高级知识集合

    网络知识 https://www.jianshu.com/writer#/notebooks/47548640/n...

网友评论

      本文标题:集合知识

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