自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

翻译 [疯狂Java]集合:IdentityHashMap、EnumMap

1. IdentityHashMap:    1) 是一种特殊的HashMap,还是用key的hashCode来决定entry的槽位,但是不用key的equals方法来决定是否相等了,而是默认使用地址(即使实现了equals,equals也不起作用)来决定是否相等了!    2) 所以叫做Identity,就是直接用内存地址严格定义相等;    3) 示例:class R { i

2016-05-31 21:54:24 743

翻译 [疯狂Java]集合:SortedMap、TreeMap、equals/compareTo的标准写法

1. SortedMap的实现类——TreeMap:    1) 就像SortedSet的实现类TreeSet一样,TreeMap的数据结构完全和SortedSet一样,用红黑树实现;    2) TreeMap和TreeSet比较之后的特点就是:         i. 是根据Entry的key的大小进行排序(对Entry进行排序),即用key来代表Entry的大小;       

2016-05-31 21:00:43 4421

翻译 [疯狂Java]集合:HashMap、Hashtable(摒弃)、LinkedHashMap、Properties

1. Map最常用的实现类——HashMap:    1) Map最常见的实现类就和Set最常见的实现类一样都是用哈希表这种数据结构存放数据,它有两个这样的实现类,一个是HashMap,另一个是Hashtable;    2) Hashtable在Java 1.0就存在了,非常古老,命名也不符合Java规范,并且实现地也非常不好,因此现在已经不用了;    3) HashMap和Has

2016-05-31 14:29:34 970

翻译 [疯狂Java]集合:Map

1. Map简介:    1) 首先Map和Collection在一个层级上,都是抽象集合接口,表示字典(存放键值对的集合,其中键不能重复(是键值对的唯一标识));    2) 但是Map的实现类有HashMap、LinkedHashMap、SortedMap、TreeMap、EnumMap,可以看到命名和Set实现类的命名完全一样!!    3) 其实Map就是Set,只不过是一个存

2016-05-29 15:35:51 876

翻译 [疯狂Java]集合:Deque(双端队列)以及两个实现(ArrayDeque、LinkedList)、Stack(摒弃)、各线性表性能分析

1. Deque:    1) 是Queue的子接口,表示双端队列,即两端(队尾和队首)都能插入和删除的特殊队列;    2) 当然,Deque可以使用Queue的全部方法,但是自己也扩展了很多方法,主要用于操作两个端口的:特点就是Queue的每种方法都多了一个操作队尾的版本(同时也提供了一个名称上呼应的操作队首的版本(first(队首)、last(队尾)),和Queue的完全相对应(就是

2016-05-29 09:24:18 11707 1

翻译 [疯狂Java]集合:Queue、PriorityQueue

1. Queue:    1) Java专门提供的一种表示队列的数据结构,直接继承自Collection,也是一种抽象接口;    2) 其有很多形式的实现类:PriorityQueue(堆,即优先队列,时刻保持堆序)、Deque(双端队列,队列两头都可插拔)、ArrayDeque(用数组实现的Deque,Deque也是一个接口)、LinkedList(用双向链表来实现的双端队列,经常当成

2016-05-28 15:27:01 757

翻译 [疯狂Java]集合:ArrayList、Vector(摒弃)、Arrays.ArrayList(只读、不可变长)

1. List的实现类:    1) 最常见的两个实现类分别是ArrayList(用数组实现)、LinkedList(链表实现),但由于LinkedList具有双端队列的特性因此这里先不介绍LinkedList;    2) 早期List的实现类是Vector(也是用数组实现的),但是Vector是旧的标准,并且很多方面实现的不是很好,因此现在已经摒弃了,基本上都是用ArrayList这个

2016-05-28 14:52:59 8849

翻译 [疯狂Java]集合:List、ListIterator

1. Java的List集合简介:    1) List是一个抽象接口,其代表了一种有序(插入顺序)、可重复的集合,简单地来看完全可以当成一个可变长的数组;    2) 它有不同的实现类:ArrayList/Vector(从名称上看就是用数组实现的)、LinkedList(很明显使用链表实现的);    3) List的元素是可索引的,按照插入顺序,首元素索引是0(即从0开始计);

