JavaSE
吴孟达
关注微信公众号"程序员达叔",免费领取海量学习资料
展开
-
使用Java如何让需求在指定时间内生效
比如说端午节有个运营活动,只在6月7号到6月11号之间,过期就自动下线。下面代码就可以实现这个功能。static{ String s1="2016-06-07 00:00:00"; String s2="2016-06-12 00:00:00"; SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd原创 2016-06-12 11:21:03 · 3035 阅读 · 0 评论 -
java.lang.String.comparaTo(String anotherStr)详解
API中写道:public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的 Unicode 值。按字典顺序将此 String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String 对象位于参数字符串之前,则比较结果为一个负整数。如果按字典顺序此 String 对象位于参数字符串原创 2014-03-13 20:19:13 · 2064 阅读 · 0 评论 -
寻找一个字符串中最长的重复子串,如 abcdabc 最长重复串 是abc
下午就要去参加阿里巴巴的笔试了,早上起来做一道据说是阿里巴巴13年校招的考题找找手感。。。题目是寻找一个字符串中最长的重复子串。 如 abcdabc 最长重复串 是abc这个题还是挺有意思的(不过好像没啥难度,我竟然没有调试,写一次就运行出来了。。)用简单的两层循环,结合substring()方法就可以了直接上代码吧~class Test{ String reg,left;原创 2013-09-14 11:22:57 · 10385 阅读 · 9 评论 -
CharacterIterator详解
CharacterIterator是一个接口,主要用来以字符为单位来遍历文本的。StringCharacterIterator是这个接口的一个实现类。下面是一个遍历字符串的例子,通过这种方式遍历就可以不用charAt()方法了。import java.text.CharacterIterator;import java.text.StringCharacterIterator;p原创 2013-11-24 11:47:11 · 3454 阅读 · 0 评论 -
1到100,放在长度99的数组里,有一个没有在里面,编程找出那个数
利用hashmap,首先将100个数字存入map中,value初始为0;然后遍历数组,找到一个数字,把value更新为1,这样遍历完成后,就找到了那个被遗弃的数字了。代码如下。package go.derek;import java.util.*;public class FindNum { public int find(int[] arr){ Map map=new Ha原创 2013-10-11 23:53:55 · 5923 阅读 · 2 评论 -
设计两个不同的方法,判断一个数是否为2的阶次数
思路很简单,直接上代码package go.derek;public class Judge { //递归方法 public boolean judge1(double n){ n/=2; if(n==2){ return true; } //如果始终不等于2,则肯定有以下两种情况 if(1<n&&n<2||2<n&&n<3){ return fal原创 2013-10-12 23:43:35 · 1928 阅读 · 0 评论 -
设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1
java多线程问题,主要考察的就是如何创建线程。值得思考一下的是最后的运行结果~程序结束的时候j的值是多少呢?如果每个线程执行的次数都相同,那么结果当然是0了。因为这两对线程两两抵消。最后j就为0了。代码如下:package go.derek;public class ThreadTest { private int j; private synchronize原创 2013-09-23 20:44:01 · 2311 阅读 · 0 评论 -
用JAVA扫描指定文件夹下面所有以.txt结尾的文件,并将其绝对路径输出
这个问题需要了解一下File这个类的几个常用方法。大家可以直接在代码中体会一下。package go.derek;import java.io.*;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Findfile { public void find(String path,原创 2013-09-22 20:59:03 · 7736 阅读 · 0 评论 -
一道百度2014校招笔试题
题目:用c/c++,不借助任何系统函数,实现字符串的反转,如输入apple,输出elppa真是哪壶不开提哪壶,C语言本来我就才疏学浅。。。写个java的糊弄一下吧。。public class Reverse { public String reverse(String str){ char[] arr=new char[str.length()]; for(int i=str原创 2013-09-22 16:08:48 · 3306 阅读 · 14 评论 -
顺序查找的优化方法
我们知道折半查找的速度比顺序查找要快很多,但前提是折半查找需要有序的数组。讲解在注释里面~package go.derek;import java.util.Random;public class Search { //这个是普通的顺序查找,for循环里面每执行一次都要判断一下i<=arr.length //这个是会消耗时间的 public int seqSearch(int[原创 2013-09-20 19:16:45 · 1947 阅读 · 0 评论 -
冒泡排序优化版,性能近乎翻倍
原始的冒泡排序相对而言是非常耗时的,即使一个数组经过几轮交换已经变的有序了,例如[2,1,3,4,5,6,7]这个数组,经过第一轮,已经变成有序的了,但顽固的冒泡还是要继续进行没有营养的两两比较,从而牺牲了时间。如果用一个flag来判断一下,当前数组是否已经有序,如果有序就退出循环,这样可以明显的提高冒泡排序的表现~由于冒泡排序的时间复杂度为O(n*n)所以当数据越多的时候,越慢,非常不适原创 2013-09-19 12:53:53 · 4027 阅读 · 2 评论 -
java快速排序1000万无序数组JVM-Xmx=256M 耗时2s
自己动手写排序算法,快速排序是比较不好写的了~import java.util.*;class Test{ public void quickSort(int[] arr,int low,int high){ if(low<high){ int i=low; int j=high; int x=arr[low]; while(i<j){ while(原创 2013-09-18 12:36:22 · 2662 阅读 · 1 评论 -
String... args简介
String... args 与String[ ] args 作用相同,都是给方法传入多个String类型的参数;不同的地方在于如何赋值。比如有这个方法public void test(String... msgs){for(String m:msgs){ System.out.println(m); }}传实参的时候以下几种方式都是可以的1、test(原创 2014-03-30 14:36:29 · 3595 阅读 · 0 评论 -
java正则表达式不写^和$,表示匹配目标串的部分(包括本身)
最近用了好多正则表达式,都是循规蹈矩的在前面加上^在后面加上$像这个样子"^[.]\\S+$",但实际上我在eclipse和editplus下都试了一下,不加前缀和后缀也是可以的。代码如下import java.util.*;import java.util.regex.Pattern;import java.util.regex.Matcher;class Test1 {原创 2013-08-01 18:36:31 · 3398 阅读 · 0 评论 -
loosejar原理简要分析
loosejar这个小工具可以动态分析出应用中有每个jar包的实际使用情况,详情请参阅通过loosejar清理应用中冗余的jar包基本原理是利用instrumentation的特性用 Instrumentation,开发者可以构建一个独立于应用程序的代理程序(Agent),用来监测和协助运行在 JVM 上的程序,甚至能够替换和修改某些类的定义。有了这样的功能,开发者就可以实现更为灵活的运行时虚拟机原创 2014-08-21 22:09:04 · 2347 阅读 · 1 评论 -
java写文件时,输出不完整的原因以及解决方法close()或flush()
在java的IO体系中,写文件通常会用到下面语句BufferedWriter bo=new BufferedWriter(new FileWriter("sql语句.txt"));用到这个的时候一定不能忘了他的伴侣代码。。bo.close();或者bo.flush();实际上,FileWriter在写文件时,会把内容存储到一块缓冲区中,当缓冲区满后,才会把缓冲区中的内容存入数据库,内容原创 2013-07-24 16:22:52 · 22609 阅读 · 2 评论 -
探索 ConcurrentHashMap 高并发性的实现机制
Java 内存模型由于 ConcurrentHashMap 是建立在 Java 内存模型基础上的,为了更好的理解 ConcurrentHashMap,让我们首先来了解一下 Java 的内存模型。Java 语言的内存模型由一些规则组成,这些规则确定线程对内存的访问如何排序以及何时可以确保它们对线程是可见的。下面我们将分别介绍 Java 内存模型的重排序,内存可见性和 happens-转载 2015-10-09 16:02:11 · 1136 阅读 · 0 评论 -
Java开发者易犯错误Top10
本文总结了Java开发者经常会犯的前十种错误列表。Top1. 数组转换为数组列表将数组转换为数组列表,开发者经常会这样做:[java] view plaincopyList list = Arrays.asList(arr); Arrays.asList()将返回一个数组内部是私有静态类的Ar转载 2015-02-20 12:24:58 · 1311 阅读 · 0 评论 -
Java构造时成员初始化的陷阱
让我们先来看两个类:Base和Derived类。注意其中的whenAmISet成员变量,和方法preProcess()12345678publicclass Base{ Base() { preProcess(); } voidpreProcess() {}转载 2014-12-31 23:52:45 · 926 阅读 · 0 评论 -
如何将HashMap,按照value值排序
这里要用到一个Comparator的接口,里面只有一个方法,compare(),我们实现这个接口就好,很简单private class ValueComparator implements Comparator> { public int compare(Map.Entry mp1, Map.Entry mp2) {原创 2013-08-09 12:44:27 · 36273 阅读 · 1 评论 -
HashMap源码分析(基于JDK1.6)
在Java集合类中最常用的除了ArrayList外,就是HashMap了。本文尽自己所能,尽量详细的解释HashMap的源码。一山还有一山高,有不足之处请之处,定感谢指定并及时修正。 在看HashMap源码之前先复习一下数据结构。 Java最基本的数据结构有数组和链表。数组的特点是空间连续(大小固定)、寻址迅速,但是插入和删除时需要移动元素,所以查询快,增加删除慢。链表转载 2014-11-29 21:47:47 · 1190 阅读 · 0 评论 -
Java定时任务 Timer schedule详解
闲言碎语不要讲,直接上demo[java] view plaincopypublic class TimerTask { public static int i=1; public static class TestTask extends TimerTask{ public void run(){原创 2014-10-17 21:34:46 · 4953 阅读 · 0 评论 -
基于CMPP2.0的Socket客户端(Java)
短信验证码,短信通知等功能均可通过此Socket客户端实现。注意事项如下:1、服务器端是按字节依次读取的,所以客户端发送的字节包中的字段要严格按照CMPP协议中的顺序,而且每个字段都要有。2、每个字段的实际长度不足时,用0补齐;电话号码后用空格补齐3、使用ByteBuffer时,要注意putInt()和put()的区别模板如下:public clas原创 2014-09-25 22:43:37 · 4818 阅读 · 0 评论 -
深入浅出 java类加载器ClassLoader
类加载器(class loader)用来加载 Java 类到 Java 虚拟机中。一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源程序(.java 文件)在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。类加载器负责读取 Java 字节代码,并转换成java.lang.Class类的一个实例。每个这样的实例用来表示一个 Java 类。原创 2014-08-17 19:44:45 · 2029 阅读 · 0 评论 -
JDK动态代理详解
首先说一下动态代理和静态代理的区别:静态代理:是预先写好或由特定工具自动生成的代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。 动态代理:代理是在程序运行时,运用反射机制动态创建而成的,程序运行之前,代理是不存在的。Java的静态代理最简单的场景,一个接口,一个实现类,一个代理类就可以搞定,这个代理类持有接口实现类的引用,这样便可以实现委托对象的增强了。Jav原创 2014-08-31 16:53:25 · 1706 阅读 · 0 评论 -
java实现冒泡排序,选择排序,插入排序,快速排序(简洁版)及性能测试
1、冒泡排序是排序里面最简单的了,但性能也最差,数量小的时候还可以,数量一多,是非常慢的。它的时间复杂度是O(n*n),空间复杂度是O(1)代码如下,很好理解。public void bubbleSort(int[] arr){ int temp=0; for(int i=0;i<arr.length;i++){ for(int j=arr.length-1;j原创 2013-09-17 21:37:51 · 5149 阅读 · 5 评论 -
如何用LinkedHashMap实现LRU缓存算法
阿里巴巴笔试考到了LRU,一激动忘了怎么回事了。。准备不充分啊。。缓存这个东西就是为了提高运行速度的,由于缓存是在寸土寸金的内存里面,不是在硬盘里面,所以容量是很有限的。LRU这个算法就是把最近一次使用时间离现在时间最远的数据删除掉。先说说List:每次访问一个元素后把这个元素放在 List一端,这样一来最远使用的元素自然就被放到List的另一端。缓存满了t的时候就把那最远使用的元素remov原创 2013-09-15 20:18:06 · 24931 阅读 · 9 评论 -
一道2014年阿里巴巴校招笔试题
题目是某缓存系统采用LRU算法,假定缓存容量为4,并且初始为空,那么在顺序访问以下数据项的时候,1,5,1,3,5,2,4,1,2出现缓存直接命中的次数是()次,最后缓存中即将准备淘汰的数据项是()。先解释下概念吧LRU(least recently used)算法:就是把最近一次使用时间离现在时间最远的数据删除掉。更多详细的了解请看我写的这篇博文如何用LinkedHashMa原创 2013-09-16 12:14:18 · 4073 阅读 · 2 评论 -
HashMap排序,Comparator接口详解
对于List,可以调用Collections工具类的sort()方法,直接进行排序。HashMap,就没这么幸福了。。其实,只要了解了Comparator这个接口之后,HashMap的排序也就不难了,无论是根据key,还是根据value排序。这个接口也很简单,只有一个抽象方法int compare();需要我们去实现。这个方法,就是实现你制订的比较规则。(其实这个接口里面还有一个方法boo原创 2013-08-10 18:10:01 · 4278 阅读 · 2 评论 -
面试题:输入字符串,字符个数,输出拆分结果
在网上看到这个题目,自己动手试了一下,思路很简单,大家一看就懂。import java.util.*;class Split { void go(String str,int n) { String result=null; int num=0; if(str.length()%n==0) num=str.length()/n; num=(int)str.leng原创 2013-07-11 23:28:52 · 2222 阅读 · 1 评论 -
设计一个方法输入字符串,字节数,输出截取的字符串
一个汉字占两个字节,一个字母一个字节,要求字符串的中文不能出现乱码,如(“我ABC,4)应该截为,"我AB",(”我ABC汉DEF“,6)应该输出”我ABC汉“不能输入半个”汉“。import java.util.Scanner;class Csplit { static String go(String str,int n) { int bytes=0; for(int i=原创 2013-07-11 23:40:33 · 1608 阅读 · 0 评论 -
面试题:将数字依次按三角形输出,每行一个数字
效果图如上代码如下import java.util.*;class Yanghui { public static void main(String[] args) { Scanner sc=new Scanner(System.in); System.out.print("请输入最大值:"); int max=sc.nextInt(); for(int i=原创 2013-06-24 15:48:30 · 2344 阅读 · 0 评论 -
从String源码揭秘hashcode()算法
先看下java源码中对hashcode()方法里面用到的变量的声明。 /** The value is used for character storage. */ private final char value[];//定义一个字符数组value,用于存储字符串里面的字符 /** The offset is the first index of the storage原创 2013-06-11 10:23:57 · 16031 阅读 · 5 评论 -
输入年月日,算出那天是当年的第几天
思路很简单,大家一看就懂~import java.util.*;class WhichDay { static void whichday(String date) { int days=0; String[] str1=date.split("年"); int year=new Integer(str1[0]); String[] str2=str1[1].split原创 2013-04-21 20:19:24 · 2161 阅读 · 0 评论 -
输入三个数,按大小顺序排列打印
这个思路很简单,逻辑清晰,大家一看就明白了。当然有还有很多方法,欢迎大家补充。import java.util.*;class Compare { public static void main(String[] args) { Scanner sc=new Scanner(System.in); int x=sc.nextInt(); int y=sc.nextIn原创 2013-04-21 18:25:06 · 3490 阅读 · 2 评论 -
甲乙两人做游戏,掷三个骰子,比点数
规则如下:三个骰子点数相同>两个骰子点数相同>三个骰子点数不同相同情况比点数之和。代码如下import java.util.*;class Game { static int l,m,n; int w; public int num() { Random rd=new Random(); int a=rd.nextInt(6)+1; int b=rd.nex原创 2013-04-25 13:02:22 · 3609 阅读 · 0 评论 -
快递公司官网验证码(四则运算形式)java算法
面向对象versionimport java.util.*;class Check { int a,b,c; public void init() { Random rd=new Random(); a=rd.nextInt(21); b=rd.nextInt(21); if(Math.random()<0.25) { System.out.print(a+"+"+原创 2013-03-26 12:29:11 · 2166 阅读 · 0 评论 -
java26行代码实现复制文件程序
昨天看了一下午《Thinking in java》,今早终于有了种厚积薄发的感觉~import java.io.*; import java.util.*; class Copy { static void copy(String from,String to) throws IOException { BufferedReader in=原创 2013-04-11 11:47:09 · 2294 阅读 · 4 评论 -
软件工程课设——学生信息管理系统
代码长度超过系统设置了。。帮同学做的课设~import java.awt.Color;import java.awt.Graphics;import java.awt.Image;import java.awt.event.*;import javax.swing.*;import java.io.IOException;import java.sql.*;class Add {原创 2013-03-29 20:18:52 · 5909 阅读 · 0 评论 -
软件工程课设——学生财务管理系统源码
本人小菜鸟一只~这是我大三下学期软件工程课设的项目,都是自己写的哦~答辩成绩A~import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.io.*;import java.sql.*;public class Account { JFrame frame=new JFrame("记账簿")原创 2013-03-29 20:06:48 · 4167 阅读 · 2 评论