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

皇岗网站建设外包网络推广

皇岗网站建设,外包网络推广,网站备案必须要幕布吗,武汉建设工程造价管理协会网站前置:问题 判空集合转map集合遍历集合去重集合转数组数组转集合 一:集合判空 《阿里巴巴 Java 开发手册》的描述如下: 判断所有集合内部的元素是否为空,使用 isEmpty() 方法,而不是 size()0 的方式。 我们在开发中也…

前置:问题

  1. 判空
  2. 集合转map
  3. 集合遍历
  4. 集合去重
  5. 集合转数组
  6. 数组转集合

一:集合判空

《阿里巴巴 Java 开发手册》的描述如下:

判断所有集合内部的元素是否为空,使用 isEmpty() 方法,而不是 size()==0 的方式。
我们在开发中也常用Spring提供的CollectionUtil.isEmpty(list)

// ConcurrentHashMap 的 size() 方法和 isEmpty() 方法的源码。
public int size() {long n = sumCount();return ((n < 0L) ? 0 :(n > (long)Integer.MAX_VALUE) ? Integer.MAX_VALUE :(int)n);
}
final long sumCount() {CounterCell[] as = counterCells; CounterCell a;long sum = baseCount;if (as != null) {for (int i = 0; i < as.length; ++i) {if ((a = as[i]) != null)sum += a.value;}}return sum;
}
public boolean isEmpty() {return sumCount() <= 0L; // ignore transient negative values
}

Spring中的源码

// 判null+判内容
public static boolean isEmpty(@Nullable Collection<?> collection) {return (collection == null || collection.isEmpty());}

Spring底层是直接使用isEmpty进行判空的。

这是因为 isEmpty() 方法的可读性更好,并且时间复杂度为 O(1)。

绝大部分我们使用的集合的 size() 方法的时间复杂度也是 O(1),不过,也有很多复杂度不是 O(1) 的,比如 java.util.concurrent 包下的某些集合(ConcurrentLinkedQueue\ConcurrentHashMap…)出于时间复杂度的考虑


二:集合转Map

《阿里巴巴 Java 开发手册》的描述如下:

在使用 java.util.stream.Collectors 类的 toMap() 方法转为 Map 集合时,一定要注意当 value 为 null 时会抛 NPE 异常。

class Dog {private String id;private String sex;
}List<Dog> list = new ArrayList<>();
list.add(new Dog("1212121","公"));
// value为null值,会报npe
list.add(new Dog("435",null));
// 空指针异常
list.stream().collect(Collectors.toMap(Dog::getId, Dog::getSex));

异常原因

  • value判空
    在这里插入图片描述

集合遍历

《阿里巴巴 Java 开发手册》的描述如下:

不要在 foreach 循环里进行元素的 remove/add 操作(这个问题我踩过坑,和你想删的东西绝对不一样)。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁。

通过反编译你会发现 foreach 语法底层其实还是依赖 Iterator 。不过, remove/add 操作直接调用的是集合自己的方法,而不是 Iterator 的 remove/add方法

这就导致 Iterator 莫名其妙地发现自己有元素被 remove/add ,然后,它就会抛出一个 ConcurrentModificationException 来提示用户发生了并发修改异常。这就是单线程状态下产生的 fail-fast 机制。

Java8之后使用removeIf

List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 10; ++i) {list.add(i);
}
// 这个蛮好用的
list.removeIf(filter -> filter % 2 == 0); /* 删除list中的所有偶数 */
System.out.println(list); /* [1, 3, 5, 7, 9] */

集合去重

《阿里巴巴 Java 开发手册》的描述如下:

可以利用 Set 元素唯一的特性,可以快速对一个集合进行去重操作,避免使用 List 的 contains() 进行遍历去重或者判断包含操作。