2016-05-28 11:23:45 898

翻译 [疯狂Java]集合:EnumSet、各Set性能分析(选择)

1. EnumSet——专门存放枚举类型元素的Set:    1) EnumSet只能存放一种枚举类型的元素,具体存放什么枚举类型的元素可以通过两种方法指定,一种是显式,一种是隐式;    2) 一旦元素的枚举类型确定那么集合就确定了(即只能存放该种枚举类型的元素,不能同时存放多种枚举类型的元素!!否则就会抛出异常);    3) 枚举集合EnumSet底层并不是直接存放枚举对象的,而

2016-05-27 15:41:02 2508

翻译 [疯狂Java]集合:SortedSet、TreeSet

1. SortedSet:    1) 顾名思义就是有序的Set,但是它的有序和LinkedHashSet不一样,LinkedHashSet维护的是插入时的顺序,而SortedSet维护的是元素之间大小关系的顺序(比如升序、降序等,是根据大小关系来维护顺序的);    2) 这种维护是时刻维护的(就跟堆维护堆序一样),每次插入元素的时候就会根据其大小放入合适的位置,删除一个元素后也会调整剩

2016-05-27 13:09:05 9364

翻译 [疯狂Java]集合:Set、HashSet、LinkedHashSet

1. Set:    1) Set其实就是Collection,它几乎没有扩展Collection的任何功能(没有在Collection的基础上添加任何额外的方法);    2) 只不过Set的add方法要求添加的元素不能重复,如果重复则添加失败返回false;2. HashSet:    1) 是Set的最常用的一种实现,实现方法是哈希表;    2) 按照哈希算法存

2016-05-24 16:21:57 1946

翻译 [疯狂Java]集合:专门用于聚集操作的一次性集合——Stream(流)

1. Java 8新增的Stream特殊集合:    1) Stream,即流,和之前讲过的I/O流并非一种流,是一种特殊的有序、可重复集合,可以往流中放很多元素;!!它不属于Collection、Map体系,但是Collection可以转化成Stream;    2) 它的特殊之处在于,流专门用于对集合中的元素进行聚集操作(聚集操作泛义上将就是诸如统计操作之类的操作,比如求平均值、最

2016-05-24 11:16:54 5342

翻译 [疯狂Java]集合:Collection的迭代器Iterator、使用Predicate筛选集合中的元素

1. Iterator——迭代器:    1) 和C++中迭代器的概念一样,二要素:         i. 迭代器必定从属于某个容器,其作用就是用来遍历所属容器中的元素的!         ii. 迭代器是在容器的数据视图之上进行迭代,因此不能再迭代过程中修改容器中的数据,否则会抛出异常!除非使用迭代器的专用方法对数据进行修改;    2) Java的迭代器只在Collection

2016-05-23 21:36:02 6676 1

翻译 [疯狂Java]集合:Java集合框架、Collection、forEach遍历器/Consumer函数接口、forEach遍历集合

1. Java集合框架:    1) Java中集合就是用来存放多个元素的数据结构,可能你会想到数组也可以存放多个元素,但是数组可以保存基本类型,而Java的集合只能保存引用类型数据!!    2) Java将集合分成两大类,一类是具有关联关系的集合(即映射关系,以Map为代表的根接口),另一类是无关联关系的集合(像链表、集合之类的,以Collection为代表的根接口),也就是说Coll

2016-05-23 14:45:52 3568

翻译 [疯狂Java]基础类库:BigDecimal(精确实数)

1. BigDecimal简介:    1) 用Java的基础类型来表示数据还是有一定的局限性的:         i. 对于整型最明显的就是存在界限问题,由于使用有限位二进制数来表示整型,必定存在上下限,不能表示更大范围的数了;         ii. 对于浮点型就不用说了,根本无法精确表示,例如一个字面值0.1也无法在底层用二进制精确表示!    2) BigDecimal——

2016-05-22 16:14:30 1382

翻译 [疯狂Java]基础类库:Random(随机数生成)、ThreadLocalRandom(线程安全随机数生成)

