黑马程序员--Collections工具类

来源:互联网 发布:淘宝网网购流程图 编辑:程序博客网 时间:2024/05/21 08:43

 

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

                                                                                                  Collections工具类


面试题:Collections和Collection的区别?
 
特点:
 Collections里面的方法都是静态的方法(Static)
对集合进行自然排序方法:
 Collection.sort(集合);
返回集合中最大的对象:
 Collection.max(); 
 Collection.max(长度);返回集合中长度最大的那个对象
用binarySearch对集合进行二分查找:
 Collection.binarySearch();
 只要用binarySearch必须是有序集合
 返回:如果搜索键包含在列表中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。插入点 被定义为将键插入列表的那一点:即第一个大于此键的元素索引,如果列表中的所有元素都小于指定的键,则为 list.size()。注意,这保证了当且仅当此键被找到时,返回的值将 >= 0。

fill(List<? super T> list,T obj)使用指定元素替换指定列表中的所有元素
fill方法可以将list集合中所有元素替换成指定元素
练习:将集合众部分元素替换成指定元素?

replaceAll(List<T> list,T oldVal,T newVal)使用另一个值替换列表中出现的所有某一指定值
Collection.replaceAll();
反转(头变尾,尾变头):
 Collections.reverse(集合);
reverseOrder
 返回一个比较器,它强行逆转指定比较器的顺序。
 
synchronizedList(List<T> list)
 返回指定列表支持的同步(线程安全的)列表
synchronizedMap(Map<K,V> m)
 返回指定映射支持的同步(线程安全的)映射
synchronizedSet(Set<T> s)
 返回指定set支持的同步(线程安全的)set
Collections.sort(list,脚标1,脚标2)
 返回,将脚标1,和脚标2的元素调换位置
Collections.shuffle()
 把集合中的元素,从新按照随机的方式,进行排放,
 例如:扑克54章,可以用此方法模拟洗牌,因为每次都是随机的将牌进行排序
       或,色子,模拟支色子;


Arrays:用户操作数组的工具类
 里面都是静态方法。
 asList:将输入变成list集合
  String[] arr={"aaa","bb","c"};
  //把数组变成list集合有什么好处?
  可以使用集合的思想和方法,来操作数组中的元素。
  注意:将数组变成集合,不可以使用集合的增删方法。因为数组的长度是固定的
  可以用contains. get, indexOf(),subList()
  List<String> ls=Arrays.asList(arr);
  判断是否存在某元素
  System.out.print("contains"+ls.contains("cc"))
  
  int[] nums={2,3,5};
  List<int[]> li=Arrays.asList(nums);
  如果数组中的元素都是对象。那么变成集合时,数组中德元素就直接转成集合中德元素
  如果数组中的元素都是基本数据类型,那么会将该数组作为集合中的元素存在

集合变数组:
 Collection接口中的toArray();  返回:Object[]
  返回包含此collection种所有元素的数组
 另一个toArray(I[] a);   返回<T>  T[]
  返回包含此collection中所有元素的数组,返回数组的运行时类型与指定数组的运行时类型相同
 指定类型的数组要定义多长呢?
  当指定类型的数组长度小于了集合的size,那么该方法内部会创建一个新的数组,长度为集合的size。
  当指定类型的数组长度大于了集合的size,就不会新创建了数组,而是使用传递进来的数组。
  所以创建一个刚刚好的数组最优。
  2.为什么要将集合变数组?
  为了限定对元素的操作。不需要进行增删了。

集合(增强for循环)
 高级for循环:就是foreach循环
 格式:for(类型 变量名: 被遍历的集合())
 对集合进行遍历,只能获取元素,但不能对集合进行操作
 迭代器:除了遍历,还可以进行remove集合中的动作
 如果使用ListIterator,还可以在遍历过程中对集合进行增删改查的操作

 支持迭代器的集合,都支持高级for循环

 传统for循环和高级for有什么区别呢?
  高级for有一个局限性,必须有被遍历的目标,
  建议在遍历数组的时候,还是希望


集合(可变参数)
 就是数组参数的简写形式,不用每次都手动的建立数组对象,只要将操作的元素作为参数传递即可
 隐式将这些参数封装成了数组。
方法的可变参数在使用时注意:可变参数一定要定义在参数列表的最后面
show("haha",2,3,5)
public static void show(String str,int...arr)  可以,意义,先将“haha”传入数组,将后面的数字全部传入到数组当中去
public static void show(int...arr,String str)  就不可以,因为它会将所有元素传入到数组当中,2,3,5,"haha"但是haha是字符串不能传入到int 数组中
 

集合(静态导入)
 import static java.util.Arrays.*;//导入的时Arrays这个类中的所有静态成员
当类名重名时,需要指定具体的报名。
当方法重名时,需要指定具备所属的对象或者类

import static java.lang.System.*;//倒入了Sytem类中所有静态成员

当用到Collections中的方法时,每次都要打Collections.只要倒入import java.util.Arrays.*;就可以
因为Collections里面的方法都是静态方法倒入包之后直接用就可以了


 

 

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

 

原创粉丝点击