皮皮网

【底层源码解析】【nas监控源码】【tb高频源码】Collections 源码 java

时间:2024-12-24 22:04:47 来源:金发卡网源码

1.Java中Collection和Collections的区别
2.不要再重复造轮子了!这17个Java常用工具类,让生产力爆表!
3.用java程序编写使123 321逆序输出
4.跟着 Guava 学 Java 之 集合工具类

Collections 源码 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萬!

地下仲介拉台女赴中捐卵 營養費最多32萬!

德法兩國將共同開發遠程導彈

德法兩國將共同開發遠程導彈

特斯拉股東力挺!馬斯克1.81兆薪酬入袋

特斯拉股東力挺!馬斯克1.81兆薪酬入袋

美國國債總額首次達到34萬億美元

美國國債總額首次達到34萬億美元

鹿港百年麵線糊老店火警 「鐵捲門被炸飄」一樓全焦黑

鹿港百年麵線糊老店火警 「鐵捲門被炸飄」一樓全焦黑

copyright © 2016 powered by 皮皮网   sitemap