1. Random类的使用方法:    1) 和其它语言一样,Java的Random其实也是一个为随机序列生成器,同样需要一个序列种子作为序列的开关,如果种子相同则产生的序列相同;    2) 构造器:Random([long seed]);  // 无参则默认使用当前时间作为序列种子!省去了C语言那种还要使用time.h库获取当前时间的步骤,非常贴心!    3) 接着调用next系

2016-05-22 14:18:56 5777 2

翻译 [疯狂Java]基础类库:StringBuilder/StringBuffer

1. 两者的区别:    1) 两者功能上完全一样,两者包含的方法也一模一样,只不过Builder是线程不安全的,而Buffer是线程安全的;    2) 由于Builder适用于单线程,因此Builder效率要明显高于Buffer,因此一般单线程的应用首选Builder;    3) 它们俩和String的区别就是String不能修改内容,但它们俩可以;!!以下就以Str

2016-05-20 14:56:58 611

翻译 [疯狂Java]基础类库:String

1. Java字符串对象:    1) Java提供了三种字符串类型:String、StringBuilder、StringBuffer;    2) 其中String是不可变类型,即一旦初始化后其内容不可改变,后两种是可变类型,专门用来对字符串进行修改;    3) 后两者的区别就是StringBuffer是线程安全的,而StringBuilder是线程不安全的(即只能用于单线程),

2016-05-20 10:49:27 644

翻译 [疯狂Java]基础类库:Object、深拷贝、Objects工具类

1. Object类简介:    1) 是Java所有类型的基类,如果一个自定义的类没有extends显示指定其父类则它默认继承Object类;    2) 常用方法(通常需要根据需求覆盖,Object本身对它们的定义极其简单):         i. 相等判断:public boolean equals(Object obj) { return (this == obj)

2016-05-19 16:57:15 4325

翻译 [疯狂Java]基础类库:Runtime(运行时信息)

1. Runtime类简介:    1) 代表Java程序的运行时环境,是和Java程序相关联的,每一个运行起来的Java程序都具有一个自己Runtime对象;    2) 和System一样,Java程序的Runtime对象也是由JVM创建的,用户无法自己创建Runtime对象;    3) Runtime主要用来查看当前Java程序所在的JVM的信息(如JVM可使用的处理器数量、内

2016-05-18 20:52:53 964

翻译 [疯狂Java]基础类库:System(环境变量、系统属性、系统时间、内存地址、垃圾回收)

1.

2016-05-18 15:43:42 1153

翻译 [疯狂Java]基础类库:命令行参数、Scanner

1. Java命令行参数:    1) 即main方法的参数String[] args;    2) 这里就只声明三点:         1) 命令行参数是从程序名称之后开始算的:java JavaApplication arg1 arg2 arg3 ...         2) args[0]是第一个参数arg1,而并非程序名JavaApplication;         

2016-05-18 14:55:23 858

翻译 [疯狂Java]数组:Arrays(数组工具类)

1. Arrays工具类简介:    1) 是Java提供的专门用来操作数组的工具类,里面有一大堆静态方法(算法)来操作数组,低位就相当于C++ STL的库,只不过Arrays里面全部都是操作数组的算法,于此类似的是Collections工具类,里面全部都是操作集合的算法;    2) 里面大致分为两类方法,一类是单线方法(用于单线程处理数组),另一类是多线算法(大多以parallel作为

2016-05-17 16:55:56 4944

翻译 [疯狂Java]数组:模型、初始化、使用、多维数组

1. Java数组的定义:    1) 和其它编程语言的数组定义基本相同,具有2要素,分别是类型一致(数组中的数据都是一种类型的)和定长(初始化时就已经确定长度,这也意味着数组的内存空间也确定了,即大小不变了);    2) 在Java中数组类型也是一种引用类型,底层是用面向对象的类实现的;    3) 定义数组:支持两种格式         i. Java格式:type[] ar

2016-05-17 10:49:11 2651

翻译 [疯狂Java]JDK:CLASSPATH、java、javac、jar

1.

2016-05-17 10:15:32 470

翻译 [疯狂Java]AIO:

1.

2016-05-17 09:06:02 406

翻译 [疯狂Java]NIO多路复用网络通信:Selector、SelectionKey、SelectableChannel(SocketChannel、ServerSocketChannel)

1.

2016-05-17 09:05:10 885

翻译 [疯狂Java]NIO.2:文件属性

