自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 互斥锁

互斥锁是JDK1.5的新特性,它可以实现和synchronize一样的作用,但更加强大。public class Demo3_ReentrantLock { public static void main(String[] args) { Printer3 p = new Printer3(); new Thread(){ public

2017-02-28 21:21:36 560

原创 线程的生命周期

多线程的生命周期有5中状态: 1、新建 创建线程对象; 2、就绪 线程对象已启动,但没有获得CPU的执行权; 3、运行 获取到CPU的执行权; 4、阻塞 失去CPU的执行权,回到就绪状态; 5、死亡 代码运行完毕,线程消亡;

2017-02-28 17:24:01 320

原创 同步代码块

什么是同步代码块使用synchronize关键字加上锁对象来定义一段代码,这就叫同步代码块。什么时候使用同步代码块当多线程并发,有多段代码同时执行,如果希望一段代码在执行过程中多CPU不要切换到其他线程工作,这时就需要用到同步代码块。示例public class Demo1_Synchronized { public static void main(String[] args) {

2017-02-27 16:08:59 1329

原创 多线程实现的两种方式及其区别

继承Threadpublic class Demo2_Thread { public static void main(String[] args) { MyThread mt = new MyThread(); mt.start(); // 注意调用的start()方法,而不是run()方法 for(int i = 0; i < 1000;

2017-02-26 21:07:04 14050 2

原创 求1000的阶乘尾部0的个数

要求1000的阶乘尾部0的个数,如果想先求出1000的阶乘,肯定超过了基本数据类型的取值范围,此时就需要通过其他途径来解决问题。1、BigIntegerBigInteger可以接收很大的整数,所以完全可以接收1000的阶乘的结果。BigInteger bi = new BigInteger("1"); for(int i = 1; i <= 1000; ++i){

2017-02-26 19:48:44 1615

原创 IO流之RandomAccessFile

RandomAccessFile并不是一种流,它是Object的直接子类,它融合了InputStream和OutputStream的功能,即能读又能写。 RandomAccessFile中有seek()方法,可以找到文件中的任意位置,并在这个位置写入,将这个位置原有的替代。可以用来多线程下载。RandomAccessFile raf = new RandomAccessFile("h.txt",

2017-02-26 00:29:11 351

原创 IO流之标准输入输出流

System.in是标准输入流,默认可以从键盘读取字节数据,System.out是标准输出流,默认可以向控制台输出字符串和字节数据。 需要注意的是,标准输入流和输出流不需要关流,也可以所标准输入流和输出流只有一个,关流之后就无法再使用。一般来说,没有关联文件的流都不需要关流。改变标准输入输出流System.setIn(new FileInputStream("a.txt")); //改变标准

2017-02-26 00:13:27 378

原创 IO流之ByteArrayOutputStream

该输出流可以向内存中写数据,把内存当做一个缓冲区,写出之后一次性获取所有数据。FileInputStream fis = new FileInputStream("a.txt"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); // 在内存中创建了可以增长的字符数组 int b; wh

2017-02-25 10:09:53 537

原创 IO流之序列流

序列流可以把多个字节整合成一个,从序列流中读取数据时,将从被整合的第一个流开始读,然后依次往后面读。 这样做的好处是可以当需要把多个文件整合到一个文件时,可以节省代码,不需要每一个流都写一次拷贝代码。 不采用序列流: 采用序列流: 当有多个流的时候,可以用枚举:

2017-02-24 18:00:39 798

原创 Java面试题之HashMap与HashTable

共同点底层都是哈希算法,都是双列集合区别1、HashMap是线程不安全的,效率高,JDK1.2版本;HashTable是线程安全的,效率低,JDK1.0版本的。 2、HashMap可以存储null键和null值,而HashTable不可以。

2017-02-23 16:16:17 318

原创 Map集合的遍历

1、通过键获取值2、通过键值对对象遍历

2017-02-23 15:38:13 299

原创 TreeSet集合排序原理

1、自然顺序即类要实现Comparable接口,并重写compareTo()方法,TreeSet对象调用add()方法时,会将存入的对象提升为Comparable类型,然后调用对象中的compareTo()方法进行比较,根据比较的返回值进行存储。 因为TreeSet底层是二叉树,当compareTo方法返回0时,不存储;当compareTo方法返回正数时,存入二叉树的右子树;当compareTo

2017-02-23 13:25:39 10319 2

原创 HashSet保证元素唯一性的原理

使用Set集合是要去除重复元素,如果在存储的时候逐equals()比较,效率太低,哈希算法提高了去重复的效率,减少了使用equals()方法的次数,当HashSet对象调用add()方法存储对象时,会调用对象的HashCode()方法得到一个哈希值,然后在集合中查找是否有哈希值相同的对象,如果用,则调用equals()方法比较,如果没有则直接存入集合。因此,如果自定义类对象存入集合去重复,需要重写

2017-02-22 22:26:08 1782

原创 为什么JDK1.8中HashSet集合好像是有序的?

我们知道,Set集合是无序集合,即存取顺序不一致,但在JDK1.8中存取顺序好像是一致的,看下面的例子: 运行结果如下: 这是因为在JDK1.8中底层算法和以前的版本做了改进,降低了算法的模糊性,看下面的代码: 运行结果:

2017-02-22 17:01:56 10760

原创 ConcurrentModificationException并发修改异常

并发修改异常是指当方法检测到对象的并发修改,但不允许这种修改时抛出的异常,例如有一个ArrayList集合,当检测到里面含有hello时,在hello的后面插入world: 此时就会抛出并发修改异常,这是因为在用迭代器进行遍历集合时同时在增加元素,此时有两种方法解决这个问题: 一:使用ListIterator进行迭代 二:用get方法进行遍历:

2017-02-21 19:24:45 489

原创 集合框架

后续文章中会有关于集合的具体知识点

2017-02-21 17:26:10 258

原创 集合与数组的区别

区别一数组既能存储基本数据类型,也能存储引用数据类型;而集合只能存储引用数据类型,其实集合中也能存储基本数据类型,在存储的时候会自动装箱。区别二数组的长度是固定的,不能自动增长;集合的长度是可变的,会随着元素的增加而增长。

2017-02-21 16:38:43 389

原创 Java中如何精确计算小数

当用程序计算小数时,往往是不精确的,就像是三分之一只能近似表示为0.3333333333…无法精确表示,计算机计算也是同样的道理。 Java中提供了BigDecimal类来精确计算,代码示例如下: 运行结果如下:

2017-02-20 21:52:42 6406

转载 在Java中生成随机数的方法

一、利用Math类中的random方法来生成随机数在Java语言中生成随机数相对来说比较简单,因为有一个现成的方法可以使用。在Math类中,Java语言提供了一个叫做random的方法。通过这个方法可以让系统产生随机数。不过默认情况下,其产生的随机数范围比较小,为大于等于0到小于1的double型随机数。虽然其随机数产生的范围比较小,不能够满足日常的需求。如日常工作中可能需要产生整数的随机数。其实,

2017-02-20 21:22:31 1101

原创 如何从字符串中提取所需内容

优势我们需要从字符串中提取一些内容,这些内容往往有相同的特点,比如说手机号,邮箱等,下面看代码示例: 运行结果: 需要注意的是,一定要先找才能获取,即必须先调用find方法才能用group方法获取,如果要不断获取,只需调用find作为循环判断条件即可。

2017-02-20 19:50:17 2224

原创 正则表达式

基本概述正则表达式是指用来描述或匹配一系列符合某个语法规则的字符串的单个字符。比如注册的账号需要判断是否符合要求,就可以用正则表达式迅速解决。 请看下面一个示例: 这段代码是在验证输入的字符串是不是5到15位的不包含0的数字,运行结果如下:

2017-02-19 21:56:03 385

原创 基本数据类型包装类

基本数据类型对应的包装类如下: 将基本数据类型封装成对象的好处是可以在对象中定义更多的功能操作该数据,比如数据类型之间的转换,进制之间的转换等。代码示例如下: 运行结果如下: 运行结果如下: 基本数据类型包装类有八种,其中七中有paseXxx的方法,只有Character没有,因为一位字符只能存一位,字符串和字符之间的转换同过toCharArray将字符串转换为字符数组。

2017-02-19 16:53:02 572

原创 String、StringBuffer和StringBuilder的区别

StringBuffer和StringBuilderStringBuffer是JDK1.0版本的,是线程安全的,效率比较低;StringBuilder是JDK1.5版本的,是线程不安全的,效率比较高。StringBuffer和StringBuilder里面的方法是完全相同的。StringBuffer、StringBuilder和StringString是一个不可变的字符串,而StringBuffer

2017-02-19 16:36:23 299

原创 内部类

内部类简单说就是在类中定义类。内部类访问的特点内部类可以直接访问外部类成员,包括私有;外部类要访问内部类成员必须创建对象; 代码如下: 成员内部类私有局部内部类 注意,局部内部类访问它所在的方法中的局部变量必须用final修饰,但在jdk1.8中不需要。

2017-02-11 14:05:27 460

原创 Java面试题之继承与代码块

代码如下: 结果如下:

2017-02-05 20:23:14 2163

原创 代码块

构造代码块位于类中方法外出现,多个构造方法中相同的代码放到一起,每次调用构造都执行,并在构造方法中执行。静态代码块在类中方法外出现加了static修饰,用于给类进行初始化,在类加载的时候执行,并只执行一次,一般用于加载驱动。 看下面这段代码: 执行结果如下:

2017-02-04 20:57:52 334

原创 Java中如何跳出指定循环

有时我们需要在嵌套循环中跳出外部循环,这时只用break就不行了,看下面的代码: 这段代码的运行结果如下图: 在代码中对循环语句进行了标号,如a,b,只需要是合法标识符就可以。

2017-02-04 14:27:21 5526

空空如也

空空如也

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

TA关注的人

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