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

php网站模板源码下载公司网络营销推广软件

php网站模板源码下载,公司网络营销推广软件,微信公众号推广网站,电商网站设计公司立找亿企邦目录 1. 集合判空 2. 集合转 Map 3. 集合遍历 4. 集合去重 5. 集合转数组 6. 数组转集合 1. 集合判空 《阿里巴巴 Java 开发手册》的描述如下#xff1a; 判断所有集合内部的元素是否为空#xff0c;使用 isEmpty() 方法#xff0c;而不是 size()0 的方式。 这是因为…目录 1. 集合判空 2. 集合转 Map 3. 集合遍历 4. 集合去重 5. 集合转数组 6. 数组转集合 1. 集合判空 《阿里巴巴 Java 开发手册》的描述如下 判断所有集合内部的元素是否为空使用 isEmpty() 方法而不是 size()0 的方式。 这是因为 isEmpty() 方法的可读性更好并且时间复杂度为 O(1)。 绝大部分我们使用的集合的 size() 方法的时间复杂度也是 O(1)不过也有很多复杂度不是 O(1) 的比如 java.util.concurrent 包下的某些集合ConcurrentLinkedQueue、ConcurrentHashMap...。 下面是 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 }2. 集合转 Map 《阿里巴巴 Java 开发手册》的描述如下 在使用 java.util.stream.Collectors 类的 toMap() 方法转为 Map 集合时一定要注意当 value 为 null 时会抛 NPE 异常。 class Person {private String name;private String phoneNumber;// getters and setters }ListPerson bookList new ArrayList(); bookList.add(new Person(jack,18163138123)); bookList.add(new Person(martin,null)); // 空指针异常 bookList.stream().collect(Collectors.toMap(Person::getName, Person::getPhoneNumber));下面我们来解释一下原因。 首先我们来看 java.util.stream.Collectors 类的 toMap() 方法 可以看到其内部调用了 Map 接口的 merge() 方法。 public static T, K, U, M extends MapK, U CollectorT, ?, M toMap(Function? super T, ? extends K keyMapper,Function? super T, ? extends U valueMapper,BinaryOperatorU mergeFunction,SupplierM mapSupplier) {BiConsumerM, T accumulator (map, element) - map.merge(keyMapper.apply(element),valueMapper.apply(element), mergeFunction);return new CollectorImpl(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID); }Map 接口的 merge() 方法如下这个方法是接口中的默认实现。 如果你还不了解 Java 8 新特性的话请看这篇文章《Java8 新特性总结》 。 default V merge(K key, V value,BiFunction? super V, ? super V, ? extends V remappingFunction) {Objects.requireNonNull(remappingFunction);Objects.requireNonNull(value);V oldValue get(key);V newValue (oldValue null) ? value :remappingFunction.apply(oldValue, value);if(newValue null) {remove(key);} else {put(key, newValue);}return newValue; }merge() 方法会先调用 Objects.requireNonNull() 方法判断 value 是否为空。 public static T T requireNonNull(T obj) {if (obj null)throw new NullPointerException();return obj; }3. 集合遍历 《阿里巴巴 Java 开发手册》的描述如下 不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式如果并发操作需要对 Iterator 对象加锁。 通过反编译你会发现 foreach 语法底层其实还是依赖 Iterator 。不过 remove/add 操作直接调用的是集合自己的方法而不是 Iterator 的 remove/add方法 这就导致 Iterator 莫名其妙地发现自己有元素被 remove/add 然后它就会抛出一个 ConcurrentModificationException 来提示用户发生了并发修改异常。这就是单线程状态下产生的 fail-fast 机制。 fail-fast 机制多个线程对 fail-fast 集合进行修改的时候可能会抛出ConcurrentModificationException。 即使是单线程下也有可能会出现这种情况上面已经提到过。 相关阅读什么是 fail-fast 。 Java8 开始可以使用 Collection#removeIf()方法删除满足特定条件的元素,如 ListInteger 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] */除了上面介绍的直接使用 Iterator 进行遍历操作之外你还可以 使用普通的 for 循环使用 fail-safe 的集合类。java.util包下面的所有的集合类都是 fail-fast 的而java.util.concurrent包下面的所有的类都是 fail-safe 的。…… 4. 集合去重 《阿里巴巴 Java 开发手册》的描述如下 可以利用 Set 元素唯一的特性可以快速对一个集合进行去重操作避免使用 List 的 contains() 进行遍历去重或者判断包含操作。 这里我们以 HashSet 和 ArrayList 为例说明。 // Set 去重代码示例 public static T SetT removeDuplicateBySet(ListT data) {if (CollectionUtils.isEmpty(data)) {return new HashSet();}return new HashSet(data); }// List 去重代码示例 public static T ListT removeDuplicateByList(ListT data) {if (CollectionUtils.isEmpty(data)) {return new ArrayList();}ListT result new ArrayList(data.size());for (T current : data) {if (!result.contains(current)) {result.add(current);}}return result; } 两者的核心差别在于 contains() 方法的实现。 HashSet 的 contains() 方法底部依赖的 HashMap 的 containsKey() 方法时间复杂度接近于 O1没有出现哈希冲突的时候为 O1。 private transient HashMapE,Object map; public boolean contains(Object o) {return map.containsKey(o); }我们有 N 个元素插入进 Set 中那时间复杂度就接近是 O (n)。 ArrayList 的 contains() 方法是通过遍历所有元素的方法来做的时间复杂度接近是 O(n)。 public boolean contains(Object o) {return indexOf(o) 0; } public int indexOf(Object o) {if (o null) {for (int i 0; i size; i)if (elementData[i]null)return i;} else {for (int i 0; i size; i)if (o.equals(elementData[i]))return i;}return -1; } 5. 集合转数组 《阿里巴巴 Java 开发手册》的描述如下 使用集合转数组的方法必须使用集合的 toArray(T[] array)传入的是类型完全一致、长度为 0 的空数组。 toArray(T[] array) 方法的参数是一个泛型数组如果 toArray 方法中没有传递任何参数的话返回的是 Object类 型数组。 String [] s new String[]{dog, lazy, a, over, jumps, fox, brown, quick, A }; ListString list Arrays.asList(s); Collections.reverse(list); //没有指定类型的话会报错 slist.toArray(new String[0]);由于 JVM 优化new String[0]作为Collection.toArray()方法的参数现在使用更好new String[0]就是起一个模板的作用指定了返回数组的类型0 是为了节省空间因为它只是为了说明返回的类型。详见Arrays of Wisdom of the Ancients 6. 数组转集合 《阿里巴巴 Java 开发手册》的描述如下 使用工具类 Arrays.asList() 把数组转换成集合时不能使用其修改集合相关的方法 它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常。 Arrays.asList()在平时开发中还是比较常见的我们可以使用它将一个数组转换为一个 List 集合。 String[] myArray {Apple, Banana, Orange}; ListString myList Arrays.asList(myArray); //上面两个语句等价于下面一条语句 ListString myList Arrays.asList(Apple,Banana, Orange);JDK 源码对于这个方法的说明 /***返回由指定数组支持的固定大小的列表。此方法作为基于数组和基于集合的API之间的桥梁* 与 Collection.toArray()结合使用。返回的List是可序列化并实现RandomAccess接口。*/ public static T ListT asList(T... a) {return new ArrayList(a); }下面我们来总结一下使用注意事项。 1、Arrays.asList()是泛型方法传递的数组必须是对象数组而不是基本类型。 int[] myArray {1, 2, 3}; List myList Arrays.asList(myArray); System.out.println(myList.size());//1 System.out.println(myList.get(0));//数组地址值 System.out.println(myList.get(1));//报错ArrayIndexOutOfBoundsException int[] array (int[]) myList.get(0); System.out.println(array[0]);//1当传入一个原生数据类型数组时Arrays.asList() 的真正得到的参数就不是数组中的元素而是数组对象本身此时 List 的唯一元素就是这个数组这也就解释了上面的代码。 我们使用包装类型数组就可以解决这个问题。 Integer[] myArray {1, 2, 3};2、使用集合的修改方法: add()、remove()、clear()会抛出异常。 List myList Arrays.asList(1, 2, 3); myList.add(4);//运行时报错UnsupportedOperationException myList.remove(1);//运行时报错UnsupportedOperationException myList.clear();//运行时报错UnsupportedOperationExceptionArrays.asList() 方法返回的并不是 java.util.ArrayList 而是 java.util.Arrays 的一个内部类,这个内部类并没有实现集合的修改方法或者说并没有重写这些方法。 List myList Arrays.asList(1, 2, 3); System.out.println(myList.getClass());//class java.util.Arrays$ArrayList那我们如何正确的将数组转换为 ArrayList ? 1、最简便的方法 List list new ArrayList(Arrays.asList(a, b, c))2、使用 Java8 的 Stream(推荐) Integer [] myArray { 1, 2, 3 }; List myList Arrays.stream(myArray).collect(Collectors.toList()); //基本类型也可以实现转换依赖boxed的装箱操作 int [] myArray2 { 1, 2, 3 }; List myList Arrays.stream(myArray2).boxed().collect(Collectors.toList());3、使用 Guava 对于不可变集合你可以使用ImmutableList类及其of()与copyOf()工厂方法参数不能为空 ListString il ImmutableList.of(string, elements); // from varargs ListString il ImmutableList.copyOf(aStringArray); // from array对于可变集合你可以使用Lists类及其newArrayList()工厂方法 ListString l1 Lists.newArrayList(anotherListOrCollection); // from collection ListString l2 Lists.newArrayList(aStringArray); // from array ListString l3 Lists.newArrayList(or, string, elements); // from varargs4、使用 Apache Commons Collections ListString list new ArrayListString(); CollectionUtils.addAll(list, str);5、 使用 Java9 的 List.of()方法 Integer[] array {1, 2, 3}; ListInteger list List.of(array);
http://www.zqtcl.cn/news/367241/

