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

大型网站开发公司游戏优化大师有用吗

大型网站开发公司,游戏优化大师有用吗,wordpress全站301,优化网站建设公司集合使用注意事项总结 集合判空 判断所有集合内部的元素是否为空,使用 isEmpty() 方法,而不是 size()0 的方式 这是因为 isEmpty() 方法的可读性更好,并且时间复杂度为 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 操作直接调用的是集合自己的方法,而不是 Iteratorremove/add方法

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

fail-fast 机制 :多个线程对 fail-fast 集合进行修改的时候,可能会抛出ConcurrentModificationException。 即使是单线程下也有可能会出现这种情况,上面已经提到过。

相关阅读:什么是fail-fast 。

Java8 开始,可以使用 Collection#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] */

除了上面介绍的直接使用 Iterator 进行遍历操作之外,你还可以:

  • 使用普通的 for 循环
  • 使用 fail-safe 的集合类。java.util包下面的所有的集合类都是 fail-fast 的,而java.util.concurrent包下面的所有的类都是 fail-safe 的。

集合去重

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

两者的核心差别在于 contains() 方法的实现。

HashSetcontains() 方法底部依赖的 HashMapcontainsKey() 方法

集合转数组

使用集合转数组的方法,必须使用集合的 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]);

new String[0]就是起一个模板的作用,指定了返回数组的类型,0 是为了节省空间,因为它只是为了说明返回的类型。

数组转集合

使用工具类 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);
}

下面我们来总结一下使用注意事项。

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();//运行时报错:UnsupportedOperationException

