=Start=
缘由:
因为Java代码写的还不多,所以有时候在碰到一些在其他语言(比如:Python、Shell、……)里比较容易实现的功能时也不太顺畅,所以打算不断用文章进行整理总结,争取早日能较为熟练的使用Java进行开发。
正文:
参考解答:
1、打印当前日期和时间、统计某一段代码的执行耗时
import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class StrFormatPrint { public static void main(String[] args) { long time1 = System.currentTimeMillis(); DateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss"); Date date = new Date(); System.out.println(dateFormat.format(date)); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } long time2 = System.currentTimeMillis(); String strTemplate = "[%s] spend {%d} ms to call %s"; System.out.println( String.format(strTemplate, dateFormat.format(date), time2-time1, "method_name") ); } }
上面这一段代码主要是因为Java里面的 `System.out.println` 不支持字符串+整型的写法,所以使用 String.format 做的一个折中,也怪我对Java还不够熟。
2、sleep一段时间在Java中该怎么写
try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); }
为什么使用sleep()而不是wait(),具体原因可以参考「java中的sleep()和wait()的区别」,总结起来其实就是:当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备;而sleep()到时间了之后会自动恢复。
3、Java中json字符串的解析(此处用fastjson进行处理)
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; String sourceData = "{\"key1\": \"value1\", \"key2\": \"value2\"}"; JSONObject jsonObject = JSON.parseObject(sourceData); for (String key: jsonObject.keySet()) { System.out.println("key: " + key + "\tvalue: " + jsonObject.getString(key)); } if (jsonObject.containsKey("key0")) { System.out.println("jsonObject.containsKey(\"key0\") == True"); } else { System.out.println("jsonObject.containsKey(\"key0\") == False"); } JSONObject result = new JSONObject(); result.put("ua", jsonObject.getString("ua")); result.put("name", jsonObject.getString("key1")); System.out.println(result); System.out.println("jsonObject.getString(\"ua\")==" + jsonObject.getString("ua"));
4、Java中Collection集合的简单操作
package com.ixyzero.learn; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; /** * Java集合总结之Collection整体框架 https://blog.csdn.net/snail_rao/article/details/7617810 * java Collection中的排序问题 https://www.cnblogs.com/huangfox/archive/2012/07/05/2577306.html * * https://blog.csdn.net/oguro/article/details/53413861 * 数组:存储同一种数据类型的集合容器. 数组的特点: 1. 只能存储同一种数据类型的数据。 2. 一旦初始化,长度固定。 3. 数组中的元素与元素之间的内存地址是连续的。 注意: Object类型的数组可以存储任意类型的数据。 * 集合:集合是存储对象数据的集合容器。 集合比数组的优势: 1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。 2. 集合的长度是会发生变化的,数组的长度是固定的。 Java集合框架之Collection实例解析 https://blog.csdn.net/qq_28261343/article/details/52614411 */ public class CollectionTest { public static void main(String[] args) { Collection<Long> uids = new ArrayList<Long>(); System.out.print(uids); System.out.println(uids.size()); uids.add((long) 12345); System.out.print(uids); System.out.println(uids.size()); String uidStr = "1,2,3,4,5,6,7,8,9,12345"; for (String uid: uidStr.split(",")) { uids.add(Long.parseLong(uid)); } System.out.print(uids); System.out.println(uids.size()); uids.remove(1); System.out.print(uids); System.out.println(uids.size()); uids.remove((long) 1); System.out.print(uids); System.out.println(uids.size()); // String testStr = "123"; // String[] items = testStr.split(","); // System.out.println(items.length); // for (String item: testStr.split(",")) { // System.out.println(item); // } String[] words = {"ace", "boom", "crew", "dog", "eon"}; List<String> wordList = Arrays.asList(words); System.out.println(wordList.size()); System.out.println(wordList); // for (String e: wordList){ // System.out.println(e); // } } }
5、待添加
- Java中的list/map/set操作,以及去重、排序;
- Java中的HTTP操作;
- Java中的MySQL操作(直连、使用c3p0等连接池);
- Java中的Redis/Mongo操作;
- Java中的命令执行操作;
- Java中的多线程、线程池操作;
参考链接:
java中的sleep()和wait()的区别
https://www.cnblogs.com/hongten/p/hongten_java_sleep_wait.html
Java中如何获取当前日期/时间
https://stackoverflow.com/questions/5175728/how-to-get-the-current-date-time-in-java
https://stackoverflow.com/questions/23944370/how-to-get-milliseconds-from-localdatetime-in-java-8
http://www.mkyong.com/java/java-how-to-get-current-date-time-date-and-calender/
Java中 String 和 Date/Timestamp 之间的转换
http://yunnick.iteye.com/blog/1074495
https://www.cnblogs.com/Matrix54/archive/2012/05/03/2481260.html
java c3p0连接池 不用spring单独使用c3p0
https://blog.csdn.net/nx188/article/details/51758055
Java中的字符串切分
https://stackoverflow.com/questions/3481828/how-to-split-a-string-in-java
java的Collection类详解
https://blog.csdn.net/oguro/article/details/53413861
java——Collection框架,Collections
https://www.cnblogs.com/dong-liu/p/7428982.html
=END=
《 “Java中的一些基础代码片段” 》 有 12 条评论
java注解详解
https://www.cnblogs.com/yiwangzhibujian/p/7353270.html
汇总java生态圈常用技术框架、开源中间件,系统架构、项目管理、经典架构案例、数据库、常用三方库、线上运维等知识
https://github.com/aalansehaiyang/technology-talk
Java中的多行字符串
https://stackoverflow.com/questions/878573/java-multiline-string
`
一、用 + 进行连接;
二、用 StringBuilder 处理;
三、用 String.format() 处理;
四、用Java8的 String.join() 处理;
`
Java中如何将一个json格式字符串转换成一个对象?
https://www.cnblogs.com/wgale025/p/5875430.html
`
// 其中 LogMatch 是一个 POJO 类(只有一堆private变量,和对应的public的getter和setter);
// 只要 inputStr 不是空字符串,后面的get操作就不会包空指针异常,即便所有的元素值可能都是null;但如果是空串的话,解析没问题,但是如果有get操作,则会报 NullPointerException 异常。
import com.alibaba.fastjson.JSON;
String inputStr = “{\”reportTime\”: \”2018-07-15 00:00:05\”}”;
LogMatch logMatch = JSON.parseObject(inputStr, LogMatch.class);
String keyName = logMatch.getKeyName();
System.out.println(keyName);
`
fastjson将json字符串转化成map的五种方法
https://blog.csdn.net/sinat_29774479/article/details/78730359
java jsonObject.put NullPointerException
https://blog.csdn.net/u010900574/article/details/50790800
`
如果缺少初始化过程,就会出现空指针异常(NullPointerException)
JSONObject jsonObject = new JSONObject(); // 正常
`
Java HTTP 组件库选型看这篇就够了
https://liudanking.com/sitelog/java-http-client-lib-comparison/
Java中如何解析json数组?
https://stackoverflow.com/questions/30531567/parse-the-json-objects-inside-json-array-in-android
`
1、如果是大的json对象里面某一个字段值的类型是json数组的话,可以通过 getJSONArray() 方法取出,然后遍历;
2、如果是某字符串本身就是json数组的话,可以使用 JSONArray jArray = new JSONArray(stringJson); 进行解析,然后遍历;
`
https://stackoverflow.com/questions/7634518/getting-jsonobject-from-jsonarray
千万不要这样使用 Arrays.asList !
https://mp.weixin.qq.com/s/iDpx7krEjSue0-IXGiMFeQ
`
使用Arrays.asList()的原因无非是想将数组或一些元素转为集合,而你得到的集合并不一定是你想要的那个集合。
而一开始asList的设计时用于打印数组而设计的,但jdk1.5开始,有了另一个比较更方便的打印函数Arrays.toString(),于是打印不再使用asList(),而asList()恰巧可用于将数组转为集合。
`
How to parse JSON in Java
https://stackoverflow.com/questions/2591098/how-to-parse-json-in-java
`
org.json
Google GSON
Jackson
`
https://github.com/google/gson/blob/master/UserGuide.md#primitives-examples
https://dzone.com/articles/processing-json-with-jackson
JAVA中的四种JSON解析方式详解
https://blog.csdn.net/xingfei_work/article/details/76572550
`
1、JSON官方
2、GSON
3、FastJSON
4、jackson
`
Java压缩技术 – tar.bz2解压缩
https://mp.weixin.qq.com/s/7KMnL2rST8nqSUocq5dzdg
一文教您如何通过 Java 压缩文件,打包一个 tar.gz 采集器包
https://mp.weixin.qq.com/s/TO16EFpikTdTVPz0Dp8KSw
Java中使用 ASCII 码中的 0x01,0x02 作为分隔符
https://blog.csdn.net/moxiaomomo/article/details/8820890
https://blog.csdn.net/qun715715/article/details/84725773
`
用 ASCII 码中的 0x01,0x02 作为分隔符的好处在于——这几个字符是键盘不能直接输入的,避免和其它的字符冲突,导致代码功能和预期不一致。
byte b1[] = {0x01};
String ascii01 = new String(b1);
byte b2[] = {0x02};
String ascii02 = new String(b2);
String out_str = String.format(“abc%sabc%sabc%s”, ascii01, ascii01, ascii02);
System.out.println(out_str.length()); // 12
for (String item: out_str.split(ascii01)) {
System.out.println(item);
}
`
如何优雅的在java中统计代码块耗时
https://mp.weixin.qq.com/s/3cw3WsTUG94-C9894EBXUQ
`
下面小结一下三种统计耗时的方式:
# 基本写法
long start = System.currentTimeMillis();
try {
// …. 具体的代码段
} finally {
System.out.println(“cost: ” + (System.currentTimeMillis() – start));
}
优点是简单,适用范围广泛;缺点是侵入性强,大量的重复代码
# Spring AOP
在 Spring 生态下,可以借助 AOP 来拦截目标方法,统计耗时
@Around(“…”)
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
try{
return joinPoint.proceed();
} finally {
System.out.println(“cost: ” + (System.currentTimeMillis() – start));
}
}
优点:无侵入,适合统一管理(比如测试环境输出统计耗时,生产环境不输出);缺点是适用范围小,且粒度为方法级别,并受限于 AOP 的使用范围
# AutoCloseable
这种方式可以看做是第一种写法的进阶版
// 定义类
publicstaticclass Cost implements AutoCloseable {
privatelong start;
public Cost() {
this.start = System.currentTimeMillis();
}
@Override
public void close() {
System.out.println(“cost: ” + (System.currentTimeMillis() – start));
}
}
// 使用姿势
try (Cost c = new Cost()) {
…
}
优点是:简单,适用范围广泛,且适合统一管理;缺点是依然有代码侵入
说明:
上面第二种方法看着属于最优雅的方式,但是限制性强;如果有更灵活的需求,建议考虑第三种写法,在代码的简洁性和统一管理上都要优雅很多,相比较第一种可以减少大量冗余代码。
`