![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 68
USTCZYY
这个作者很懒,什么都没留下…
展开
-
日期常用类总结
/** * Title: 日期常用工具方法类 * Description: * Copyright: Copyright (c) * Company: * @author ustczyy 2013 8 28 * @version 1.0 */package com.util;import java.sql.Timestamp;import java.t原创 2013-08-28 21:03:02 · 658 阅读 · 0 评论 -
Java中Properties类的使用
在java.util 包下面有一个类 Properties,该类主要用于读取以项目的配置文件(以.properties结尾的文件和xml文件)。 Properties的构造函数有两个,一个不带参数,一个使用一个Properties对象作为参数。 使用Properties读取.properties文件 test.properties文件如下: #测试环境配置:平台路径配置原创 2013-08-29 09:29:28 · 602 阅读 · 0 评论 -
java集合框架【3】 java1.5新特性 ConcurrentHashMap、Collections.synchronizedMap、Hashtable讨论
在Java类库中出现的第一个关联的集合类是Hashtable,它是JDK1.0的一部分。Hashtable提供了一种易于使用的、线程安全的、关联的map功能,这当然也是方便的。然而,线程安全性是凭代价换来的――Hashtable的所有方法都是同步的。此时,无竞争的同步会导致可观的性能代价。Hashtable的后继者HashMap是作为JDK1.2中的集合框架的一部分出现的,转载 2013-08-29 09:45:32 · 734 阅读 · 0 评论 -
java中 locale类 及相关方法
Object clone() 重写 Cloneable。 boolean equals(Object obj) 如果该 Locale 等于另一个对象,则返回 true。 static Locale[] getAvailableLocales() 返回所有已安装语言环境的数组。 String getCountry()翻译 2013-09-02 16:50:53 · 3057 阅读 · 0 评论 -
Java并发编程之ConcurrentHashMap
ConcurrentHashMapConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。ConcurrentHashMap转载 2013-09-02 22:08:26 · 861 阅读 · 0 评论 -
java里String.valueOf()方法的使用
1. 由 基本数据型态转换成 StringString 类别中已经提供了将基本数据型态转换成 String 的 static 方法 也就是 String.valueOf() 这个参数多载的方法 有下列几种 String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串 String.valueOf(char c) : 将 char 变量翻译 2013-09-04 14:29:42 · 6503 阅读 · 0 评论 -
java NIO服务端和客户端代码实现
package cn.nio; import java.io.IOException; import java.net.InetSocketAddress; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java翻译 2013-09-24 11:19:20 · 7269 阅读 · 0 评论 -
java动态代理
package cn.xiaolu; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; /** * 动态代理类使用到了一个接口InvocationHandler和一个代理类Proxy ,这两个类配合使用实现了动态代原创 2013-09-24 11:26:47 · 717 阅读 · 0 评论 -
Java调用XML的方法:DocumentBuilderFactory
首先得到:得到 DOM 解析器的工厂实例 DocumentBuilderFactory domfac=DocumentBuilderFactory.newInstance();然后从 DOM 工厂获得DOM 解析器 DocumentBuilder dombuilder=domfac.newDocumentBuilder();3 )把要解析的 XML 文档转原创 2013-10-10 11:01:44 · 1541 阅读 · 0 评论 -
socket和serversocket
serversocket 建立的是socket的服务端,socket建立的是客户端 public class Server { public static void main(String[] args) { Socket socket=null; BufferedReader br=null; PrintWriter pw=null; try { //创建服转载 2013-09-27 17:17:08 · 664 阅读 · 0 评论 -
Java排序算法总结(五):归并排序
归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成原创 2013-10-13 16:50:00 · 687 阅读 · 0 评论 -
Java排序算法总结(六):堆排序
堆积排序(Heapsort)是指利用堆积树(堆)这种资料结构所设计的一种排序算法,可以利用数组的特点快速定位指定索引的元素。堆排序是不稳定的排序方法,辅助空间为O(1), 最坏时间复杂度为O(nlog2n) ,堆排序的堆序的平均性能较接近于最坏性能。堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。(1)原创 2013-10-13 16:50:40 · 659 阅读 · 0 评论 -
Java排序算法总结(七):快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序不稳定,O(log(n))的额外空间,时间复杂度为O(nlog(n)),不是自适应的。快速排序(Quicksort)有原创 2013-10-13 16:51:20 · 762 阅读 · 0 评论 -
Java排序算法总结(八):基数排序
基数排序(radix sort)则是属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,藉以达到排序的作用,基数排序法是属于稳定性的排序,其时间复杂度为O (nlog(r)m),其中r为所采取的基数,而m为堆数,在某些时候,基数排序法的效率高于其它的比较性原创 2013-10-13 16:52:02 · 698 阅读 · 0 评论 -
Java排序算法总结(四):希尔排序
希尔排序(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序。希尔排序并不稳定,O(1)的额外空间,时间复杂度为O(N*(logN)^2)。最坏的情况下的执行效率和在平均情况下的执行效率相比相差不多。基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二原创 2013-10-13 16:48:47 · 648 阅读 · 0 评论 -
java程序员必知道的八大排序之(三)
Java排序算法总结(三):冒泡排序冒泡排序是计算机的一种排序方法,它的时间复杂度为O(n^2),虽然不及堆排序、快速排序的O(nlogn,底数为2),但是有两个优点:1.“编程复杂度”很低,很容易写出代码;2.具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,而堆排序、快速排序均不具有稳定性。不过,一路、二路归并排序、不平衡二叉树排序的速度均比冒泡排序原创 2013-10-13 16:46:26 · 771 阅读 · 0 评论 -
java程序员必知道的八大排序(二)
Java排序算法总结(二):选择排序选择排序的基本操作就是每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。算法不稳定,O(1)的额外的空间,比较的时间复杂度为O(n^2),交换的时间复杂度为O(n),并不是自适应的。在大多数情况下都不推荐使用。只有在希望减少交换次数的情况下可以用。基本思想n个记录的文件的直接选择排序可原创 2013-10-13 16:45:00 · 675 阅读 · 0 评论 -
Java程序员必知道的八大排序算法(一 )
Java排序算法总结(一):插入排序插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。比较和交换的时间复杂度为O(n^2),算法自适应,对于数据已基本有序的情况,时间复杂度为O(n),算法稳定,开销很低。算法适合于数据已基本有序或者数据量小的情况。插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外,而第原创 2013-10-13 16:43:46 · 848 阅读 · 0 评论 -
MD5加密------java类
package cn.ipanel.apps.portalBackOffice.util.md5;import java.security.MessageDigest;import org.apache.log4j.Logger;/** * MD5 的加密 * * @author zhang434 * @datetime 2013-8-17 下午05:11:29原创 2013-08-27 11:37:03 · 1370 阅读 · 0 评论 -
线程同步synchronized和volatile
通过一个简单的例子说明了线程安全与不安全,在例子中不安全的情况下输出的结果恰好是逐个递增的,为什么会产生这样的结果呢,因为建立的Count对象是线程共享的,一个线程改变了其成员变量num值,下一个线程正巧读到了修改后的num,所以会递增输出。 要说明线程同步问题首先要说明Java线程的两个特性,可见性和有序性。多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来转载 2013-10-13 18:24:12 · 667 阅读 · 0 评论 -
线程安全与不安全
作为一个Java web开发人员,很少也不需要去处理线程,因为服务器已经帮我们处理好了。记得大一刚学Java的时候,老师带着我们做了一个局域网聊天室,用到了AWT、Socket、多线程、I/O,编写的客户端和服务器,当时做出来很兴奋,回学校给同学们演示,感觉自己好NB,呵呵,扯远了。上次在百度开发者大会上看到一个提示语,自己写的代码,6个月不看也是别人的代码,自己学的知识也同样如此,学完的知识如果转载 2013-10-13 18:24:56 · 609 阅读 · 0 评论 -
线程协作-生产者/消费者模式
上一篇讲述了线程的互斥(同步),但是在很多情况下,仅仅同步是不够的,还需要线程与线程协作(通信),生产者/消费者模式是一个经典的线程同步以及通信的模型。 假设有这样一种情况,有一个盘子,盘子里只能放一个鸡蛋,A线程专门往盘子里放鸡蛋,如果盘子里有鸡蛋,则一直等到盘子里没鸡蛋,B线程专门从盘子里取鸡蛋,如果盘子里没鸡蛋,则一直等到盘子里有鸡蛋。这里盘子是一个互斥区,每次放鸡蛋是互斥转载 2013-10-13 18:25:45 · 688 阅读 · 0 评论 -
Timer和TimerTask
Timer和TimerTask可以做为实现线程的第三种方式,前两中方式分别是继承自Thread类和实现Runnable接口。 Timer是一种线程设施,用于安排以后在后台线程中执行的任务。可安排任务执行一次,或者定期重复执行,可以看成一个定时器,可以调度TimerTask。TimerTask是一个抽象类,实现了Runnable接口,所以具备了多线程的能力。 一个转载 2013-10-13 18:26:45 · 886 阅读 · 0 评论 -
线程池
自JDK5之后,Java推出了一个并发包,java.util.concurrent,在Java开发中,我们接触到了好多池的技术,String类的对象池、Integer的共享池、连接数据库的连接池、Struts1.3的对象池等等,池的最终目的都是节约资源,以更小的开销做更多的事情,从而提高性能。 我们的web项目都是部署在服务器上,浏览器端的每一个request就是一个线程,那转载 2013-10-13 18:27:28 · 536 阅读 · 0 评论 -
Callable和Future
接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务转载 2013-10-13 18:28:29 · 589 阅读 · 0 评论 -
锁对象Lock-同步问题更完美的处理方式
Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我们拿Java线程(二)中的一个例子简单的实现一下和sychronized一样的效果,代码如下:[java] view plaincopyprint?public cla转载 2013-10-13 18:29:01 · 848 阅读 · 0 评论 -
线程通信的更高效的方式
接近一周没更新《Java线程》专栏了,主要是这周工作上比较忙,生活上也比较忙,呵呵,进入正题,上一篇讲述了并发包下的Lock,Lock可以更好的解决线程同步问题,使之更面向对象,并且ReadWriteLock在处理同步时更强大,那么同样,线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。 那么引入本篇的主角,Condition,Condi转载 2013-10-13 18:32:32 · 798 阅读 · 0 评论 -
Java序列化的机制和原理
有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍。Java序列化算法透析Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。Java序列化API提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个对象,什么时候需要序列化以及J翻译 2013-10-14 15:54:52 · 561 阅读 · 0 评论 -
java并发容器分析
简介 JDK5中添加了新的concurrent包,其中包含了很多并发容器,这些容器针对多线程环境进行了优化,大大提高了容器类在并发环境下的执行效率。 CopyOnWriteArrayList类是一个线程安全的List接口的实现,在该类的内部进行元素的写操作时,底层的数组将被完整的复制,这对于读操作远远多于写操作的应用非常适合。在CopyOnWriteArrayList上转载 2013-10-15 15:57:43 · 911 阅读 · 0 评论 -
java中类的初始化顺序
含有继承的类的初始化顺序:父类的静态变量->父类的静态块->子类静态变量->子类静态初始化块->父类变量->父类初始化块->父类的构造函数->子类的变量->子类初始化块->子类构造函数;(变量和初始化块之间的先后顺序根据类中的先后位置而定)Code:public class InitialClassOrderTestextends InitialClassOrderBa原创 2013-10-24 11:28:54 · 659 阅读 · 0 评论 -
java中关键字volatile的作用
用在多线程,同步变量。 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B。只在某些动作时才进行A和B的同步。因此存在A和B不一致的情况。volatile就是用来避免这种情况的。volatile告诉jvm, 它所修饰的变量不保留拷贝,直接访问主内存中的(也就是上面说的A)=========================分割线1============转载 2013-10-18 20:39:19 · 754 阅读 · 1 评论 -
java socket编程
Just have a little faith.java socket编程一,网络编程中两个主要的问题一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠(tcp)的或非可靠(U转载 2013-10-24 20:45:46 · 593 阅读 · 0 评论 -
Java基础:三步学会Java Socket编程(一)
第一步 充分理解Socket 1.什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使原创 2013-10-25 08:44:16 · 637 阅读 · 0 评论 -
三步学会java Socket编程(二)
第二步 多个客户同时连接 在实际的网络环境里,同一时间只对一个用户服务是不可行的。一个优秀的网络服务程序除了能处理用户的输入信息,还必须能够同时响应多个客户端的连接请求。在java中,实现以上功能特点是非常容易的。 设计原理: 主程序监听一端口,等待客户接入;同时构造一个线程类,准备接管会话。当一个Socket会话产生后,将这个会话交给线程处理,然后主程原创 2013-10-25 08:47:49 · 654 阅读 · 0 评论 -
三步学会java Socket编程(三)
第三步 实现信息共享:在Socket上的实时交流 网络的伟大之一也是信息共享,Server可以主动向所有Client广播消息,同时Client也可以向其它Client发布消息。下面看看如何开发一个可以实时传递消息的程序。设计原理: 服务器端接受客户端的连接请求,同时启动一个线程处理这个连接,线程不停的读取客户端输入,然后把输入加入队列中,等候处理。在线程启动的同时将原创 2013-10-25 08:48:59 · 682 阅读 · 0 评论 -
mina中文教程
现在已经是World Wide Web的时代,无数的web应用框架被创造出来从而大大的提高了web开发的速度。抛开WWW的这个优势,我们知道还有很多协议是HTTP协议所无法替代的。有时,我们仍然需要构造c/s应用来实现适当的协议。=== MINA是什么? ===你有没有曾经使用java或者其他语言实现过某个协议栈?就像你所经历过的那样,编写网络应用即使对于有经验的开发者也不是容易的事情翻译 2013-10-25 15:10:46 · 1191 阅读 · 0 评论 -
蛇形矩阵的java实现
题目:计算并输出 nXn 的蛇形矩阵。(n>0)例如 4X4 的蛇形矩阵如下:1 3 4 102 5 9 116 8 12 157 13 14 16类似于前面的输出螺旋矩阵的方法,每一次在数组中填写新的数字都有一个方向,与输出螺旋数组不同的是不是简单的上下左右四个方向,这里涉及到右,下,右上,左下四个方向,针对每步操作都需要想好对应转载 2013-10-19 23:35:41 · 3057 阅读 · 0 评论 -
java中自动打包+解包机制(又称自动装箱,拆箱)Auto-Boxing,UnBoxing
Boxing Unboxing(装箱 拆箱 有人译作打包解包)还有Generic(泛型)这里的装箱应该理解为 封装对象 ,即把基础数据类型(如 int)转换成基础类型封装类的对象(如 new Integer())拆箱就是装箱的反过程,即把基础类型封装类的对象(如 new Integer())转换为基础数据类型(如 int)。Java代码 装箱: Integer a转载 2013-10-23 17:04:35 · 1147 阅读 · 0 评论 -
基本数据类型的自动封装与拆箱
public class Test { /** * @param args */ public staticvoid main(String[] args) throws Exception { (1) Long t = new Long(1); (2) System.out.println(t+1);原创 2013-10-23 16:56:08 · 870 阅读 · 0 评论 -
中缀表达式转换成前缀表达式和后缀表达式
35,15,+,80,70,-,*,20,/ //后缀表达方式(((35+15)*(80-70))/20)=25 //中缀表达方式 /,*,+,35,15,-,80,70, 20 //前缀表达方式 人的思维方式很容易固定~~!正如习惯拉10进制。就对2,3,4,8,16等进制不知所措一样~~!人们习惯的运算方式原创 2013-11-03 17:25:53 · 871 阅读 · 0 评论