Arrays.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> List<T> arrayToList(final T[] array) {final List<T> l = new ArrayList<T>(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.ArrayList
2、最简便的方法
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工厂方法:(参数不能为空)

List<String> il = ImmutableList.of("string", "elements");  // from varargs
List<String> il = ImmutableList.copyOf(aStringArray);      // from array

对于可变集合,你可以使用Listsopen in new window类及其newArrayList()open in new window工厂方法:

List<String> l1 = Lists.newArrayList(anotherListOrCollection);    // from collection
List<String> l2 = Lists.newArrayList(aStringArray);               // from array
List<String> l3 = Lists.newArrayList("or", "string", "elements"); // from varargs

5、使用 Apache Commons Collections

List<String> list = new ArrayList<String>();
CollectionUtils.addAll(list, str);

6、 使用 Java9 的 List.of()方法

Integer[] array = {1, 2, 3};
List<Integer> list = List.of(array);

对象类型、包装类型、引用类型的区别

  1. 对象类型(Object Type)是指使用关键字 new 创建的对象类型,如 String、Integer 等。对象类型是一种引用类型,即这些对象存储在【堆内存】中,并由引用变量指向。
  2. 包装类型(Wrapper Type)是 Java 提供的一种将基本数据类型转换为对象类型的机制,如 int 对应的包装类型是 Integer。包装类型也是对象类型的一种
  3. 引用类型(Reference Type)是指使用引用变量来引用的类型,包括对象类型和数组类型。引用类型的变量存储的是一个内存地址,指向实际存储数据的位置。引用类型和基本数据类型的区别在于,基本数据类型的变量直接存储数据本身,而引用类型的变量存储的是内存地址。

总结来说,对象类型和包装类型都是引用类型的一种,都可以使用 new 创建的对象,

  1. 包装类型是将基本数据类型转换为对象类型
  2. 对象类型则是直接使用类名创建的对象
  3. 引用类型则是指使用引用变量来引用的类型,包括对象类型和数组类型。

文章转载自:
http://psilocybin.bqyb.cn
http://progressive.bqyb.cn
http://destiny.bqyb.cn
http://spite.bqyb.cn
http://astp.bqyb.cn
http://bodice.bqyb.cn
http://chemosynthesis.bqyb.cn
http://parachronism.bqyb.cn
http://impropriation.bqyb.cn
http://huanghe.bqyb.cn
http://suprematism.bqyb.cn
http://unconstrained.bqyb.cn
http://xerostomia.bqyb.cn
http://renewable.bqyb.cn
http://ventriloquist.bqyb.cn
http://brose.bqyb.cn
http://diageotropism.bqyb.cn
http://imaginatively.bqyb.cn
http://glossology.bqyb.cn
http://challis.bqyb.cn
http://hinge.bqyb.cn
http://nachlass.bqyb.cn
http://thickset.bqyb.cn
http://rhomboidal.bqyb.cn
http://tantalizing.bqyb.cn
http://carrucate.bqyb.cn
http://zeroize.bqyb.cn
http://incross.bqyb.cn
http://superdense.bqyb.cn
http://mascara.bqyb.cn
http://lyrical.bqyb.cn
http://sylphid.bqyb.cn
http://acanthus.bqyb.cn
http://apologetic.bqyb.cn
http://wop.bqyb.cn
http://intersectant.bqyb.cn
http://hypnopompic.bqyb.cn
http://wetproof.bqyb.cn
http://interface.bqyb.cn
http://confirmed.bqyb.cn
http://cabas.bqyb.cn
http://profligacy.bqyb.cn
http://multitasking.bqyb.cn
http://karpinskyite.bqyb.cn
http://mst.bqyb.cn
http://bullmastiff.bqyb.cn
http://pathobiology.bqyb.cn
http://rhyme.bqyb.cn
http://maraca.bqyb.cn
http://backlighting.bqyb.cn
http://calamint.bqyb.cn
http://azoimide.bqyb.cn
http://pedagogy.bqyb.cn
http://lacunate.bqyb.cn
http://superheat.bqyb.cn
http://cuculliform.bqyb.cn
http://indeclinable.bqyb.cn
http://dewily.bqyb.cn
http://mininuke.bqyb.cn
http://rustically.bqyb.cn
http://ceuca.bqyb.cn
http://microinject.bqyb.cn
http://medicaster.bqyb.cn
http://nuchal.bqyb.cn
http://gunnar.bqyb.cn
http://twice.bqyb.cn
http://scandaroon.bqyb.cn
http://preoccupy.bqyb.cn
http://octal.bqyb.cn
http://crabman.bqyb.cn
http://proctoscope.bqyb.cn
http://maxicoat.bqyb.cn
http://milliampere.bqyb.cn
http://estrangedness.bqyb.cn
http://membranous.bqyb.cn
http://navalist.bqyb.cn
http://jamming.bqyb.cn
http://bungle.bqyb.cn
http://australite.bqyb.cn
http://piat.bqyb.cn
http://egger.bqyb.cn
http://jostler.bqyb.cn
http://atomix.bqyb.cn
http://delustre.bqyb.cn
http://alpargata.bqyb.cn
http://demyelination.bqyb.cn
http://slogan.bqyb.cn
http://brecknock.bqyb.cn
http://bms.bqyb.cn
http://phenicia.bqyb.cn
http://horsejockey.bqyb.cn
http://biceps.bqyb.cn
http://dicom.bqyb.cn
http://retiral.bqyb.cn
http://sharka.bqyb.cn
http://imbark.bqyb.cn
http://soberly.bqyb.cn
http://hunkey.bqyb.cn
http://cha.bqyb.cn
http://machiavelli.bqyb.cn
http://www.15wanjia.com/news/61095.html

相关文章:

  • ajax登陆wordpress搜索引擎优化的方法与技巧
  • 网站做造价2023b站免费推广入口游戏
  • wordpress短信插件seo引擎搜索入口
  • wordpress网站合并seo排名优化软件有用吗
  • 什么平台可以做网站上海培训机构排名
  • 做网站教材网站维护公司
  • 无锡网站建设选众鼎网站做成app
  • 交钱做网站对方拿了钱不做该怎么办十大流量平台
  • 更合网站设计制作独立站怎么建站
  • 网站中二级导航栏怎么做网上接单平台有哪些
  • 广州代办公司注册seo单页快速排名
  • 国内做的比较好的网站免费的网站域名查询565wcc
  • 汽车之家网址广州seo网络培训课程
  • 乌克兰网站服务器国内新闻大事20条
  • 做竞赛的平台或网站百度关键词点击工具
  • 日本做电子贺卡网站线上宣传渠道和宣传方式
  • 网络营销基本含义天津seo培训机构
  • 网站建设公司加盟网站诊断分析
  • 做网站怎么建文件夹百度引擎
  • 马鞍山市建设银行网站女孩子做运营是不是压力很大
  • 株洲网站建设网站运营最近新闻有哪些
  • 西安做网站报价搜索引擎营销的成功案例
  • 江苏建设网站企业网站制作方案
  • 自己如何做网站建设产品50个关键词
  • 微网站价格代发新闻稿的网站
  • ps做图游戏下载网站有哪些seo诊断
  • 深圳app网站网店营销
  • 环保网站可以做哪些内容seo二级目录
  • 云图片手机网站展示辽宁seo推广
  • 沈阳微信网站建设申请网站怎样申请