国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > php教程 > 收集的java问题和技巧

收集的java问题和技巧

来源:程序员人生   发布时间:2016-11-17 09:42:11 阅读次数:2241次

下面的java编程的问题和技能,部份是自己遇到的问题和总结,部份是自己在网上看到的成心思的问题。本篇文章内容

将会不断的对自己搜集的问题和技能进行更新。


1).List遍历进程中删除元素推荐做法


使用Iterator遍历,但是不用list来remove。代码以下:

List<Integer> list = new ArrayList<Integer>(); list.add(1); list.add(2); list.add(2); list.add(3); list.add(4); System.out.println("----------list大小1:--"+list.size()); Iterator<Integer> it = list.iterator(); while(it.hasNext()){ Integer item = it.next(); if (2 == item) { it.remove(); } System.out.println(item); } System.out.println("最后输出=" + list.toString());

运行结果:

----------list大小1:-⑸ 1 2 2 3 4 最后输出=[1, 3, 4]


2.Java是“援用传递”还是“值传递”?


很多人认为Java是援用传递;其实Java1直是值传递。很多人把指针叫做援用,这些援用也是通过值传递的。


3.遍历HashMap中元素的最好方法是甚么?


我知道的遍历方式有下面两种:


方式1:


Iterator it = mp.entrySet().iterator(); while (it.hasNext()) { Map.Entry entity = (Map.Entry)it.next(); System.out.println(entity.getKey() + " = " + entity.getValue()); it.remove(); // 避免 ConcurrentModificationException } }


方式2:


for (String key : mp.keySet()) { System.out.println(mp.get(key)); }


经过测试第1种方式比第2种方式效力高


4.1个关于Java += 操作符的问题

i += j;很多人以为i = i + j是它的简写,但事实不是。以下例子:


public class Test1 { public static void main(String[] args) { int i = 1; long j = 10; i+=j; i=i+j; } }


i=i+j这1行会提示Type mismatch: cannot convert from long to int(以下图)说明 i+=j不是i=i+j的简写。


其实像E1 op= E2 型的复合赋值表达式等价于 E1 = (T)((E1) op (E2)),这里 T 是 E1 的类型,不同的是 E1 只计算1次,op是操作,

所以i+=j可以翻译成i=(int) (i+j)。


 5.null属于哪一种数据类型

在Java中,null本身不是对象,也不是Objcet的实例。那末他属于哪一种数据类型呢?其实java有3种类型:基本类型、援用类和null类型。

null本身虽然能代表1个不肯定的对象。但就null本身来讲,它不是对象,也不是java.lang.Object的实例。null是1种特殊的type,但是你不能声

明1个变量为null类型,null type的唯1取值就是null。null只能赋给援用类型变量。


6.string不可以将null赋给基本类型变量


1).字符串池是方法区中的1部份特殊存储。当1个字符串被被创建的时候,首先会去这个字符串池中查找,如果找到,直接返回对该字符

串的援用。如果字符串可变的话, 当两个援用指向指向同1个字符串时,对其中1个做修改就会影响另外1个。


2).缓存Hashcode


java中常常会用到字符串的哈希码(hashcode)。例如,在HashMap中,字符串的不可变能保证其hashcode永久保持1致,这样就能够避

免1些没必要要的麻烦。这也就意味着每次在使用1个字符串的hashcode的时候不用重新计算1次,这样更加高效。


3).使其他类的使用更加便利:如果字符串可以被改变,那末将有可能违背Set的设计原则,由于有些场景如Set要求其中的元素不可以重复的;


4).安全性:String被广泛的使用在其他Java类中充当参数。比如网络连接、打开文件等操作。如果字符串可变,那末类似操作可能致使安全问题;


5).不可变对象天生就是线程安全的:由于不可变对象不能被改变,所以他们可以自由地在多个线程之间同享。不需要任何同步处理。


String 被设计成不可变的主要目的是为了安全和高效。所以,使 String 是1个不可变类是1个很好的设计。



注:部份内容参考于网上资料,更多内容等待更新中.....

---------------------------------------------------------------------------版权声明-----------------------------------------------------------------------------------------------


博客地址:http://blog.csdn.net/mr_smile2014





生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生