1. Java Collections框架的基本接口 ?
    Java Collections 框架 提供了一系列支持对象集合操作的设计良好的接口和类. Java Collections框架中最基础的接口是:
    Collection, 表示一组对象(元素).
    Set, 包含非重复元素的集合.
    List, 包含非重复元素的有序集合.
    Map, 包含非重复键的键值对的对象.
  2. 为什么Collection没有继承Cloneable和Serializable接口 ?
    Collection接口描述的是由元素组成的对象组. Collection的每一个具体实现可以选择自己的方式来管理元素. 一些集合允许存在重复键, 另一些则不允许.
    当处理实际实现时复制和序列化的语义和效果才会起作用. 因此, 集合类的具体实现应该决定它们将怎样被复制和序列化.
  3. 什么是Iterator(叠代器) ?
    Iterator接口提供了许多能够叠代集合的方法.每个java集合(Collection)都含有一个返回Iterator实例的iterator方法. 叠代器在叠代过程中能够移除底层集合中的元素.
  4. Iterator 和ListIterator之间的不同 ?
    它们之间的不同如下:
    Iterator能够遍历Set和List集合, 而ListIterator只能用来遍历List.
    Iterator只能正向遍历集合, 而ListIterator可以双向遍历List.
    ListIterator实现了Iterator接口并提供了额外的功能, 例如添加元素, 替换元素, 取得上一个或上一个元素索引, 等等.
  5. fail-fast与fail-safe的区别?
    Iterator的fail_safe特性是对底层集合的拷贝进行操作, 因此对集合的任何改变都不会有影响. java.util包下的所有集合类是fail-fast的, 但java.util.concurrent包下的集合类是fail-safe的. fail-fast叠代器会抛出ConcurrentModificationException, 而fail-safe叠代器不会抛出这种异常.
  6. Java中的 HashMap 是怎么工作的?
    Java 中的 HashMap 是用来存储键值对的。 HashMap 需要一个 hash 函数,它使用 hashCode 和 equals 方法,来进行 collection 中元素的保存和查找。调用 put 方法时,HashMap 会计算键(key)的 hash 值,然后将键值对存到 collection 的适当索引下。如果键已经存在,那么相应的值会更新。HashMap 的重要特征主要有它的容量,装载因子(load factor)和容量扩充(threshold resizing)。
  7. hashCode() 和 equals() 方法重要性何在 ?
    Java中的 HashMap 使用 hashCode 和 equals 方法来确定键值对的索引。根据键去查询对应的值时,同样会用到这两个方法。如果这两个方法没有正确实现,两个不同的键可能会产生相同的 hash 值,因此会被 collection 认为是相同的。并且,这两个方法在检测重复时也会用到。因此,这两个方法都要正确实现,对 HashMap 的正确性和效率都至关重要。
  8. HashMap与HashTable之间有哪些不同?
    HashMap、HashTable这两个类都实现了Map接口,因此有些非常相似的特征,但他们在以下特性中又有所不同:
    HashMap的key与value都允许null值的存在,而HashTable则既不允许key为null,也不允许value为null。
    HashTable是线程同步的,而HashMap则不是。因此,在单线程环境下HashMap是首选,而HashTable更适合在多线程环境下使用。
    HashMap提供了它键的set集合,因此Java程序可以通过set进行迭代。因此,HashMap是快速失败的。另一方面,HashTable提供了它键的枚举。
    HashTable类被当做遗留类(译者注:Java遗留类说明)
  9. Array与ArrayList间有什么不同?与ArrayList相比你什么时候会用Array?
    Array与ArrayList类在以下特性中有所区别:
    Arrays可以包含基础数据类型或者对象,而ArrayList只能包含对象。
    Arrays有固定长度,而ArrayList长度则是动态的。
    ArrayList类提供了更多的方法和特性,比如addAll,removeAll,iterator,等等
    对于一个基础数据类型的list,集合框架使用了自动装箱去减少编码的工作。但针对固定长度的的基础数据类型,这种方法会使得它们变得更慢。
  10. ArrayList与LinkedList间有什么不同?
    ArrayList、LinkedList这两个类都实现了List接口,但他们以下特性中又有所不同:
    ArrayList是基于索引的数据结构,底层由Array支持实现。它提供了以时间复杂度为O(1)的性能随机访问它的元素,另一方面,LinkedList以元素列表的方式来存储它的数据,每一个元素与它前一个和后一个元素都是相连的。对元素查询操作的时间复杂度为O(n).
    对元素的插入、添加、移除操作,与ArrayList相比,LinkedList更快,因为,当一个元素被添加到集合内部的任意位置时,LinkedList不需要重新调整数组大小或者更新索引。
    LinkedList比ArrayList消耗更多的内存,因为LinkedList中每一个节点都存储了两个引用,一个是它前一个元素,一个是它后一个元素
    也可以查看我们的文章ArrayList vs. LinkedList
  11. Comparable 和 Comparator 接口分别是什么 ? 列出它们的区别。
    Java 提供的 Comparable 接口,其中只包含一个方法,就是 compareTo。这个方法会比较两个对象,从而得出它们的顺序关系。具体来说,它会返回一个负整数,零,或一个正整数,分别表示传入的对象小于,等于或大于已有的对象。
    Java 提供的 Comparator 接口,包含两个方法,compare 和 equals 。compare 方法比较两个参数,得出它们的顺序关系。它会返回一个负整数,零,或一个正整数,分别表示第一个参数小于,等于或大于已有的对象。equals 方法有1个参数,它用来确定参数对象是否等于这个 camparator。这个方法仅在要比较的对象也是一个 comparator,同时它的序关系与这个 comparator 相同时,才会返回 true。
  12. Java Priority Queue是什么?
    PriorityQueue是一个基于优先级堆的无界队列,它的元素都以他们的自然顺序有序排列。在它创建的时候,我们可以可以提供一个比较器(Comparator)来负责PriorityQueue中元素的排序。PriorityQueue不允许null元素,不允许不提供自然排序的对象,也不允许没有任何关联Comparator的对象。最后,PriorityQueue不是线程安全的,在执行入队和出队操作它需要O(log(n))的时间复杂度。
  13. 关于Big-O符号你了解些什么?你能针对不同数据结构举些例子吗?
    Big-O符号简单描述了,在一种数据结构中随着元素的不断增加,在最坏的情况下,一个算法的扩展或者执行能有多好。Big-O符号还可以用来描述其他的行为,比如内存消耗。由于collection集合下的类实际上都是数据结构,我们通常用Big-O符号来选择基于时间、内存、性能前提下的最好实现去使用。Big-O符号能就大量数据的性能给出一个很好的指示。
  14. 如何权衡有序数组和无序数组 ?
    有序数组最关键的优势在于搜索的时间复杂度为 O(log n),而无序数组的时间复杂度是 O (n)。有序数组的劣势就在于插入操作的时间复杂度为 O(n),因为较高值的元素需要挪动位置腾出空间给新元素。与之不同的是,无序数组的插入操作的时间复杂度为 O(1)。
  15. 有哪些关于 Java 集合框架的最佳实践?
    基于应用的需求来选择使用正确类型的集合,这对性能来说是非常重要的。例如,如果元素的大小是固定的,并且知道优先级,我们将会使用一个 Array,而不是 ArrayList。
    一些集合类允许我们指定他们的初始容量。因此,如果我们知道存储数据的大概数值,就可以避免重散列或者大小的调整。
    总是使用泛型来保证类型安全,可靠性和健壮性。同时,使用泛型还可以避免运行时的 ClassCastException。
    在 Map 中使用 Java Development Kit (JDK) 提供的不可变类作为一个 key,这样可以避免 hashCode 的实现和我们自定义类的 equals 方法。
    应该依照接口而不是实现来编程。
    返回零长度的集合或者数组,而不是返回一个 null ,这样可以防止底层集合是空的。
  16. Enumeration 和 Iterator 接口有什么不同 ?
    Enumeration 跟 Iterator 相比较快两倍,而且占用更少的内存。但是,Iterator 相对于 Enumeration 更安全,因为其他线程不能修改当前迭代器遍历的集合对象。同时,Iterators 允许调用者从底层集合中移除元素,这些 Enumerations 都没法完成。
  17. HashSet 和TreeSet 有什么不同?
    HashSet 是用一个 hash 表来实现的,因此,它的元素是无序的。添加,删除和 HashSet 包括的方法的持续时间复杂度是 O(1)。
    另一个方面,TreeSet 是用一个树形结构实现的,因此,它是有序的。添加,删除和 TreeSet 包含的方法的持续时间复杂度是 O(logn)。

