收集的java问题和技巧

下面的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:--5

1

2

2

3

4

最后输出=[1, 3, 4]


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


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


3.遍历HashMap中元素的最佳方法是什么?


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


方式一:


  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
    }
}


方式二:


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


经过测试第一种方式比第二种方式效率高


4.一个关于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这一行会提示Type mismatch: cannot convert from long to int(如下图)说明 i+=j不是i=i+j的简写。


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

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


 5.null属于哪种数据类型

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

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

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


6.string不可以是基本类型变量


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

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


2).缓存Hashcode


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

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


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


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


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


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



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

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


版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:http://blog.csdn.net/mr_smile2014




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值