相关文章:

  • 免费电子版个人简历模板温州快速排名优化
  • 网站修改titlewordpress显示icp备案
  • 中国国际贸易单一窗口登录南京专业网站优化公司
  • 手机网站建设合同wordpress案例分析
  • 深圳做网站什么公司好广州电商小程序开发
  • 郑州高新区做网站的公司如何欣赏网站
  • 网站做维恩图做网站的公司杭州
  • 柳州公司网站制作公司wordpress 网店
  • 网站增加栏目费用在网站开发中如何设置登录
  • 怎样用php做网站百度推广联系人
  • 怎么建立手机网站如何申请公司域名
  • 营销型网站怎么收费邓州企业网站
  • 北京建设官方网站邢台网站维护
  • 新余网站制作网站开发工资咋样
  • 襄阳网站建设外包自己做一个网站
  • 网站域名的后缀wordpress文章归类
  • 查询企业信息的官方网站大连建设网站公司
  • 网站建设 全包专业建设规划方案模板
  • 做网站好还是做微信小程序好浙江建设工程造价信息网站
  • 网站开发怎么报价推广普通话手抄报模板可打印
  • 好的平面网站模板企业网站建设浩森宇特
  • 做网站通过什么赚钱吗公司建设网站的费用
  • 如何做建筑一体化的网站视频网站开发应用到哪些技术
  • 巴中微信网站建设竞价托管一般多少钱
  • 彩票网站开发 违法股票网站排名哪个好
  • 宝格丽网站建设哈尔滨网站建设王道下拉強
  • 烟台网站建设的公司世界500强企业排名2021
  • 网络营销做得比较成功的案例吴中seo网站优化软件
  • 怎么设立网站美区下载的app怎么更新
  • 建立网站ppt做酒店网站所用到的算法