「java空间换时间」时间换空间空间换时间
今天给各位分享java空间换时间的知识,其中也会对时间换空间空间换时间进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、Java小问题
- 2、java中 时间格式转换 20150506163030 怎么把这样的数据换成 2015-05-06 16:30:30
- 3、java时间转换
- 4、java程序优化有哪些注意事项和常用方法
- 5、java 1.哈希算法的实现:输出这组数据
- 6、求助JAVA大神,连接数据库问题
Java小问题
我这里有个取巧的办法,比较简单
public void print(int n)
{
int max=(int)Math.pow(2,n);
for(int i=0;imax;i++){
String str="00000000000000000000000000000000"+Integer.toBinaryString(i);
System.out.println(str.substring(str.length()-n,str.length());
}
}
//这里用的是取巧的办法,因为Int最多只有32位,用了32个0
但是迭代次数是最少的,属于空间换时间,效率最高,代码最短的方法
java中 时间格式转换 20150506163030 怎么把这样的数据换成 2015-05-06 16:30:30
可以用dateformat来转换 。
先解析字符串转成日期,在转换成对应格式的字符串。
你的时间涉及到了年月日小时分秒
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
其中y代表年 M代表月d代表日 H代表小时,m分,s秒大小写不能弄错因为是固定的。
解析字符串
Date date = df.parse(time);
解析完成后日期就是20160101010101
最后在将日期转换成指定格式
DateFormat df2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str2=df2.format(date)
这样就是2016-01-01 01:01:01这种格式的了
java时间转换
Java 毫秒转换为(天:时:分:秒)方法
public static String format(long ms) {
//将毫秒数换算成x天x时x分x秒x毫秒
int ss = 1000;
int mi = ss * 60;
int hh = mi * 60;
int dd = hh * 24;
long day = ms / dd;
long hour = (ms - day * dd) / hh;
long minute = (ms - day * dd - hour * hh) / mi;
long second = (ms - day * dd - hour * hh - minute * mi) / ss;
long milliSecond = ms - day * dd - hour * hh - minute * mi - second * ss;
String strDay = day 10 ? "0" + day : "" + day;
String strHour = hour 10 ? "0" + hour : "" + hour;
String strMinute = minute 10 ? "0" + minute : "" + minute;
String strSecond = second 10 ? "0" + second : "" + second;
String strMilliSecond = milliSecond 10 ? "0" + milliSecond : "" + milliSecond;
strMilliSecond = milliSecond 100 ? "0" + strMilliSecond : "" + strMilliSecond;
return strDay + " " + strHour + ":" + strMinute + ":" + strSecond + " " + strMilliSecond;
}
通过此方法可以将毫秒转换成 天:时:分:秒
也可以对此方法进行稍微的修改就可以转换成其他格式。
java程序优化有哪些注意事项和常用方法
Java程序优化
1.String类 内部组成:1个char数组,1个int的偏移量,1个int的长度,内存空间主要消耗在char数组上。
其substring(int beginIndex, int endIndex)方法采用了空间换时间的做法,即使截取其中一个字符新生成的字符床依旧和原字符床持有相同的char数组,仅偏移量和长度不同而已,这无疑会造成内存的浪费,此方法的频繁使用会使永久区有可能出现内存泄漏(溢出)。
使用String(String original)此构造方法进行包裹可避开此风险:new String(str.substring(begin, end));这个构造方法可以削减无用的内存开销。
类似的还有:concat(String)/replace(char,char)/toLowerCase()/toUpperCase()/valueOf(char)等等,自行分析。
split(String regex)方法非常强大,支持正则分割,然而对于简单的(分割符都一样)分割,它的效率不是最好的。使用简单高效的StringTokenizer代替。最高效的方法:自己利用indexOf('')和substring(int,int)两个方法查找到第一个,然后截取,对剩下的字符串依旧进行此操作即可。结论:封装的越厉害,效率就会越低。实际开放中一般使用StringTokenizer即可。
字符串的charAt()也拥有超高的运行效率,如果要判断一个字符长如String str = "abcdefg"是否以"abc"开头,使用str.charAt(0)=='a' str.charAt(0)=='b' str.charAt(0)=='c' 要比str.startsWith("abc")更高效。
由于String类设计的内部结构是一个不变的char数组,一旦赋值就不能再改变,所以在需要频繁拼接的场景下多使用StringBuilder(高效非同步)、StringBuffer(同步),java的编译器会对字符串的累加自动变成StringBuilder优化(反编译可看到),但在循环里面也会不断的创建StringBuilder,故不能依赖编译器的优化,尽量使用StringBuilder做累加操作。另外初始化时候如果可以指定合适的容量,效果会更好。
2.ArrayList/Vector 基于数组 拥有很高的遍历效率 随机插入和删除效率低 LinkedList则相反 ,另外它们的三种遍历方法中for循环效率最高,forEach最低,迭代器居中。
3.HashMap(双列,k/v) 通过对key计算hash直接映射内存地址,其检索速度超快,注意不要用糟糕的hashCode覆盖原有方法,最好给一个有意义(保证对象间不冲突)的实现
4.HashSet(单列) 的内部是一个HashMap,它使用HashMap的key列存储数据,value列全部置空,因此它拥有HashMap同样高的检索性能。由于HashMap不允许key重复,故HashSet不允许插入重复值。
5.LinkedHashMap 继承自HashMap,自然拥有了其优良特性,并且通过内部维护一个元素顺序(先进先出)链表弥补了HashMap的元素无顺序的缺陷,还可以设置按访问时间排序。
6.LinkedHashSet 继承自HashSet。
7.TreeMap也是一个有序的Map,它的顺序依赖value对象的排序规则,它有subMap(k2,k3):介于k2、k3之间,headMap(k2):大于k2,tailMap(k3):小于k3 等特色功能。
8.TreeSet 对 TreeMap 包装
9.NIO:提升I/O性能的两大组件:Channel、Buffer 对于大文件的复制性能较高
10.强引用:所指对象在任何情况下都不会被回收,可能会引起内存泄漏。
软引用(SoftReference):一个持有软引用的对象不会立即被回收,在临近阀值时被回收,可以使用一个引用队列,当对象被回收时会加入到这个队列中。适合做可有可无的数据缓存。
弱引用(WeakReference):只要GC即被回收。适合做可有可无的生命周期更短的数据缓存。
虚引用(PhantomReference):最弱的引用,和没有引用几乎是一样的,随时会被gc回收,它的作用主要是跟踪gc过程。
11.慎用异常:try-catch 语句频繁使用会对性能影响很大,切勿通过try-catch异常捕捉来完成业务逻辑,如非必要请少用。
13.静态变量、实例变量存放于堆中,远没有栈中变量访问效率高,所以如果一个变量若无被共享等需求应尽量在栈中初始化即在方法中定义和访问。
14.在所有的运算中,位运算最高效。如果可以优先选择位运算如:乘以2 x = 1 除以2 x = 1
15.switch 语句类似 if-else 性能虽然不差但也有提升空间,不可滥用,可以尝试将switch分支的结果存放于一个数组内,然后通过一个判断逻辑从数组内获取,这个判断逻辑自己写的可以超过switch内部的分支判断语句。如果遇到很多分支结构的判断可以去考虑下“状态模式”来设计程序。
16.如果有多条计算语句它们的某些部分是相同,那么可以把相同的语句提取成公共的,计算一次后保存计算结构供每个表达式用,可以节省cpu资源,避免重复计算表达式,尤其在循环内部,这种优化是有必要的。
17.减少循环次数:举例:for(int i=0;i9999;i+=3){arr[i]=i;arr[i+1]=i+1;arr[i+2]=i+2;}
18.arraycopy()是native方法效率很高,如果有可能我们应该尽量使用native的方法以最大限度提高性能。
19.clone()方法可以绕过类的构造方法,对于构造耗时的对象可以考虑使用,但要注意默认的clone实现的是一个浅拷贝,如需要深拷贝需要重载clone方法。
java 1.哈希算法的实现:输出这组数据
public static void main(String[] args){
System.out.println("输入n,按回车:");
Scanner s = new Scanner(System.in);
Integer n = Integer.parseInt(s.next());
Integer re = factorial(1, n);
System.out.println(re);
}
public static Integer factorial(Integer a, Integer b){
if(b == 1){
return a * b;
}else{
return a * b * factorial(a, b-1);
}
}
量,当温度降低时,物体内能减小。所有能量的单位都是:焦耳。热
求助JAVA大神,连接数据库问题
数据库服务器一直开着,
1:使用dbcp连接池,这是一种用空间换时间的方法,第一次会耗费大量时间创建若干个数据库连接(connections),以后则直接从connections里面去取,速度很快,调用其close()方法则将连接返回connectios中,不是真正的关闭,
2:用到的时候去取连接,每次都要耗费时间去获取连接,对用户体验不好,会感觉略显迟钝,调用其close()方法则将连接真正关闭,对于并发量较少的业务场景来说,比较节省系统资源
java空间换时间的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于时间换空间空间换时间、java空间换时间的信息别忘了在本站进行查找喔。