1.Javaä¸CollectionåCollectionsçåºå«
2.不要再重复造轮子了!这17个Java常用工具类,让生产力爆表!
3.用java程序编写使123 321逆序输出
4.跟着 Guava 学 Java 之 集合工具类
Javaä¸CollectionåCollectionsçåºå«
ãã1. Collectionæ¯éåç±»çä¸ä¸ªé¡¶çº§æ¥å£ï¼å ¶ç´æ¥ç»§æ¿æ¥å£æListä¸Set
ããèCollectionsåæ¯éåç±»çä¸ä¸ªå·¥å ·ç±»/帮å©ç±»ï¼å ¶ä¸æä¾äºä¸ç³»åéææ¹æ³ï¼ç¨äºå¯¹éåä¸å ç´ è¿è¡æåºãæ索以å线ç¨å®å ¨çåç§æä½ã
ãã
ãã1) æåº(Sort)
ãã使ç¨sortæ¹æ³å¯ä»¥æ ¹æ®å ç´ çèªç¶é¡ºåº 对æå®å表æååºè¿è¡æåºãå表ä¸çææå ç´ é½å¿ é¡»å®ç° Comparable æ¥å£ãæ¤å表å çææå ç´ é½å¿ é¡»æ¯ä½¿ç¨æå®æ¯è¾å¨å¯ç¸äºæ¯è¾ç
double array[] = { , , , , };
for (int i = 0; i < array.length; i++) {
list.add(new Double(array[i]));
}
Collections.sort(list);
for (int i = 0; i < array.length; i++) {
System.out.println(li.get(i));
}
//ç»æï¼,,,,
ãã2) æ··æï¼Shufflingï¼
ããæ··æç®æ³æåçæ£å¥½ä¸ sort ç¸å: æä¹±å¨ä¸ä¸ª List ä¸å¯è½æçä»»ä½æåç踪迹ãä¹å°±æ¯è¯´ï¼åºäºéæºæºçè¾å ¥éæ该 List, è¿æ ·çæåå ·æç¸åçå¯è½æ§ãè¿ä¸ªç®æ³å¨å®ç°ä¸ä¸ªç¢°è¿æ°ç游æä¸æ¯é常æç¨çãä¾å¦ï¼å¯ç¨æ¥æ··æ代表ä¸å¯çç Card 对象çä¸ä¸ª List ãå¦å¤ï¼å¨çææµè¯æ¡ä¾æ¶ï¼ä¹æ¯ååæç¨çã
Collections.Shuffling(list)
double array[] = { , , , , };
for (int i = 0; i < array.length; i++) {
list.add(new Double(array[i]));
}
Collections.shuffle(list);
for (int i = 0; i < array.length; i++) {
System.out.println(li.get(i));
}
//ç»æï¼,,,,
ãã3) å转(Reverse)
使ç¨Reverseæ¹æ³å¯ä»¥æ ¹æ®å ç´ çèªç¶é¡ºåº 对æå®å表æéåºè¿è¡æåºã
Collections.reverse(list)
double array[] = { , , , , };
for (int i = 0; i < array.length; i++) {
list.add(new Double(array[i]));
}
Collections. reverse (list);
for (int i = 0; i < array.length; i++) {
System.out.println(li.get(i));
}
//ç»æï¼,,,,
ãã4) æ¿æ¢æ以çå ç´ (Fill)
ãã使ç¨æå®å ç´ æ¿æ¢æå®å表ä¸çææå ç´ ã
String str[] = { "dd","aa","bb","cc","ee"};
for(int j=0;j<str.length;j++){
li.add(new String(str[j]));
}
Collections.fill(li,"aaa");
for (int i = 0; i < li.size(); i++) {
System.out.println("list[" + i + "]=" + li.get(i));
}
//ç»æï¼aaa,aaa,aaa,aaa,aaa
ãã5) æ·è´(Copy)
ããç¨ä¸¤ä¸ªåæ°ï¼ä¸ä¸ªç®æ List åä¸ä¸ªæº List, å°æºçå ç´ æ·è´å°ç®æ ï¼å¹¶è¦çå 容ãç®æ List è³å°ä¸æºä¸æ ·é¿ãå¦ææ´é¿ï¼åå¨ç®æ List ä¸çå©ä½å ç´ ä¸åå½±åã
Collections.copy(list,li): åé¢ä¸ä¸ªåæ°æ¯ç®æ å表 ,åä¸ä¸ªæ¯æºå表
double array[] = { , , , , };
List list = new ArrayList();
List li = new ArrayList();
for (int i = 0; i < array.length; i++) {
list.add(new Double(array[i]));
}
double arr[] = { ,};
String str[] = { "dd","aa","bb","cc","ee"};
for(int j=0;j<arr.length;j++){
li.add(new Double(arr[j]));
}
Collections.copy(list,li);
for (int i = 0; i <list.size(); i++) {
System.out.println("list[" + i + "]=" + list.get(i));
}
//ç»æï¼,,,,
ãã6) è¿åCollectionsä¸æå°å ç´ (min)
ããæ ¹æ®æå®æ¯è¾å¨äº§çç顺åºï¼è¿åç»å® collection çæå°å ç´ ãcollection ä¸çææå ç´ é½å¿ é¡»æ¯éè¿æå®æ¯è¾å¨å¯ç¸äºæ¯è¾ç
Collections.min(list)
double array[] = { , , , , };
List list = new ArrayList();
for (int i = 0; i < array.length; i++) {
list.add(new Double(array[i]));
}
Collections.min(list);
for (int i = 0; i <list.size(); i++) {
System.out.println("list[" + i + "]=" + list.get(i));
}
//ç»æï¼
ãã7) è¿åCollectionsä¸æå°å ç´ (max)
ããæ ¹æ®æå®æ¯è¾å¨äº§çç顺åºï¼è¿åç»å® collection çæ大å ç´ ãcollection ä¸çææå ç´ é½å¿ é¡»æ¯éè¿æå®æ¯è¾å¨å¯ç¸äºæ¯è¾ç
Collections.max(list)
double array[] = { , , , , };
List list = new ArrayList();
for (int i = 0; i < array.length; i++) {
list.add(new Double(array[i]));
}
Collections.max(list);
for (int i = 0; i <list.size(); i++) {
System.out.println("list[" + i + "]=" + list.get(i));
}
//ç»æï¼
ãã8) lastIndexOfSubList
ããè¿åæå®æºå表ä¸æåä¸æ¬¡åºç°æå®ç®æ å表çèµ·å§ä½ç½®
int count = Collections.lastIndexOfSubList(list,li);
double array[] = { , , , , };
List list = new ArrayList();
List li = new ArrayList();
for (int i = 0; i < array.length; i++) {
list.add(new Double(array[i]));
}
double arr[] = { };
String str[] = { "dd","aa","bb","cc","ee"};
for(int j=0;j<arr.length;j++){
li.add(new Double(arr[j]));
}
Int locations = Collections. lastIndexOfSubList (list,li);
System.out.println(â===â+ locations);
//ç»æ 3
ãã9) IndexOfSubList
ããè¿åæå®æºå表ä¸ç¬¬ä¸æ¬¡åºç°æå®ç®æ å表çèµ·å§ä½ç½®
int count = Collections.indexOfSubList(list,li);
double array[] = { , , , , };
List list = new ArrayList();
List li = new ArrayList();
for (int i = 0; i < array.length; i++) {
list.add(new Double(array[i]));
}
double arr[] = { };
String str[] = { "dd","aa","bb","cc","ee"};
for(int j=0;j<arr.length;j++){
li.add(new Double(arr[j]));
}
Int locations = Collections.indexOfSubList(list,li);
System.out.println(â===â+ locations);
//ç»æ 1
ãã) Rotate
ããæ ¹æ®æå®çè·ç¦»å¾ªç¯ç§»å¨æå®å表ä¸çå ç´
Collections.rotate(list,-1);
å¦ææ¯è´æ°ï¼åæ£å移å¨ï¼æ£æ°åæ¹å移å¨
double array[] = { , , , , };
List list = new ArrayList();
for (int i = 0; i < array.length; i++) {
list.add(new Double(array[i]));
}
Collections.rotate(list,-1);
for (int i = 0; i <list.size(); i++) {
System.out.println("list[" + i + "]=" + list.get(i));
}
//ç»æï¼,,,,
不要再重复造轮子了!这个Java常用工具类,让生产力爆表!底层源码解析
在Java编程的世界里,隐藏着许多实用的工具类,就像轮子一样,能大大提升我们的开发效率。今天,我将分享个在日常工作中不可或缺的Java工具,它们分布在Collections、CollectionUtils、Lists、Objects、StringUtils、Assert、IOUtils、MDC、ClassUtils、BeanUtils、nas监控源码ReflectionUtils、BaseUtils、StandardCharsets、DigestUtils、SerializationUtils和HttpStatus等类别中。1. Collections
从java.util.Collections开始,它提供了排序、查找最大值/最小值、线程安全集合转换以及创建/返回空集合等功能。比如,Collections.sort()可以轻松对集合进行排序。2. CollectionUtils
除了Collections,org.apache.commons.collections的CollectionUtils提供了集合判空、交集并集等操作,简化了复杂操作。Lists
引入guava或com.google.common.collect的Lists工具,能快速创建空集合、初始化元素、做笛卡尔积、分页处理,甚至转换流处理。tb高频源码Objects
Objects工具处理对象判空、空指针异常、相等判断和hashCode计算,让对象操作更加便捷。StringUtils
Apache Commons Lang的StringUtils提供了丰富的字符串操作,如判空、分割、判断纯数字、拼接字符串等。Assert
Spring的Assert类提供了断言工具,用于检查参数、集合和条件,增强代码的健壮性。IOUtils
Apache Commons IO的IOUtils简化了文件读写、拷贝和内容到字节数组的操作,避免了繁琐的异常处理。其他工具
MDC:线程安全的诊断日志容器,用于传递请求信息。
ClassUtils:获取类信息、判断内部类和代理对象等。
BeanUtils:对象属性拷贝、打劫指标源码实例化和方法查找等。
ReflectionUtils:反射操作,如获取方法、字段和执行方法。
BaseUtils:提供数据加密和解密。
StandardCharsets:处理字符编码转换。
DigestUtils:数据加密,如md5和sha。
SerializationUtils:序列化和反序列化工具。
HttpStatus:预定义的HTTP状态码枚举。
这些工具的合理运用,能让你的代码更加简洁高效。如果你在工作中遇到类似场景,不妨尝试使用它们。感谢你的阅读,如果觉得有帮助,欢迎点赞支持。用java程序编写使 逆序输出
写了一个小程序如下:
package com.baidu.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class test {
public static void main(String[] args) {
List<Integer> numList = getNumList();
System.out.println("顺序:"+numList);
Collections.reverse(numList);
System.out.println("倒叙:"+numList);
}
public static List<Integer> getNumList(){
List<Integer> numList = new ArrayList<Integer>();
int i =1;
while(i<4){
numList.add(i);
i++;
}
return numList;
}
}
一起共同学习,共同进步
跟着 Guava 学 Java 之 集合工具类
跟着 Guava 学 Java 之 集合工具类
先来回顾一下 JDK 的Collections,java.util.Collections 提供了一系列静态方法,能更方便地操作各种集合。蓝润源码
Guava 沿着 Collections 的思路,提供了更多工具方法,适用于所有集合的静态方法,使之成为更强大的集合工具类。
Guava 提供的集合工具不止是对 Collections 的扩展和增强,还包括了其他集合类型的工具类。我们把工具类与特定集合接口的对应关系归纳如下:
静态构造器
在 JDK 7 之前,构造新的范型集合时要重复声明范型。JDK 7 以后,因为有了钻石操作符(Diamond Operator),可以自动推断参数类型,所以省事儿。用 Guava 可以这样写,你可能觉得这没什么牛的,跟 JDK7 以后没啥区别,人家还是原生的。
是的,没错,尤其是你用 JDK 9 以后的版本,JDK 从功能上跟 Guava 就基本一样了。比如带元素初始化:
上面这行是利用了 Guava 的 Lists,JDK 7 没有比这行代码更好的方法,但 JDK9 人家有,比如:
所以我们说,跟着 Guava 学 Java,随着版本的迭代,你觉得哪个好用,哪个适合你用哪个,重要的是把这里面的知识点讲清楚。
我们再来看个例子:创建集合时指定初始化集合大小。
你可能说,哥们,这 JDK 有啊,这不多此一举吗?是的,作用一样,但 Guava 的做法,可以利用工厂方法名称,提高代码的可读性,你不觉得虽然名字长了,但可读性比 JDK 那个好很多吗?代码不止是写给机器的,也是写给人看的,不能指望团队里所有人都是强者。代码可读性越高,越健壮越容易维护。
Iterables 类包含了一系列的静态方法,来操作或返回 Iterable 对象。看几个常用的方法:
对于上面这些常用的方法,可能你觉得使用 JDK8 以后的 Stream 一行也都搞定了,是的,还是那句话,Guava 是个工具,尤其在 JDK8 之前用来增强 API 很好用,但工具不止一个,Java 也在发展,有些东西就变成可选项了,看你的需求和习惯使用。Guava 也有对应的流式风格的工具类,比如 FluentIterable。
Lists 除了静态工厂方法和函数式编程方法,为 List 类型的对象提供了若干工具方法。
Sets 工具类包含了若干好用的方法。Sets 为我们提供了很多标准的集合运算(Set-Theoretic)方法,比如我们常用的集合的 “交、并、差集” 以及对称差集。
注意返回的都是 SetView,它可以:
笛卡儿积
Maps 有若干很酷的方法。
uniqueIndex 有一组对象,它们在某个属性上分别有独一无二的值,而我们希望能够按照这个属性值查找对象。
比方说,我们有一堆字符串,这些字符串的长度都是独一无二的,而我们希望能够按照特定长度查找字符串:
你可以想到了,我们常见的场景还有把一个 List 的对象集合转成 Map,map 的 key 通常是对象的 ID。用 uniqueIndex 方法可以这样写:
或者你用 Java8 的 Stream 也一样:
注意:key 要是唯一的,否则会报错。
difference 找不同,对比两个 map,告诉你哪里不同。
Maps.difference(Map, Map)用来比较两个 Map 以获取所有不同点。该方法返回 MapDifference 对象。
下面是 MapDifference 的一些方法:
看到这个你能想到什么?我举个场景:审计日志或操作日志,谁什么时间做了什么,数据从旧值变更为新值,这些要记录下来。是不是可以用上面这个 Maps 的方法?适合不适合你自己决定,这里是提供个思路。
“下面要介绍的工具类都是新集合类型的工具类,比如 MultiSet 和 MultiMap 之类的,有关这些 Guava 的新集合类型,在之前的文章《跟着 Guava 学 Java 之 新集合类型》都有介绍,有不清楚的可以再翻回去看一看。”
标准的 Collection 操作会忽略 Multiset 重复元素的个数,而只关心元素是否存在于 Multiset 中,如 containsAll 方法。为此,Multisets 提供了若干方法,以顾及 Multiset 元素的重复性:
举例来说:
Multisets 中的其他工具方法还包括:
Multimaps.index “Multimaps 的 index 方法跟前面介绍的 Maps.uniqueIndex 方法是兄弟方法。与 uniqueIndex 方法相反,通常针对的场景是:有一组对象,它们有共同的特定属性,我们希望按照这个属性的值查询对象,但属性值不一定是独一无二的。比方说,我们想把字符串按长度分组:”
invertFrom Multimap 可以把多个键映射到同一个值,也可以把一个键映射到多个值,反转 Multimap 也会很有用。Guava 提供了 invertFrom(Multimap toInvert, Multimap dest)做这个操作,并且你可以自由选择反转后的 Multimap 实现。
forMap 想在 Map 对象上使用 Multimap 的方法吗?forMap(Map)把 Map 包装成 SetMultimap。这个方法特别有用,例如,与 Multimaps.invertFrom 结合使用,可以把多对一的 Map 反转为一对多的 Multimap。
浙江杭州开展暑期儿童玩具检查
地下仲介拉台女赴中捐卵 營養費最多32萬!
德法兩國將共同開發遠程導彈
特斯拉股東力挺!馬斯克1.81兆薪酬入袋
美國國債總額首次達到34萬億美元
鹿港百年麵線糊老店火警 「鐵捲門被炸飄」一樓全焦黑