---恢复内容开始---

14.Java集合类框架的基本接口

  集合类接口指定了一组叫做元素的对象.集合类接口的每一种具体的实现类都可以选择以它自己的方式对元素进行保存和排序.有的集合类允许重复的键,有的不允许.

  Java集合提供了一套设计良好的支持对一组对象进行操作的接口和类.Java集合类里面最基本的接口有:

  I> Collection:代表一组对象,每一个对象都是它的子元素

  II> Set:不包含重复元素的Cllection

  III> List:有顺序的Collection,并且可以包含重复元素

  IV> Map:可以把键(key)映射到值(value)的对象,键不能重复

  集合类没有实现cloneable和serializable接口:

  克隆(cloning)或者是序列化(serialization)的语义和含义是根据具体的实现相关的.因此,应该由集合类的具体实现来决定如何被克隆或者序列化.

 15.迭代器(iterator)

  iterator接口提供了很多岁集合元素进行迭代方法.每一个集合类都包含了可以返回迭代器实例的迭代方法.迭代器可以在迭代的过程中删除底层集合的元素,但是不可以直接调用集合的remove(Object obj)删除,可以通过迭代器的remove()方法删除.

  Iterator和ListIterator的区比别:

  I> Iterator可用来遍历Set和List集合,但是LisrIterator只能用来遍历List.

  II> Iterator对集合只能是前向遍历,ListIterator既可以向前也可以向后.

  III> ListIterator实现了Iterator接口,并包含了其他的功能,比如:增加元素,替换元素,获取前一个元素和后一个元素的索引,等等.  

 16.快速失败(fail-fast)和安全失败(fail_saft)

  Iterator的安全失败是基于底层集合的拷贝,因此,它不受源集合上修改的影响.java.util包下面的所有的集合类都是快速失败的,而java.util.concurrent包下面的所有的类都是安全失败的.快速失败的迭代器会抛出ConcurrentModdificationException异常,而安全失败的迭代器永远不会抛出这样的异常.

17.HashMap的工作原理

  Java 中的HashMap是以键值对的形式存储元素的.HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素.当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中适合的索引上如果key已经存在了,value将会更新成新值.hashMap的一些重要的特征是它的容量(capacity),负载因子(load factor)和扩容极限(thresh old resizing).

18.hashCode()和equals()方法

  Java中 的HashMap使用hashCode()和Equals()方法来确定键值对的索引,当根据键获取值的时候也会用到这两个方法.如果没有正确的实现这两个方法,两个不同的键可能会有相同的hash值,因此,可能会被集合认为是相等的.而且,这两个方法也用来发现重复元素.所以这两个方法的实现对HashMap的精确性和正确性是至关重要的.

19.HashMap和HashTable的区别

  HashMap和HashTable都实现了Map接口,因此很多特性非常相似,但是也有不同点:

  I> HashMap允许键和值是null,而HashTable不允许键或值是null.

  II> HashTable是同步的,而HashMap不是.因此,HashMap更适合与单线程环境,而HashTable适合与多线程环境.

  IV> HashMap提供的可供应用迭代的键的集合,因此,HashMap是快速失败的.另一方面,HashTable提供了对键的枚举(Enumeration)

20. 数组(Array)和列表(ArrayList)的区别

  I> Array可以包含基本数据类型和对象类型,ArrayList只能包含对象类型.

  II> Array大小是固定的,ArrayList的大小是动态变化的.

  III> ArraryList提供了更多的方法和特性.比如:AddAll(),removeAll(),iterator()等.对于基本数据类型,集合使用自动装箱来减少编码的工作量.但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢.

  

 21.ArrayList和LinkLists的区别

  ArrayList和LinkList都实现了List接口,它们有一下不同点:

  I> ArrayList是基于索引的数据接口,它的底层是数组.它可以一O(1)的时间复杂度对元素进行随机访问.与此对应,LinkList是一元素列表的形式存储它的数据,每一个元素都和它的前一个和后一个元素连接在一起,这种情况下,查找某个元素的时间复杂度是O(n).

  II> 相对于ArrayList.LinkList的插入,添加,删除操作速度更快,因为当元素被添加到集合任意位置的时候,不需要像数组那样重新计算或者更新索引.

  III> LinkList比ArrayList更占内存,因为LinkList为每一个节点存储了两个引用,一个指向前一个元素,一个指向后一个元素.

 22.Comparable和Comparator接口

  Java提供了只包含一个compareTo()方法的Comparable 接口.这个方法可以给两个对象排序.具体说,它返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象.

  java提供了包含compare()和equals()两个方法的Comparetor接口.compare()方法用来给两个输入参数排序,返回负数,0,正数来表明第一个参数是小于,等于,大于第二个参数.equals()方法需要一个对象作为参数,它用来决定输入参数是否和Comparator相等.只有当输入参数也是一个Comparator并且输入参数和当前Comparator的排序结果是相同的时候,这个方法才返回true.

 23.Java优先级队列(Priorty Queue)

  Priorty Queue是一个基于优先级堆的无界队列,它的元素是按照自然顺序排序的.在创建的时候,我们可以给他提供一个负责给元素排序的比较器.PriortyQueue不允许null值.因为它们没有自然顺序,或则说它们没有任何的相关联的比较器.最后,PriortyQueue不是线程安全的,入队和出队的书剑复杂度是O(log(n)).

 24.有序数组和无序数组

  有序数组最大的好处在于查找的时间复杂度是O(log(n)),而无序数组是O(n).有序数组的缺点是插入操作的时间复杂度是O(n),因为值大的元素需要往后移动来给新元素腾出位置,相反,无序数组的插入时间复杂度是常量O(1).

 25.Enumeration接口和Iterator接口的区别

  Enumeration速度是Iterator的2倍,同时占用更少的内存.但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被Iterator遍历的集合里面的对象.同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的.

 26.HashSet和TreeSet的区别

  HashSet是由一个hash表来实现的,因此,它的元素是无序的.add(),remove(),contains()方法的时间复杂度是O(1).

  TreeSet是由一个树形的结构来实现的,它里面的元素是有序的.因此,add(),remove(),contains()方法的时间复杂度是O(log(n)).

java基础-004的更多相关文章

  1. 004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构

    004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构 Java程序的结构 Java程序外层--类 程序外层,如下面的代码,是一个类的定义. c ...

  2. 微冷的雨Java基础学习手记(一)

    使用Java理解程序逻辑 之凌波微步 船舶停靠在港湾是很安全的,但这不是造船的目的 北大青鸟五道口原玉明老师出品 1.学习方法: 01.找一本好书 初始阶段不适合,可以放到第二个阶段,看到知识点时,要 ...

  3. 再探java基础——break和continue的用法

    再探java基础——break和continue的用法 break break可用于循环和switch...case...语句中. 用于switch...case中: 执行完满足case条件的内容内后 ...

  4. [ 转载 ] Java基础二

    前言 关于赢在面试的Java题系列基本收集整理完成了,所有题目都是经过精心挑选的,很基础又考验求职者的基本功,应该说被面试到的几率很大.这里整理挑选出来供大家面试前拿来看一看,所有题目整理自网络,有一 ...

  5. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  6. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  7. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

  8. 最适合作为Java基础面试题之Singleton模式

    看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...

  9. java基础练习 字符串,控制流,日历,日期等

    1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...

  10. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

随机推荐

  1. commonJS — 函数操作(for Function)

    for Function github: https://github.com/laixiangran/commonJS/blob/master/src/forFunction.js 代码 /** * ...

  2. visual studio 自带单元测试demo

    0) 创建类,编写方法类1) 在方法点击鼠标右键,在运行测试(T)和调试测试(D)之间会有一个 <创建单元测试>选项.有则进入2,没有则看1.01.0) 菜单栏 工具-->自定义-- ...

  3. iOS 沙盒(sandbox)机制和文件操作

    本文参看了 http://www.uml.org.cn/mobiledev/201209211.asp#1 这篇文章中的介绍,尊重原著. 1.IOS沙盒机制 IOS应用程序只能在本应用程序中创建的文件 ...

  4. MM中如何更改物料的评估类

    在SAP MM模块中,一物料XXX ,由原来的外购,变成厂内自制:评估类也由原来的7901 改为:7900 : 注:物料的评估类,对应一些帐号,对发生的为业,产生的数据,记录在相对的帐号里: 如要更改 ...

  5. redis命令集合

    一.连接控制 QUIT 关闭连接 AUTH (仅限启用时)简单的密码验证 二.适合全体类型的命令 EXISTS key 判断一个键是否存在;存在返回 1;否则返回0;DEL key 删除某个key,或 ...

  6. canvas实现钟表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. python实现微信打飞机游戏

    环境:Ubuntu 16.04 LTS Python 2.7.11 +  Pygame + Pycharm 代码: # -*- coding: UTF-8 -*- import pygame, ran ...

  8. tableview调用reloadData()之后界面不刷新显示

    解决方法: 查看是否有指定tableView的delegate和datasource. self.tableView.delegate = self self.tableView.datasource ...

  9. 218. The Skyline Problem *HARD* -- 矩形重叠

    A city's skyline is the outer contour of the silhouette formed by all the buildings in that city whe ...

  10. 在express3.0上使用模板

    express3.0取消了layout设置,为了能使用模版,经过百度后发现有个express-partials模块可以使用 1:安装 npm install express-partials 模块安装 ...