当前位置: 首页 > news >正文

Java8 中有趣酷炫的小技巧

执行注释

大多数开发人员认为 注释 永远不会在程序中执行,并用于帮助代码理解。但是,它们却 可以被执行

public class Main {

    public static void main(String[] args) {
        // \u000d System.out.println("wmyskxz is awesome!");
    }
}

程序输出:

wmyskxz is awesome!

说明

Java 允许使用 Unicode 字符而不进行编码。这里的 Unicode 字符 \u000d 被 Java 编译器解析为新行,因此可以理解为该 Unicode 字符后面出现的语句会在下一行被执行。


双括号初始化集合

在 Java 中,Set/ List/ Map 等集合对象没有在生命期间初始化值的简单方法 (Java 11 支持了该类操作)。开发人员要么将值显式地传送到集合内,要么为常量集合创建一个静态块。

使用双括号初始化,可以在声明过程中以更少的精力和时间初始化集合。例如:

Set<String> set = new HashSet<String>() {{
    add("wmyskxz");
    add("is");
    add("awesome");
    add("!");
} };
System.out.println(set);

程序输出:

[awesome, !, wmyskxz, is]

Java 11 中,你可以使用 Set.of("wmyskxz", "is", "awesome", "!") 代替,这里仅仅讨论 Java 8

另外对于 ArrayList 集合类型还是有简单初始化方法的:Arrays.asList()


获取数组插入数字元素的下标

有一个很酷的技巧,可以找到可以在数组中插入所请求元素的位置:

int[] arr = new int[] { 1, 3, 4, 5, 6 };

// 2 has to be inserted
int pos = Arrays.binarySearch(arr, 2);
System.out.print("Element has to be inserted at: "
    + ~pos);

程序输出:

Element has to be inserted at: 1

说明

Arrays.binarySearch() 是 JDK 自己实现的二分查找方法,局限就是目标数组必须是排序好的 (可以使用 Arrays.sort() 进行排序)


判断数字是偶数还是奇数

通常我们会使用 num % 2 == 0 (一定记住要使用 偶判断 而不是奇判断,原因是负数会出错..) 来判断数字是奇数还是偶数。下面的技巧尽管并不比上述方法好多少,但在考虑大数时,效率会高很多:

System.out.println((num & 1) == 0 ?  "EVEN" : "ODD" );

示例:

int num = 2;
System.out.println((num & 1) == 0 ? "EVEN" : "ODD");
// 输出 EVEN

num = -1;
System.out.println((num & 1) == 0 ? "EVEN" : "ODD");
// 输出 ODD

快速乘或除 2

二进制中,乘以 2 表示将所有位向左移动,除以 2 表示向右移动。

n = n << 1;   // Multiply n with 2 
n = n >> 1;   // Divide n by 2 

判断素数

Java 在 BigInteger 类中内置了 isProbablePrime() 方法。如果此 BigInteger 可能是质数(可以肯定),则返回 true,如果它肯定是复合的,则返回 false

BigInteger.valueOf(1235).isProbablePrime(1) 

More..

欢迎补充

参考资料

  1. Interesting and Cool Tricks in Java - https://www.geeksforgeeks.org/interesting-and-cool-tricks-in-java/?ref=leftbar-rightbar

  2. Java tricks for competitive programming (for Java 8) - https://www.geeksforgeeks.org/java-tricks-competitive-programming-java-8/?ref=rp

QQ群号:763628645

QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

相关文章:

  • 实战分享 | 你知道这个死锁是怎么产生的吗?
  • MGR用哪个版本?5.7 vs 8.0
  • Gdevops北京站2020收官活动归来
  • 史上最长最全!围绕故障管理谈SRE体系建设
  • MySQL如何管理客户端连接?线程池篇
  • TVP两周年:携手同行,让未来可见
  • 你知道全知乎阅读量最高的问题是什么吗?我全都爬下来了
  • 高并发下,如何让你的数据库再快一点?
  • 2300天,再出发
  • MySQL 实战笔记 第01期:MySQL 角色管理
  • MySQL 实战笔记 第02期:MySQL 元数据锁
  • 经常用Redis,这些坑你知道吗?
  • Redis为什么这么快?
  • 迁移至MySQL的数据流转流程优化
  • 长文:读《经济学32定律》
  • 78. Subsets
  • android图片蒙层
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Codepen 每日精选(2018-3-25)
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • java 多线程基础, 我觉得还是有必要看看的
  • leetcode46 Permutation 排列组合
  • PHP面试之三:MySQL数据库
  • Python学习之路16-使用API
  • Redis学习笔记 - pipline(流水线、管道)
  • underscore源码剖析之整体架构
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 排序(1):冒泡排序
  • 前端代码风格自动化系列(二)之Commitlint
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 应用生命周期终极 DevOps 工具包
  • 用jQuery怎么做到前后端分离
  • 原生Ajax
  • 06-01 点餐小程序前台界面搭建
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • #Java第九次作业--输入输出流和文件操作
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $jQuery 重写Alert样式方法
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (一)SpringBoot3---尚硅谷总结
  • (转)C#调用WebService 基础
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .htaccess 强制https 单独排除某个目录
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .net经典笔试题
  • .net中的Queue和Stack
  • @JoinTable会自动删除关联表的数据