1.Double比较问题
public class Double比较问题 {
public static void main(String[] args) {
Double a = 0.10000000000000001;
Double b = 0.10000000000000000;
//直接比较不行
if (a > b) {
System.out.println("xxx");
}
//这样ok
if (a.compareTo(b) >= 0) {
System.out.println("sssssss");
}
//这样ok
if (compareTo(a, b) >= 0) {
System.out.println("ssssss");
}
/**
* 因为double的精度为16位,超过16位词方法不行 了。
* 不过一般生产不存在16精度的数据。
*/
if (a.doubleValue() > b.doubleValue()) {
System.out.println("11111111111111");
}
}
/**
* 比较两个double数据类型
* @param d1
* @param d2
* @return
* 2018年4月16日
*/
public static int compareTo(Double d1, Double d2) {
BigDecimal data1 = new BigDecimal(d1);
BigDecimal data2 = new BigDecimal(d2);
return data1.compareTo(data2);
}
}
2.代码优化问题
iterator速度>普通for循环>foreach循环
个人觉得都是扯淡,主要看循环里面的业务逻辑是否耗时。
string str=“1”+“2”+“3”
创建了 对象1 对象12 对象123 三个对象
vector 底层是数组,移除最后一个快,移除第一个要调整其他的下标,慢。
for循环优化
for(int i=0;i<a.size();i++) 一次;多次;多次 for(int i=0,int length=a.size();i<lenth;i++)
for循环内的对象先在外部声明,减少堆栈内存的使用。for循环内创建string字符串是一个常量,符合懒加载策略,常量不会影响性能。
3.判断是否手机微信浏览器打开
java代码
/**
* 判断是否从微信端进入
*/
protected boolean isWechatAccess() {
boolean isWechat = true;
String agent = getRequest().getHeader("user-agent");
if (agent == null || !agent.contains("MicroMessenger")) {
isWechat = false;
}
return isWechat;
}
js
function isWeiXinClient() {
var ua = navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i)=="micromessenger") {
return true;
} else {
return false;
}
}
alert(isWeiXinClient());
4.label绑定input触发事件
通过点击label事件来触发选择,获取焦点。使用label的for绑定id点击标签即可触发选择对应id的input。
<html>
<body>
<p>请点击文本标记之一,就可以触发相关控件:</p>
<form>
<label for="male">Male</label>
<input type="radio" name="sex" id="male" />
<br />
<label for="female">Female</label>
<input type="radio" name="sex" id="female" />
</form>
</body>
</html>
5.jq获取checkedbox选中的值
使用 jquery 获取一组或者单个 checkbox 的选中状态的值。下面通过一个示例进行说明,假设现有一页面有一组 checkbox 的 name 的值为 id ,那么获取这组 name=id 的checkbox的值的方法如下: Js代码
var id_array=new Array();
$('input[name="id"]:checked').each(function(){
id_array.push($(this).val());//向数组中添加元素
});
var idstr=id_array.join(',');//将数组元素连接起来以构建一个字符串
alert(idstr);
另外 jquery 判断单个 checkbox 是否选中以及获取选中值的方法如下:
Js代码 收藏代码
if($("#id").is(":checked")){//选中
alert($("#id").val());//打印选中的值
}
<script>
function submit(){
$('input[type="checkbox"]:checked').each(function(){
console.log($(this).attr('name'));
});
}
</script>
6.jq 定时器
var timer = setInterval(function(){
$.ajax({
type : "get", //提交方式
url : "ajaxWXFontActive?outTradeNo=" + '${outTradeNo}',//路径
data : {
},
dataType: 'json',
success : function(result) {//返回数据根据结果进行相应的处理
/* result=eval('('+result+')'); */ //单个数据才需要使用
console.log(result);
if (result.result == 'success') {
$('.title').html("您的终端:" + result.tid + " 激活成功");
$('#img').attr("src","${pageContext.request.contextPath}/build/wechat/images/ok_icon.png");
clearInterval(timer);
} else {
console.log(result);
}
},
error : function(error){
console.log(error);
}
});
},5000);
7.毫秒转换为秒
long time1 = System.currentTimeMillis();
Thread.sleep(2000);
long time2 = System.currentTimeMillis();
System.err.println(TimeUnit.MILLISECONDS.toSeconds(time2 - time1));
long time11 = System.nanoTime();
Thread.sleep(2000);
long time22 = System.nanoTime();
System.err.println(TimeUnit.NANOSECONDS.toSeconds(time22 - time11));
用 currentTimeMillis 好点,后者不准
8.字符串写成流
String text = "hello";
InputStream inputStream = new ByteArrayInputStream(text.getBytes("UTF-8"));
//文件流变字符串
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\qinshipeng\\dom4j\\student.xml")));
9.File路径新建文件夹创建
// 指定路径如果没有则创建并添加
File file = new File("d:\A\B\C\xxx.excel");
//获取父目录
File fileParent = file.getParentFile();
//判断是否存在
if (!fileParent.exists()) {
创建父目录文件
fileParent.mkdirs();
}
file.createNewFile();
mkdirs创建多层路径。 mkdir 前面路径如果不存在就 返回 false
10.导出zip
java poi 导出 excel 压缩成 zip 格式
OutputStream out = response.getOutputStream();
ZipOutputStream zip = new ZipOutputStream(out);
ZipEntry entry = new ZipEntry("xx.xls");
zip.putNextEntry(entry);
workbook.write(zip);
zip.flush();
zip.close();
11.相对路径的复制和使用
一个具体文件的文件夹,和相对路径直接取绝对路径。
File parentFolder = new File("F:\\hexo\\vuepress\\docs\\Java学习\\IDEA学习\\README.md");
File b = new File(parentFolder.getParent(), "../../assets/mul_thread.gif");
String absolute = b.getCanonicalPath();
System.out.println(absolute);
//F:\hexo\vuepress\docs\Java学习\assets\mul_thread.gif