String池与iterator对集合的迭代
一、静态导入
1.
import
out.println("haha");
2.
import static java.lang.Math.*;
int num = abs(-10);
二、基本数据类型的包装类
1.
2.
3.
①String tmp = "a" + "b" + "c";
②String tmp = null;
tmp+= "a";
tmp+= "b";
tmp+= "c";
③String tmp = null;
StringBuffer buf = new StringBuffer();
buf.append("a");
buf.append("b");
buf.append("c");
tmp = buf.toString();
有些Java程序员在任意的用这三种方法的任一种,无视它们的区别。有些程序员知道第三种方法好,一直在用而不知其为什么好,以至于作为经验教条的传授给Java新手。真正的答案是什么呢?让我们揭开 String 和StringBuffer 的封装面纱,看看它的内部实现。
在Java中的String Class是一个不可变final类,所有对一个Sting Object的改变都会导致一个新的String Object的生成。那么对tmp+=a中+符号的实现呢?
如果你注意一下StringBuffer的Javadoc会发现,JDK对它的实现是:tmp=(new StringBuffer()。append(tmp)。append("a"))。toSting();
这样我们发现②这种方法在隐性生成了一个StringBuffer Object乘3和一个String Object 乘3就是六个object 的资源耗费。(还不包括String Class和StringBuffer Class内部使用的Char[])。
而方法③只用了两个。也许有些程序员会对这些耗费不以为然,的确也是,不过在一些场景下它会成为perfamence的瓶颈。
再回头看看①这种方法,它会被Java编译器编译为:tmp=(new StringBuffer()。append("a")。append("b")。append("c"))。to String();我们发现做的和③方法是同样的事。
三、增强for循环
1.
2.
3.
String [] arr = {"a", "b", "c"};
//
for(int i=0; i<arr.length; i++) {
}
System.out.println("-------------------------------------");
//
//
//
// for循环会循环容器的length次,
for(String s : arr) {
}
4.
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("ccc");
//
//
for(Iterator iter=list.iterator(); iter.hasNext(); ) {
}
System.out.println("--------------------------------");
//
for(Object obj : list) {
}
5.
Map map = new HashMap();
map.put("a", "aaa");
map.put("b", "bbb");
map.put("c", "ccc");
//
// 1.
Set keys = map.keySet();
// 2.迭代keys获得所有的key
Iterator iter = keys.iterator();
while(iter.hasNext()) {
}
System.out.println("---------------------------------");
//
// 1.获得所有的键值对Entry对象
Set entrys = map.entrySet();
// 2.迭代出所有的entry
iter = entrys.iterator();
while(iter.hasNext()) {
}
System.out.println("-------------------------------------");
System.out.println("增强for循环迭代,");
//
//
//
// Iterable是jdk5中新定义的接口,就一个方法iterator方法
//
// java有这样的限定是因为增强for循环内部还是用迭代器实现的
//
for(Object obj : map.entrySet()) {
}
6.
//
@Test
public void test4() {
// 1 2 4
}
@Test
public void test5() {
}
7.
//在使用增强for循环时,不能对元素进行赋值
int[] arr = {1,2,3};
for(int num : arr) {
}
System.out.println(arr[1]);