// Set 去重代码示例// 无hash冲突时时间复杂度O(1)
public static <T> Set<T> removeDuplicateBySet(List<T> data) {if (CollectionUtils.isEmpty(data)) {return new HashSet<>();}return new HashSet<>(data);
}// List 去重代码示例//时间复杂度O(n) ,跟进去看contains方法就可以看出来
public static <T> List<T> removeDuplicateByList(List<T> data) {if (CollectionUtils.isEmpty(data)) {return new ArrayList<>();}List<T> result = new ArrayList<>(data.size());for (T current : data) {if (!result.contains(current)) {result.add(current);}}return result;
}// testMyList<Integer> integers = Arrays.asList(1, 1, 1, 12, 32, 32, 3245, 3123, 6, 6);// 推荐去重方式HashSet<Integer> integers1 = new HashSet<>(integers);System.out.println(JSON.toJSONString(integers1));

集合转数组

《阿里巴巴 Java 开发手册》的描述如下:

使用集合转数组的方法,必须使用集合的 toArray(T[] array),传入的是类型完全一致、长度为 0 的空数组。

toArray(T[] array) 方法的参数是一个泛型数组,如果 toArray 方法中没有传递任何参数的话返回的是 Object类 型数组。

String [] s= new String[]{"dog", "lazy", "a", "over", "jumps", "fox", "brown", "quick", "A"
};
List<String> list = Arrays.asList(s);
Collections.reverse(list);
//没有指定类型的话会报错
s=list.toArray(new String[0]);

由于 JVM 优化,new String[0]作为Collection.toArray()方法的参数现在使用更好,new String[0]就是起一个模板的作用,指定了返回数组的类型,0 是为了节省空间,因为它只是为了说明返回的类型。详见:https://shipilev.net/blog/2016/arrays-wisdom-ancients/


数组转集合

《阿里巴巴 Java 开发手册》的描述如下:

使用工具类 Arrays.asList() 把数组转换成集合时,不能使用其修改集合相关的方法, 它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。

Arrays.asList()在平时开发中还是比较常见的,我们可以使用它将一个数组转换为一个 List 集合。

String[] myArray = {"Apple", "Banana", "Orange"};
List<String> myList = Arrays.asList(myArray);
//上面两个语句等价于下面一条语句
List<String> myList = Arrays.asList("Apple","Banana", "Orange");

JDK源码

/***返回由指定数组支持的固定大小的列表。此方法作为基于数组和基于集合的API之间的桥梁,* 与 Collection.toArray()结合使用。返回的List是可序列化并实现RandomAccess接口。*/
public static <T> List<T> asList(T... a) {return new ArrayList<>(a);
}
http://www.khdw.cn/news/21795.html

相关文章:

  • 中央经济工作会议五个必须太原seo公司
  • 爱企业查询公司整站排名优化品牌
  • 济南网站建设公司 推荐行知科技汽车营销策划方案ppt
  • 做网站推广的话术公司网站开发费用
  • 设计微信公众号的网站吗长春seo排名外包
  • 网站托管什么意思网络推广项目代理
  • 厦门网站建设哪家便宜迅雷磁力
  • app开发定制软件公司百度seo优化方案
  • 广州网站设计公司招聘舆情网站入口
  • 网站建设的技能有哪些内容付费推广有几种方式
  • 网站开发技术发展趋势上海网络推广需要多少
  • 小规模网站开发税率网络舆情分析报告模板
  • 上海有哪些做网站怎样搭建自己的网站
  • 成都网站设计服务商seo网站优化教程
  • 网站流量排名查询百度网页版下载
  • 网站后台怎么上传文章关键词挖掘爱网站
  • 展示型网站开发店铺引流的30种方法
  • 截图京东图片做网站长尾词排名优化软件
  • 网站建设需要找工信部吗seo站长工具
  • 光谷网站制作国内最近发生的重大新闻
  • 美食网站开发报告百度关键词挖掘工具爱站网
  • node.js 网站开发 公司 广州宣传推广
  • app广告联盟成都seo培训班
  • b2c网站开发成都网站优化公司
  • 建设e购物网站搜索引擎推广法
  • 邢台做网站服务营销页面设计
  • 用dw做的网站怎么发布到网上网络营销是什么工作
  • php做的网站毕设会问的问题seo查询软件
  • shopify网站建设乔拓云智能建站
  • 做电影网站有哪些有哪些可以推广的平台