《疯狂的JAVA讲义》笔记-第8章集合

  • IteratorListIterator接口

    • Iterator迭代时是将元素的值返回,并不是将元素本身返回,所以迭代时无法更改元素的值。但是可以删除
    • ListIterator 则拥有增删改查以及向前迭代的功能
  • HashSet HashMap

    • 通过Hash算法来确保key 或者元素不能重复的类,一般不要进行更改。因为更改了内容可能会导致错误,如 equals() 返回相等以及hashCode()相同, 取出或删除的时候无法定位。
    • 如果两个元素 hashCode() 相等但是 equals() 返回 false 则需要在一个“桶”里装多个元素,会导致性能的下降。听说JDK8通过红黑树解决了这个麻烦
  • LinkedHashSetTreeSet

    • LinkedHashSet在使用hasCode() 定位元素的同时,使用链表来维护集合顺序(以插入顺序为序),所以迭代遍历很快,插入稍慢,可满足要求有一定顺序的集合需求
    • TreeSet也是有序的,但是是按元素的实际值大小进行排序。
  • EnumSet

    • 占用内存小 ,性能好
    • 要求同一个 EnumSet 里都是统一的枚举类。
  • ArrayList

    • 变长的数组,自动扩容
    • 最好在添加大量数据前,使用ensureCapacity(int minCapacity) 方法来避免多次重分配内存。initCapacity = 10
  • Map性能

    • 尽量不要用 TreeMap ,如果要用,可通过使用 LinkedHashMap 并确保插入key-value对时有序即可
    • 一般情况下,使用 HashMap,小范围内可以使用EnumMap,要严格使用==的可以使用 IdentityHashMap,内存吃紧的时候可以使用 WeakHashMap

    如何保证 HashMap不因扩容而浪费性能,可参照如何保证HashMap不重建Hash表

  • Collecitons 工具类

    • 返回不可变类的三个方法

      • emptyXxx() : 返回一个空的Xxx对象
      • SingletonXxx(Xxx) : 返回只有一个对象的不可变对象
      • unmodifiable(xxx) : 返回对象的不可变对象
  • 综合

    • 线程不安全的集合,可以通过Xxx x = Collections.synchronizedXxx(new Xxx())List l = Collections.synchronizedList(new ArrayList())来获取线程安全的集合,当然性能会降低。
    • 如果要使用集合,则推荐使用HashSet,除非需要根据 元素实际值进行排序才使用 TreeSet
  • 各种集合的性能对比

    • 底层使用数组为实现的,随机访问性能最好。底层使用链表为实现的,插入删除性能最佳。
    • 迭代则使用链表更快
    • 应用场景
      • 当遍历时,LinkedList使用迭代器,其他使用随机访问的方式
      • 如果经常需要插入删除,则使用 LinkedList ;如果

END

《疯狂的JAVA讲义》笔记-第8章集合相关推荐

  1. 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条

    http://blog.csdn.net/terryzero/article/details/3797782 疯狂JAVA讲义---第十二章:Swing编程(五)进度条和滑动条 标签: swing编程 ...

  2. Java 学习笔记:第一章 Java入门

    Java 学习笔记:第一章 Java入门 1.1 计算机语言发展史以及未来方向 1.2 常见编程语言介绍 C语言 C++ 语言 Java语言 PHP 语言 Object-C和Swift 语言 Java ...

  3. [疯狂Java讲义精粹] 第十三章|类加载机制与反射

    java.lang.reflect包下的接口和类, 包括Class, Method, Filed,Constructor和Array等, 这些类分别代表类, 方法, Field, 构造器和数组, Ja ...

  4. 【学习笔记】Java基础知识点——第7章·集合

    第7章  集合 7.1  Java集合框架 数组其实就是一个集合.集合实际上就是一个容器,是一个对象,可以来容纳其它类型的数据. 集合不能直接存储基本数据类型,另外集合也不能直接存储Java对象,集合 ...

  5. java面向对象各章节教程_第二部分java面向对象编程第08章集合框架List1章节.ppt...

    如何使用无线网络 第8章 集合框架(1) 本章目标 掌握集合框架包含的内容 掌握ArrayList和LinkedList的使用 掌握HashMap的使用 掌握Iterator的使用 掌握泛型集合的使用 ...

  6. CoreJava 笔记总结-第九章 集合

    第九章 集合 文章目录 第九章 集合 `Java`集合框架 集合接口与实现分离 `Collection`接口 迭代器 泛型实用方法 集合框架中的接口 具体集合 链表 数组列表 散列集 树集 优先队列 ...

  7. Java学习笔记17:Java_Set集合_TreeSet集合_二叉树_HashSet集合

    文章目录 1.Set集合 1.1Set集合概述和特点[应用] 1.2Set集合的使用[应用] 2.TreeSet集合 2.1TreeSet集合概述和特点[应用] 2.2TreeSet集合基本使用[应用 ...

  8. 《疯狂Java讲义》第5章 面向对象(上)——课后练习

    1.编写一个学生类,提供name.age.gender.phone.address.email成员变量,且为每个成员变量提供setter.getter方法.为学生类提供默认的构造器和带有成员变量的构造 ...

  9. java疯狂讲义输入输出视频_疯狂JAVA讲义---第十五章:输入输出(上)流的处理和文件...

    在Java中,把这些不同类型的输入.输出抽象为流(Stream),而其中输入或输出的数据称为数据流(Data Stream),用统一的接口来表示,从而使程序设计简单明了. 首先我要声明下:所谓的输入输 ...

最新文章

  1. es ik分词热更新MySQL,ElasticSearch(25)- 改IK分词器源码来基于mysql热更新词库
  2. STM32串口在首次发送字符的时候,首字符丢失解决办法
  3. boost::mpl::aux::largest_int相关用法的测试程序
  4. 快速git本地项目到github的关键命令及执行步骤(附上idea到git的步骤)
  5. 网络工程师第五站-有线、无线同网段混合组网(多FAT案例)
  6. hdu java_HDU-java实现1176
  7. 转换流/序列化/反序列化
  8. 深度学习(四十五)条件对抗网络
  9. java学习是什么_学习JAVA有什么作用?
  10. JY01-KX-01
  11. JAVA中String类
  12. 【Python数据分析】数据挖掘建模——分类与预测——人工神经网络
  13. 问题:Warning: Attempt to present UINavigationController whose view is not in the window hierarchy
  14. tomcat source code in eclipse
  15. css多行文字居中对齐
  16. GameFramework框架 (一) 框架简介
  17. 程序员自我修改之读书学习
  18. 职场暗访:女大学生应聘遭遇性测试
  19. JVM 执行引擎的作用及工作过程
  20. macOS Ventura 13.1 系统问题:掉电快 充电慢

热门文章

  1. 挖段子里的字体,怎么用自定义字体
  2. 使用jenkins SonarQube gitlab 构建自动化发布系统
  3. 树莓派stretch安装MySQL记录
  4. 华工文科小本,这样走进腾讯
  5. 在Linux环境(Centos 7)安装JAVA jdk1.8
  6. pythonchallenge闯关游戏_PythonChallenge闯关游戏——第16-20关
  7. 计算机中熵与信息熵的概念及来源
  8. 联发科MT8175 AI视觉和MT8518 AI语音平台介绍
  9. 电磁分析matlab,MATLAB电磁场与电磁波应用分析.doc
  10. ubuntu下opera浏览器安装Flash插件