Java知识整理——容器相关推荐

  1. 面试之Java知识整理

    1.面向对象都有哪些特性 继承.封装.多态性.抽象 2.Java中实现多态的机制是什么? 继承与接口 3.Java中异常分为哪些种类 3.1按照异常需要处理的时机分为编译时异常(CheckedExce ...

  2. Java知识整理——ServletJSP

    Servlet 什么是Servlet? servlet是用来处理客户端请求并生成动态web内容的Java程序语言类.Servlets大多是用来处理或者存储HTML表单提交的数据,提供动态内容和管理那些 ...

  3. JAVA知识整理(一)

    JAVA SE 认识 Java 凡事都需要从最开始的了解开始,我们来认识一下 Java 这门语言. Java 是于 1995 年由 Sun 公司推出的一种极富创造力的 面对对象 的程序设计语言,最初的 ...

  4. Java知识整理(Netty/索引/锁/JMM)-增强篇

    20.Netty的原理,为什么选择Netty 1.多路复用I/O与异步I/O的区别 多路复用I/O: select.poll:在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理 ...

  5. 木木的Java知识整理——JDBC与MyBatis的区别

    看了几篇大佬的相关整理,可以总结成如下几部分. JDBC与MyBatis的区别 一.各自定义 1.1 JDBC 1.2 MyBatis 二.JDBC与MyBatis的区别 一.各自定义 1.1 JDB ...

  6. python基础知识整理-python基础知识整理——容器

    容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元素存储在内存中 ...

  7. Java知识整理——反射

    Java的反射机制是做什么的? 主要功能就是可以根据一个类的名称来创建一个类的实例,并调用实例的方法. 我们通常情况下创建一个类实例的方法,就是new ABC()这样的方式来创建,那为什么还要用反射绕 ...

  8. Java知识整理——远程方法调用

    什么是RMI ? Java远程方法调用(RMI)是一个Java API,它执行的面向对象的等价远程过程调用(RPC)的方法,包括了直接传输序列化的Java类和分布式垃圾收集的支持. 远程方法调用(RM ...

  9. Java知识整理——JDBC

    什么是 JDBC ? JDBC是一个抽象层,允许用户在不同数据库间进行选择.JDBC使开发人员能够在Java中编写数据库应用程序,而不必让自己关心一个特定的数据库的底层细节. 解释JDBC中驱动的作用 ...

最新文章

  1. 2021年大数据Hadoop(二十七):YARN运行流程
  2. js里的匿名函数 数组排序
  3. 最新CAX/EDA/CFD/GIS/光学/化工/液压软件资源网
  4. 分段路由中的控制指的什么?—Vecloud
  5. ubuntu12.04配置双显示器
  6. spring使用JdbcTemplate和jdbcDaosupport及具名参数使用
  7. html中input、label、form、textarea、select
  8. 【ES10(2019)】JSON扩展 superset / stringify() 增强能力
  9. java 超时集合_Java之集合(二十三)SynchronousQueue
  10. 华侨大学计算机学院2019,华侨大学计算机科学与技术学院2019年非全日制研究生复试成绩(第四批)...
  11. pyinstaller打包总结
  12. java线程释放_Java多线程出现异常会自动释放锁
  13. GitLab 9提供了子群组、部署面板和集成监控
  14. 操作系统课程设计报告(文件系统)
  15. 一键打开 macOS Mojave 的黑暗模式
  16. php hr标签,css中如何设置hr的样式?css hr标签多种样式(图文)
  17. 什么是mx记录?如何设置域名mx记录?
  18. 黑马程序员-java基础8--IO流(一)
  19. (OK) 编译 cm-13-kiwi for (华为 荣耀 5X) - 成功
  20. 哈工大刘挺:自然语言处理中的可解释性问题!

热门文章

  1. Mysql游标循环遍历
  2. cocos2d-x游戏实例(23)-简易动作游戏(1)
  3. C语言实现miniShell
  4. Python实现遍历目录与子目录,并找到以.txt结尾的文件
  5. 呃... 写满数据的硬盘是否比空硬盘重?
  6. 设计模式:组合模式(Composite)
  7. 如何从零开始写一个 web 框架?
  8. 灵光一现的创造——霍夫曼编码
  9. 音视频技术开发周刊 | 190
  10. LiveVideoStackCon深圳-发掘移动客户端更多可能