广东省特色专业建设网站郑州seo实战培训
- 作者: 五速梦信息网
- 时间: 2026年04月20日 11:05
当前位置: 首页 > news >正文
广东省特色专业建设网站,郑州seo实战培训,网站开发和设计实训,wordpress joomla 比较集合使用注意事项总结 集合判空 判断所有集合内部的元素是否为空#xff0c;使用 isEmpty() 方法#xff0c;而不是 size()0 的方式 这是因为 isEmpty() 方法的可读性更好#xff0c;并且时间复杂度为 O(1)。 集合转 Map 在使用 java.util.stream.Collectors 类的 toMap()…集合使用注意事项总结 集合判空 判断所有集合内部的元素是否为空使用 isEmpty() 方法而不是 size()0 的方式 这是因为 isEmpty() 方法的可读性更好并且时间复杂度为 O(1)。 集合转 Map 在使用 java.util.stream.Collectors 类的 toMap() 方法转为 Map 集合时一定要注意当 value 为 null 时会抛 NPE 异常。 集合遍历 不要在 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 的。… 集合去重 可以利用 Set 元素唯一的特性可以快速对一个集合进行去重操作避免使用 List 的 contains() 进行遍历去重或者判断包含操作。 两者的核心差别在于 contains() 方法的实现。 HashSet 的 contains() 方法底部依赖的 HashMap 的 containsKey() 方法 集合转数组 使用集合转数组的方法必须使用集合的 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]);new String[0]就是起一个模板的作用指定了返回数组的类型0 是为了节省空间因为它只是为了说明返回的类型。 数组转集合 使用工具类 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、手动实现工具类 //JDK1.5 static T ListT arrayToList(final T[] array) {final ListT l new ArrayListT(array.length);for (final T s : array) {l.add(s);}return l; }Integer [] myArray { 1, 2, 3 }; System.out.println(arrayToList(myArray).getClass());//class java.util.ArrayList2、最简便的方法 List list new ArrayList(Arrays.asList(a, b, c))3、使用 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());4、使用 Guava 对于不可变集合你可以使用ImmutableListopen in new window类及其of()open in new window与copyOf()open in new window工厂方法参数不能为空 ListString il ImmutableList.of(string, elements); // from varargs ListString il ImmutableList.copyOf(aStringArray); // from array对于可变集合你可以使用Listsopen in new window类及其newArrayList()open in new window工厂方法 ListString l1 Lists.newArrayList(anotherListOrCollection); // from collection ListString l2 Lists.newArrayList(aStringArray); // from array ListString l3 Lists.newArrayList(or, string, elements); // from varargs5、使用 Apache Commons Collections ListString list new ArrayListString(); CollectionUtils.addAll(list, str);6、 使用 Java9 的 List.of()方法 Integer[] array {1, 2, 3}; ListInteger list List.of(array);对象类型、包装类型、引用类型的区别 对象类型Object Type是指使用关键字 new 创建的对象类型如 String、Integer 等。对象类型是一种引用类型即这些对象存储在【堆内存】中并由引用变量指向。包装类型Wrapper Type是 Java 提供的一种将基本数据类型转换为对象类型的机制如 int 对应的包装类型是 Integer。包装类型也是对象类型的一种。引用类型Reference Type是指使用引用变量来引用的类型包括对象类型和数组类型。引用类型的变量存储的是一个内存地址指向实际存储数据的位置。引用类型和基本数据类型的区别在于基本数据类型的变量直接存储数据本身而引用类型的变量存储的是内存地址。 总结来说对象类型和包装类型都是引用类型的一种都可以使用 new 创建的对象 但包装类型是将基本数据类型转换为对象类型而对象类型则是直接使用类名创建的对象而引用类型则是指使用引用变量来引用的类型包括对象类型和数组类型。
相关文章
-
广东省建设厅网站怎么查询证件凡科网模板
广东省建设厅网站怎么查询证件凡科网模板
- 技术栈
- 2026年04月20日
-
广东省建设交易中心网站首页手机免费网站建设哪家公司好
广东省建设交易中心网站首页手机免费网站建设哪家公司好
- 技术栈
- 2026年04月20日
-
广东省建设监理协会证书查询网站自动化优化系统网站建设
广东省建设监理协会证书查询网站自动化优化系统网站建设
- 技术栈
- 2026年04月20日
-
广东省住房和城乡建设厅公众网站网站建设哪家服务态度好
广东省住房和城乡建设厅公众网站网站建设哪家服务态度好
- 技术栈
- 2026年04月20日
-
广东省住房和城乡建设厅网站 粤建网工业设计最吃香的专业
广东省住房和城乡建设厅网站 粤建网工业设计最吃香的专业
- 技术栈
- 2026年04月20日
-
广东石油化工建设集团网站网站怎么自己做优化
广东石油化工建设集团网站网站怎么自己做优化
- 技术栈
- 2026年04月20日