1. NIO.2对文件属性访问的全面升级:    1) 旧版本中File类只提供了一些非常简单的文件属性访问功能,基本上只是可以获取文件属性值,但通常不能修改;    2) NIO.2专门在java.nio.file包下增加了一个attribute包(即java.nio.file.attribute),里面提供了大量的文件属性访问及修改API,基本上可以全面使用OS的文件系统功能;

2016-05-16 21:34:16 2496 1

翻译 [疯狂Java]NIO.2:WatchService、WatchKey(监控文件变化)

1. 旧版本监控文件变化的弊端:    1) 非常繁琐,必须自己手动开启一个后台线程每隔一段时间遍历一次目标节点并记录当前状态,然后和上一次遍历的状态对比,如果不相同就表示发生了变化,再采取相应的操作,这个过程非常长,都需要用户自己手动实现;    2) 效率低:效率都消耗在了遍历、保存状态、对比状态上了!这是因为旧版本的Java无法很好的利用OS文件系统的功能,因此只能这样笨拙地监控文件

2016-05-16 16:19:42 16442 4

翻译 [疯狂Java]NIO.2:walkFileTree、FileVisitor(遍历文件/目录)

1. 遍历文件和目录——FileVisitor:    1) 在旧版本中遍历文件系统只能通过递归的方法来实现,但是这种方法不仅消耗资源大而且效率低;    2) NIO.2的Files工具类提供了一个静态工具方法walkFileTree来高效并优雅地遍历文件系统;    3) walkFileTree:         i. 原型:static Path Files.walkFil

2016-05-16 14:10:48 18679 2

翻译 [疯狂Java]NIO.2:平台无关的文件系统访问支持(Path、Paths、Files)

1. NIO.2简介:    1) 是Java7新增的功能,是NIO的扩展,主要比原来的NIO多了一些内容,主要有java.nio.file(提供了对文件系统访问的全面支持,并且是平台无关的哟!),还有就是java.nio.channels包下又多了几个Asynchronous开头的Channel接口和类(提供异步非阻塞式Channel,以支持高性能多线程IO);    2) 小结:NIO

2016-05-15 13:47:39 2017

翻译 [疯狂Java]NIO:Channel的map映射

1. 通道映射技术:    1) 其实就是一种快速读写技术,它将通道所连接的数据节点中的全部或部分数据直接映射到内存的一个Buffer中,而这个内存Buffer块就是节点数据的映像,你直接对这个Buffer进行修改会直接影响到节点数据,而这个Buffer也不是普通的Buffer,叫做MappedBuffer,即镜像Buffer,对该Buffer进行修改会直接影响到实际的节点(更新到节点);

2016-05-13 17:10:02 7453

翻译 [疯狂Java]NIO:使用Channel、Charset(字符集)、使用Charset传递CharBuffer

1. Channel简介:    1) 回顾Channel的特性:         i. NIO使用Channel(通道)来传送数据,即I/O流的角色;         ii. 但是Channel只能和Buffer直接交互,即输入输出的数据都必须要先经过Buffer才行,程序不能直接访问Channel中的数据;         iii. 输入的时候Channel相当于把物理节点中的

2016-05-09 16:45:06 3025

翻译 [疯狂Java]I/O:NIO简介、Buffer

1. 新IO:    1) 从JDK1.4开始Java提供了一系列改进的I/O新功能,称为New IO,这些API放在java.nio包下,而旧的标准IO的API放在原有的java.io包下;    2) NIO主要是针对旧IO的如下缺点进行改造的:以下是旧IO的缺点         i. 底层的流字节指针只能一次处理一个字节(元操作只能处理一个字节,虽然有很多批量操作(一次读写一条字

2016-05-05 15:27:47 652

翻译 [疯狂Java]I/O:其它自定义序列化的方法(transient、writeReplace、readResolve、Externalizable)

1. 一种不是很好的排除序列化——transient关键字:    1) 如果你不想让对象中的某个成员被序列化可以在定义它的时候加上transient关键字进行修饰,例如:class A implements Serializable { private int a; private transient int b; ...!!这样,在A的对象被序列化时其成员b就不

2016-05-03 14:24:56 6236 8

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除