JAVASE
孙海峰VIP
这个作者很懒,什么都没留下…
展开
-
Java Iterator和增强for循环 for each详解
Iterator是Java中的一个迭代器接口(Interface),用来提供标准的Java迭代器 Iterator支持泛型因为集合(Collection)类可以装入的类型是不确定的,从集合中取出的都是Object类型,加入泛型,就是告诉编译器确定要装入的对象类型,取值时就无需强制转换了。for each 是 Java 5 中新增的一个循环结构,本质上是一个Iterator,特点是可以用来遍历集合元原创 2015-07-23 21:30:01 · 4853 阅读 · 0 评论 -
Java中的queue和deque
队列(queue)是一种常用的数据结构,可以将队列看做是一种特殊的线性表,该结构遵循的先进先出原则。Java中,LinkedList实现了Queue接口,因为LinkedList进行插入、删除操作效率较高 相关常用方法: boolean offer(E e):将元素追加到队列末尾,若添加成功则返回true。 E poll():从队首删除并返回该元素。 E peek():返回队首元素,但是不删原创 2015-07-25 07:09:07 · 38566 阅读 · 4 评论 -
Java List详解
List接口是Collection的子接口,用于定义线性表结构,其中ArrayList可以理解为一个动态数组,而LinkedList可以理解为一个链表常用操作: 插入和删除操作: void add(int index,E element): 将给定的元素插入到指定位置,原位置及后续元素都顺序向后移动。 E remove(int index): 删除给定位置的元素,并将被删除的元素返回。ge原创 2015-07-24 23:32:55 · 8800 阅读 · 0 评论 -
Java程序员常犯的10个错误
网上找到的常见错误总结,感觉不错,收藏备用1. 把Array转化成ArrayList把Array转化成ArrayList,程序员经常用以下方法:List list = Arrays.asList(arr);Arrays.asList() 实际上返回一个ArrayList,但是这个ArrayList是Arrays的一个内部私有类,而不是java.util.ArrayList类。这个私有类java.ut原创 2015-10-06 07:01:37 · 2103 阅读 · 1 评论 -
JAVA并发编程-计算程序性能提升比率
并发编程的用途:并发编程用途通常用于图像处理,服务端编程需要处理大量数据的情况下使: **并发**是在同一CPU下同时执行不同的任务,有操作系统来控制时间片。: **并行**是在多CPU情况下同时处理多个任务。: **无障碍**是指允许同时读取或写入数据,读取或写入期间数据发生变更,则认为是无效数据,回滚操作,直到拿到正确的数据为止。: **无锁**是指所有线程可以进入,但如果数据发发生被修改的情况,线程之间原创 2017-02-18 12:32:50 · 3146 阅读 · 0 评论 -
Java线程安全队列操作
题目如下: 使用 wait notify 实现一个队列,队列有2个方法,add 和 get 。add方法往队列中添加元素,get方法往队列中获得元素。队列必须是线程安全的。如果get执行时,队列为空,线程必须阻塞等待,直到有队列有数据。如果add时,队列已经满,则add线程要等待,直到队列有空闲空间。 实现这么一个队列,并写一个测试代码,使他工作在多线程的环境下,证明,它的工作是正确的。给出程序原创 2017-04-24 17:51:08 · 2621 阅读 · 1 评论 -
Java类的热替换
描述:以下是Java类热替换的核心代码。程序直观明了,如有错误请大家提出,本人及时改正,谢谢!ClassLoader重要类说明:findLoadedClass:每个类加载器都维护有自己的一份已加载类名字空间,其中不能出现两个同名的类。凡是通过该类加载器加载的类,无论是直接的还是间接的,都保存在自己的名字空间中,该方法就是在该名字空间中寻找指定的类是否已存在,如果存在就返回给类的引用,否则就返回 null。这原创 2017-05-25 16:51:43 · 1859 阅读 · 0 评论 -
Java单例模式及延迟加载
单例模式是 软件开发中非常重要的模式之一。绝大多数的软件项目中都会用到单例模式。单例模式应用的好与坏在高并发访问的情况下性能差异较为明显。下面我们来看一下单例模式的具体解释。 描述:单例模式许多时候是一个全局的静态共享对象,为了保证其性能,它应该是无锁的。 下面我们来看一下具体的实现基本实现方式: 该方式的问题是无法控制对象的加载时间。该写法在程序启动时就已经加载对象了。public clas原创 2017-05-25 23:21:56 · 3803 阅读 · 0 评论 -
Java Aio Socket异步通信例子
以下是关于Aio Socket 通信的一个例子,通过回调的方式发送和处理消息。其中要注意的是在缓冲区(ByteBuffer)中put数据以后要先进行flip(参见Nio部分解释)操作再发送数据,否则数据将会传输失败。以下是例子,直接上代码。服务端实现:public class AioServer { private AsynchronousServerSocketChannel server原创 2017-05-16 16:54:34 · 2188 阅读 · 1 评论 -
Java无锁堆栈详解
有这样一个题目: 实现一个无锁的Stack,并写一段测试代码(多线程访问),证明这个Stack是线程安全的。分析:出于节省内存空间的考虑,使用链式的存储结构来实现。 实现该堆栈的思想为: 1、压入一个新节点时,将旧结点存入新结点中。弹出时将顶部节点中存入的上一节点取出并将其设为站定。 2、使用无锁的实现类AtomicReference作为安全的无锁局部变量对元素进行暂存。 以下为实现代码,具原创 2017-04-27 13:06:04 · 1551 阅读 · 0 评论 -
Java NIO 非阻塞socket通信案例
NIO的特性:它以块为基本单位处理数据,所有的数据都要通过缓冲区(Buffer)来进行传输。它有一个用来作为原始I/O操作的抽象通道(Channel)并提供了Selector的异步网络接口。且支持将文件映射到内存,以大幅提高I/O效率。 缓冲区中有3个重要的参数: position(位置):即缓冲区的位置,指缓冲区指针到哪个位置了。 capactiy(容量):缓冲区的总上限,如ByteBuff原创 2017-05-10 15:07:20 · 892 阅读 · 0 评论 -
【阿里面试题】JAVA多线程统计文件夹大小
阿里面试题,使用多线程统计文件夹大小原创 2019-05-20 22:47:47 · 820 阅读 · 0 评论 -
Java常用日期操作详解
Date类型大多数时间分量计算方法已经被Calendar取代 Date常用方法setTime getTime() new Date();默认获取当前的时间SimpleDateFormat用来格式化和解析日期的具体类 匹配日期的字符串 y–>年 M–>月 d–>日 E–>星期 a–>上下午 H–>小时(24小时制) h–>小时(12小时制) m–>分 s–>秒格式化Date返回原创 2015-07-22 21:47:35 · 2648 阅读 · 0 评论 -
Java RandomAccessFile文件操作详解
简介: RandomAccessFile类可以对文件随机访问的操作,访问包括读和写操作。该类的读写是基于指针的操作。 RandomAccessFile对文件进行随机访问操作时有两个模式,一种是只读(r),另一种是读写(rw),需在创建RandomAccessFile对象时传入一个参数进行设置,第一个参数代表要访问的文件,第二个参数代表设置访问模式 RandomAccessFile(File f原创 2015-07-31 06:38:57 · 8485 阅读 · 0 评论 -
Java Scanner next()和nextLine()的区别
Java Scanner next()和nextLine()的区别Scanner简单介绍: Scanner的用途广泛,而且好用,它自身包含了很多构造方法,可以接收各种类型数据,可以是一个文件、输入流、控制台…… Scanner为我们提供了很多的方法以使用,其中有两个方法next()和nextLine(),这两个方法返回的都是String类型的,那么为什么要有两个功能类似的方法,它们的区别又在原创 2015-07-08 23:20:28 · 9205 阅读 · 1 评论 -
JAVA 对象内存管理
在JAVA中,JVM会将申请的内存从逻辑上划分为三个区域:堆、栈、方法区。这三个区域分别用于存储不同的数据。JVM在其内存空间开辟了一个称为“堆”的存储空间,这部分空间用于存储使用new关键字所创建的对象。代码如下:Cell c = new Cell ();当声明好对象之后,对该对象(堆中的Cell)的访问需要依靠引用变量(栈中的c),那么当一个对象没有任何引用时,该对象被视为废弃的对象,原创 2015-07-09 23:05:56 · 1643 阅读 · 0 评论 -
Java中this用法详解
this关键字: this关键字在方法体中,用于指代调用该方法的当前对象,简单的说:哪个对象调用方法,this指的就是哪个对象。严格来讲,在方法中需要通过this关键字来致命当前的对象。 下面我们创建一个A类,里面有三个方法和一个int型变量num,代码如下:class A { int num = 0; public void Num(int num) {原创 2015-07-12 18:00:18 · 12836 阅读 · 1 评论 -
Java 中 Map 的使用
Map接口提供了一组可以以键-值对(key,value)形式存储的数据结构。 Map对存入元素只有一个要求,就是键(key)不能重复,Map对于key,value要求不是很严格,key只要是引用类型即可。通常情况下,使用String和Integer比较多。Map提供了一个方法用来存入数据: V put(K k,V v) 该方法的作用是将key-value对存入Map中,因为Map中不允许出现重原创 2015-07-25 19:53:25 · 2105 阅读 · 0 评论 -
Ubuntu OracleJDK离线安装教程
安装OracleJDK步骤: 第一步: 去官网下载JDK,下载链接: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择相应版本自行下载。 第二步: 将下载的压缩包解压到想安装的目录,例如/opt目录。 如果没有权限,完全可以尝试 $sudo chmod -R 77原创 2015-07-12 09:27:11 · 1998 阅读 · 0 评论 -
Java HashMap LinkedHashMap 区别及原理
HashMap原理 HashMap是Map的一个常用的子类实现。其实使用散列算法实现的。 HashMap内部维护着一个散列数组(就是一个存放元素的数组),我们称其为散列桶,而当我们向HashMap中存入一组键值对时,HashMap首先获取key这个对象的hashcode()方法的返回值,然后使用该值进行一个散列算法,得出一个数字,这个数字就是这组键值对要存入散列数组中的下标位置。 那么得知了下原创 2015-07-25 22:26:02 · 10547 阅读 · 0 评论 -
Java 向上造型详解
子类的对象可以向上造型为父类的类型。即父类引用子类对象,这种方式被称为向上造型。在日常生活中,我们都扮演着不一样的角色。我们有可能是老师,有可能是学生,有可能是……, 但是我们都有共同的属性,例如:名字、性别、年龄……,但是在该基础上,不同身份的人也有着属于自己的不同的特点。我们通常描述他人的时候会说,这个人是老师,这个认识学生,这个人是个程序员……。实际上“这个人是……”这种说法就是向上造型。直接原创 2015-07-12 09:00:45 · 38803 阅读 · 11 评论 -
Java语言中的面向对象总结
Java语言中的面向对象特性 【课前思考】 1. 什么是对象?什么是类?什么是包?什么是接口?什么是内部类? 2. 面向对象编程的特性有哪三个?它们各自又有哪些特性? 3. 你知道java语言在面向对象编程方面有何独特的特点吗? 难点: 1. 理解方法重载和方法重写,不要混淆了两者的使用。 2. 类变量和类方法的使用。 3. 接口的使用。 3.1转载 2015-07-14 06:26:05 · 1138 阅读 · 0 评论 -
Java中的多态
概念: 行为的多态: 同一类型的引用指向不同的对象时,有不同的实现 对象的多态: 同一对象被造型为不同的类型时,有不同的功能例子:public static void main(String[] args) { Person person = new Doctor(); person.cut(); person = ne原创 2015-07-14 20:17:24 · 947 阅读 · 0 评论 -
Java造型中的强制转换
强制类型转换成功的条件: 引用所指向的对象,就是该类型 引用所指向的对象,实现了该接口//向上造型演示public class UpDemo { public static void main(String[] args) { Aoo o = new Boo(); //向上造型 Boo o1 = (Boo)o; //强制类型转换 In原创 2015-07-14 21:57:27 · 1537 阅读 · 0 评论 -
Leetcode No.94 二叉树的中序遍历(循环法,含先序、中序、后序通用解解题技巧)
二叉树的中序遍历题目描述题目分析先序遍历的场景实现代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } ...原创 2019-07-25 00:47:00 · 325 阅读 · 0 评论