您的位置:首页 > 编程语言 > Java开发

java基础整理十七(常用工具类)

2013-10-23 18:02 417 查看
第十七天

集合框架的工具类:

Collections:方法都是静态的无需对象直接类名调用

public static<T extends Comparable<? super T>> void sort(List<> list)为了能用此功能泛型限定为必须是Comparable子类,这样才能具备比较性

Collections.sort()集合元素自然排序.

Collections.binarySearch(list,"tt");//查找集合中元素并返还应存在位置

import java.util.*;

class CollectionsDemo

{

 public static void sop(Object obj)

 {

  System.out.println(obj);

 }

 public static void main(String[]args)

 {

  sortDemo();

  maxDemo();

 }

 public static void maxDemo()//最大值

 {

  List<String> list = new ArrayList<String>();

  list.add("acvd");

  list.add("aey");

  list.add("tt");

  list.add("wrt");

  list.add("qq");

  Collections.sort(list);

  String max = Collections.max(list);

  sop(max);//打印结果是其中最后的“wrt”.

 }

 

 public static void binarySearchDemo()//查找集合中元素位置

 {

  ArrayList<String> list = new ArrayList<String>();

  list.add("acvd");

  list.add("aey");

  list.add("tt");

  list.add("wrt");

  list.add("qq");

  Collections.sort(list);

  int index = Collections.binarySearch(list,"tt");//查找集合中元素并返还应存在位置

  int index = halfSearch(list,"aaaa");

 }

 Collections.binarySearch();原理折半查找:

  public static int halfSearch(List<String> list,String key)

 {

  int max,min,mid;

  max = list.size();

  min = 0;

  while(min<max)

  {

   mid =(min+max)>>1;

   String str = list.get(mid);

   int num = str.compareTo(key);

   if(num>0)

    max = mid -1;

   else if(num<0)

    min = mid+1;

   else

    return mid;

  }

  return -min-1;//返回值为负的插入点位置-1;

 }

如果元素不具备比较性或不是需要的

 public static int halfSearch(List<String> list,String key,Comparator<String> cmp)

 {

  int max,min,mid;

  max = list.size();

  min = 0;

  while(min<max)

  {

   mid =(min+max)>>1;

   String str = list.get(mid);

   int num = cmp.compare(str,key);

   if(num>0)

    max = mid -1;

   else if(num<0)

    min = mid+1;

   else

    return mid;

  }

  return -min-1;//返回值为负的插入点位置-1;

 }

 

 public static void sortDemo()//按照指定方法排序

 {

  List<String> list = new ArrayList<String>();

  list.add("acvd");

  list.add("aey");

  list.add("tt");

  list.add("wrt");

  list.add("qq");

  sop(list);

  Collections.sort(list);//对List集合元素进行自然排序

  Collections.sort(list,new StrLenComparator());//按照指定方法排序

  sop(list);

 }

}

class StrLeComparator implements Comparator<String>//自定义排序方法

{

 public int compare(String s1,String s2)

 {

  if(s1.length()>s2.length())

   return 1;

  if(s1.length()<s2.length())

   return -1;

  return s1.compareTo(s2);

 }

}

Collections.fill(list,"pp");//将list集合中的元素都替换成"pp".

List<String> list = new ArrayList<String>();

  list.add("acvd");

  list.add("aey");

  list.add("tt");

  Collection.fill(list,"pp");

变成"pp","pp","pp"

Collections.replaceAll(List list,"aaa","pp");将list集合中的aaa替换成pp

Collections.reverse(List list);//将list集合中元素反转

Collections.reverseOrder();//对比较器方式强行逆转

class Demo

{

 public static void main(String[]args)

 {

  TreeSet<String> ts = new TreeSet<String>(Collections.reverseOrder());

  //如果想将自己建立的比较器逆转,例如自建的为new Comp();

  //TreeSet<String> ts = new TreeSet<String>(Collection.reverseOrder(new Comp()));

  ts.add("refre");

  ts.add("wwed");

  ts.add("effdff");

  ts.add("qee");

 }

}

Collections.synchroinzedList(List list)//将List不同步的集合变为同步.

Collections.swap(List list,int i,int j);置换list集合中两个元素的位置

Collections.shuffle(List list);对list进行重新随机排序.

Arrays数组工具类:

Arrays.toString(arr)将数组转为字符串。

asList:将数组变成List集合。

把数组变成集合的好处:可以使用集合的思想和方法操作数组中元素.注意:但是不可以使用集合的增删方法.因为数组长度一定

UnsupportedOperationException//不支持操作异常

import java.util.*;

class Demo

{

 public static void main(String[]args)

 {

  int []arr ={3,4,5};

  System.out.printlin(Arrays.toString(arr));

 }

}

int[] nums = {2,3,4}

List<int[]> li = Arrays.asList(nums);

sop(li);结果为数组[LL@II3C]

如果数组中的元素都是对象,那么变成集合时,数组中的元素直接转成集合中的元素

如果数组中的元素都是基本数据类型,那么会将该数组作为集合的元素存在

Integer[] nums ={2,3,4};

List<Integer> li = Arrays.asList(nums);//注意泛型,因为现在集合中元素师以Integer对象为对象的。

sop(li);结果为数组[2,3,4]

集合变数组:Collection接口中的toArray方法必须指定转完后的数组类型

import java.util.*;

class CollectionToArray

{

 public static void main(String[]args)

 {

  ArrayList<String> al = new ArrayList<String>();

  al.add("abc1");

  al.add("abc2");

  al.add("abc3");

  /*1,当指定类型的数组长度小于了集合的size,该方法内部会创建一个新的长度为集合size的数组

  当数组长度大于集合的size,不会创建新数组.所以创建数组时直接创建集合size长度的就ok了

  2,为什么将集合变数组?

  为了限定元素的操作,不需要进行增删了.

  */

  String[]arr =al.toArray(new String[al.size()]);

  System.out.println(Array.toString(arr));

 }

}

高级for循环:相当于迭代器

格式:

for (数据类型 变量名:被遍历的集合(Collection)或者数组 )

{

}

对集合进行遍历只能获取元素不能对集合进行操作,有局限性.迭代器可以remove集合中元素

ListIterator可以增删改查.

ArrayList<String> al = new ArrayList<String>();

 al.add("abc1");

 al.add("abc2");

 al.add("abc3");

 for(String s : al)只能取出元素不能修改

 {

  System.out.println(s);

 }

 int[]arr={2,3,4}

 for (int i:arr)

 {

  System.out.println(i);

 }

以前的for循环和高级for循环的区别:高级for循环必须有遍历的目标。

建议在遍历数组时仍使用原来的for因为可以定义角标。

JDK1.5新特性:

可变参数,不用每一次建立数组对象,只需将操作数据传递即可

在使用时注意:可变参数一定要定义在参数列表的最后边.

show(2,3);

show(3,3,4)

public static void show(int... arr)//不用函数重载

{

}

静态导入:

import java.util.*;

import static java.util.Arrays.*;//导入的是Array这个类中的所以静态成员

import static java.uril.System.*;//导入System类中的所有静态成员

class StaticImport

{

 public static void main(String[]args)

 {

  out.println("haha");

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

  sort(arr);

  int index = binarySearch(arr,1);

 }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: