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

你可能感兴趣的:(Java)