Java知识点拾起(自用)(更新中)

循环中使用append的问题

1.循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。
说明:下例中,反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象, 然后进行 append 操作,最后通过 toString 方法返回 String 对象,造成内存资源浪费

	String str = "start";      
	for (int i = 0; i < 100; i++) {          
		str = str + "hello";
	}

final 变量重构

2.避免上下文重复使用一个变量,使用 final 描述可以强制重新定义一个变量,方便更好地进行重构。

循环中使用remove、add的问题

3.【强制】不要在foreach循环里进行元素的remove/add操作。remove元素请用Iterator方式,如果并发操作,需要对Iterator对象加锁

	List<String> list = new ArrayList<>();      
	list.add("1");      
	list.add("2");    
	Iterator<String> iterator = list.iterator();  
	while (iterator.hasNext()) {              
		String item = iterator.next();                       
		if (删除元素的条件) {                              
			iterator.remove();                 
		}      
	}

集合初始化问题

4.集合初始化时,指定集合初始值大小。 说明:HashMap 使用 HashMap(int initialCapacity) 初始化。 正例:initialCapacity = (需要存储的元素个数 / 负载因子) + 1。注意负载因子(即loader factor)默认为 0.75,如果暂时无法确定初始值大小,请设置为 16(即默认值)
HashMap<String, Object> hm = new HashMap(16);

遍历Map kv

5.使用 entrySet 遍历 Map 类集合 KV,而不是 keySet 方式进行遍历。
说明:keySet 其实是遍历了 2 次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出 key 所对应的 value。
而 entrySet 只是遍历了一次就把 key 和 value 都放到了 entry 中,效率更高。
如果是 JDK8,使用 Map.foreach 方法。
正例:values()返回的是 V 值集合,是一个 list 集合对象;keySet()返回的是 K 值集合,是 一个 Set 集合对象;entrySet()返回的是 K-V 值组合集合。

jdk8 遍历map forEach

	hm.forEach((key, value) -> {
	 	System.out.println(key + ":" + value);
	});

HashMap key 可以为Null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值