JDK1.5之后的新特性
主要从以下三个方法提高: 提高效率、简化书写、提高安全性
(一). 增强for循环
1)格式:for(数据类型 元素名:被遍历的集合Collection或数组)
2)遍历集合中元素
2.1)for循环对集合进行遍历:只能获取集合元素,不能对集合进行操作
2.2)迭代器除了遍历,还可以进行remove集合中元素的操作;如果用ListIterator,还可以在遍历过程中对集合元素进行增删改查操作。
3)传统for和高级for的区别?
3.1)高级for有一个局限性,就是必须有被遍历的目标。
3.2)建议在遍历数组的时候,还是希望用传统的for循环。
示例1:
import java.util.*;
class ForEach
{
public static void main(String args[])
{
ArrayList<String> al = new ArrayList<String>();
al.add("sfdg");
al.add("fdg");
al.add("dg");
for(String s:al)
{
s = "kk";//此处并未改变集合中元素的值。
System.out.println(s);
}
System.out.println(al);
Iterator<String> it = al.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
int[] arr = {3,5,1};
for(int x=0;x<arr.length;x++)//使用一般for循环可以对数组脚标进行操作。
{
System.out.println(arr[x]);
}
for(int i:arr)//不能对数组脚标进行操作。
{
System.out.println(i);
}
HashMap<Integer,String> hm = new HashMap<Integer,String>();
hm.put(1,"aaa");
hm.put(2,"bbb");
hm.put(3,"ccc");
Set<Integer> keySet = hm.keySet();
for(Integer key:keySet)
{
System.out.println(key+":"+hm.get(key));
}
for(Map.Entry me:hm.entrySet)
{
System.out.println(me.getKey()+":;:"+me.getValue());
}
}
}
(二). 方法的可变参数
1)格式:方法名(参数类型… arr)
2)注意:如果还有其他类型的参数,可变参数放在参数列表的最后。
show("heheh",3,32,4,3,4);
public static void show(String str,int...arr)
{
System.out.println(arr.length+str);
}
如果是这样,则会报错。
show(3,32,4,3,4,"heheh");
public static void show(int...arr,String str)
{
System.out.println(arr.length+str);
}
(三). 静态导入
1)格式:import static java.util.Arrays.*
2)注意点:
2.1)当类名重名时,需要指定具体的包名
2.2)当方法名重名时,需要指定方法具体所属的对象或者类。
import java.util.*;
class StaticImport
{
public static void main(String args[])
{
int[] arr = {1,3,4};
Arrays.sort(arr);
int index = Arrays.binarySearch(arr,"3");
System.out.println("indext = "+index);
System.out.println(Arrays.toString(arr));
}
}
以上代码利用静态导入简化代码,如下:
import static java.util.Arrays.*;
import static java.lang.System.*;
class StaticImport
{
public static void main(String args[])
{
int[] arr = {1,3,4};
sort(arr);
int index = binarySearch(arr,"3");
out.println("indext = "+index);
out.println(Arrays.toString(arr));
}
}
注: 此处的out.println(Arrays.toString(arr));换成out.println(toString(arr));则出错。
原因:因为此处首先引用的是Object类的toString()方法,此方法没有参数。所以此处Arrays类和Object类存在方法名一样的冲突,因此需要写上类名Arrays。
(四). StringBuilder
1)StringBuffer是线程同步,而StringBuilder是线程不同步。
2)StringBuilder是StringBuffer的升级版,所有的用法都一样。
2)以后开发,建议使用StringBuilder,提供效率。