黑马程序员---Java中的几个新特性

----------- android培训java培训、java学习型技术博客、期待与您交流! ------------

Collections:为集合提供了很多功能方法,此类不需要创建对象,内部提供的方法都是静态的。这些静态方法有:

1Collections.sort(list); //集合进行元素的自然排序。

2Collections.sort(list,new ComparatorByLen()); //按指定的比较器方法排序。

例:class ComparatorByLen implements Comparator<String>

{

public int Compare(String s1,String s2)

{

int temp = s1.length()-s2.length();

return temp==0?s1.compareTo(s2):temp;

}

}

3Collections.max(list); //返回list中字典顺序最大的元素。

4int index = CollectionsbinarySearch(list,”aa”); //二分查找,返回角标。

5Collections.reverseOrder(); //逆向反转排序。

6Collections.shuffle(list); //随机对list中的元素进行位置的置换。

 

CollectionCollections的区别:

Collections是个java.util下的类,是针对集合类的一个工具类,提供一系列的静态方法,实现对集合的查找、排序、替换、线程安全化(将非线程同步的集合转换成同步的)等操作。

Collection是个java.util下的接口,它是各种集合结构接口的父接口,继承于它的接口主要有SetList,提供了关于集合的一些操作,如插入、删除、判断及遍历等。

 

将集合由非同步转成同步的方法:

原理:定义一个类,将集合所有的方法加同一把锁后返回。

Collections中的XX synchronizedXX(XX);

如:List synchronizedList(list);

Map synchronizedMap(map);

 

 

Arrays:用于操作数组对象的工具类,里面都是静态方法。

1asList方法:将数组转换成list集合。

String[] arr = {“czbk”,”hm”,”jy”};

List<String> list = Arrays.asList(arr); //arr数组转成list集合。

注意:数组是固定长度的,不可以使用集合对象增加或者删除等,会改

变数组长度的功能方法。(局限性)

如果数组中存储的是引用数据类型,直接作为集合的元素可以直接用集合方法操作。

如果数组中存储的是基本数据类型,asList会将数组实体作为集合元素存在。

2toArray():集合转换成数组。

如果给toArray传递的指定类型的数据长度小于了集合的size,那么,toArray方法会自定再创建一个该类型的数据,长度为集合的size

如果给toArray传递的指定类型的数据长度大于了集合的size,那么,toArray方法就不会创建数组,直接使用该数组即可,并将集合中的元素存储到数组中,其他为存储元素的位置默认值为null

所以,在传递给指定类型数据时,最好的方式就是指定的长度和size相等的数组。

将集合转换成数组后,限定了对集合中的元素进行增删操作,只要获取这些元素即可。

 

 

增强for循环:foreach语句,foreach简化了迭代器。

格式:

/*

增强了for循环括号里面写两个参数,第一个是声明一个变量,第二个

就是需要迭代的容器。

*/

for(元素类型变量名 : Collection集合&数组)

{

........

}

高级for循环和传统for循环的区别:

高级for循环在使用时,必须要明确遍历的目标。这个目标可以是Collection集合或者数组。如果遍历Collection集合,在遍历过程中还需要对元素进行操作,比如删除,需要使用迭代器;如果遍历数组,还需要对数组元素进行操作,建议用传统for循环,因为传统for循环可以定义角标,可以通过角标来操作元素。如果只为了遍历获取,可以简化成高级for循环。

高级for循环不可以遍历map集合,但可以将map转成set后再使用foreach语句。

几个小问题:

1,对存储对象的容器进行迭代。数组、Collectionmap

2,增强for循环迭代数组:

String[] arr = {“c”,”z”,”b”,”k”};

for(String s : arr)

{

System.out.println(s);

}

3,单列集合Collection

List list = new ArrayList();

List.add(“czbk”);

for(Object obj : list)

{

String s = (String)obj;

System.out.println(s);

}

4,双列集合Map

Map map = new HashMap();

map.put(“h”,”m”);

//传统方式。

Set entrys = map.entrySet();//获得所有的键值对Entry对象

Iterator it = entrys.iterator();//迭代所有的entry

while(it.hasNext())

{

Map.Entry entry = (Entry)it.next();

String key = (String)entry.getKey();

String value= (String)entry.getvalue();

System.out.println(key+”=”+value);

}

//增强for循环迭代。

for(Object obj : map.entrySet())

{

Map.Entry entry = (Entry)obj;

System.out.println(entry.getKey()+”=”+entry.getValue());

}

5,集合迭代器注意的问题:在迭代集合的过程中,不能对集合进行增删操作,可以用迭代器的方法进行操作。

6,增强for循环注意的问题:在使用增强for循环时,不能对元素进行赋值。

int[] arr = {1,2,3};

for(int num : arr)

{

num = 0;

}

System.out.println(arr[1]);

 

 

可变参数(...):用到函数上,当要操作的同一个类型元素个数不确定的时候,可以用这个方式,这个参数可以接受任意个数的同一类型的数据。

与之前接收数组的区别:

之前定义数组类型,需要创建一个数组对象,再将这个数组对象作为参数传递给函数。现在,直接将数组中的元素作为参数传递即可。底层其实就是将这些元素进行数组的封装,而这个封装动作是在底层完成的,被隐藏了,所以简化了用户的书写,少了调用者定义数组的动作。

若在参数列表中使用可变参数,那么可变参数必须定义在参数列表结尾。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值