Java上路15-集合工具类

来源:互联网 发布:交通组织优化方案实例 编辑:程序博客网 时间:2024/06/06 17:24

一. Collections:

       Collections类完全由在collection上进行操作或返回collection的静态方法组成。

1. 排序、查询:

import java.util.*; class CollectionsDemo{       public static void main(String[] args)       {              sortDemo();       }        public static void sortDemo()       {              List<String> list=new ArrayList<String>();              list.add("DaTo");              list.add("Vigiles");              list.add("YinZi");              list.add("YinZi");              list.add("LiEr");              sop(list);               Collections.sort(list);    //自然排序              sop(list);               Collections.sort(list, new StringLengthComparator());   //按比较器排序              sop(list);               sop("最大:"+Collections.max(list));   //最大。根据元素的自然顺序              sop("最长:"+Collections.max(list, new StringLengthComparator()));  //按比较器选取最大               //搜索。binarySearch使用二分搜索法搜索指定列表,用于有序的集合              sop("YinZi索引:"+Collections.binarySearch(list,"YinZi"));              sop("Gaog索引:"+Collections.binarySearch(list,"Gaog"));              sop("XinZai索引:"+Collections.binarySearch(list,"XinZai"));              //binarySearch原理              int index=halfSearch(list,"cc");       }        public static int halfSearch(List<String> list, String key)       {              int max, min, mid;              max = list.size()-1;              min = 0;              while (min<=max)              {                     mid=(max+min)>>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;       }        public static void sop(Object obj)       {              System.out.println(obj);       }} class StringLengthComparator implements Comparator<String>{       public int compare(String s1, String s2)       {              if (s1.length()>s2.length())              {                     return 1;              }              else if(s1.length()<s2.length())              {                     return -1;              }              else              {                     return s1.compareTo(s2);              }       }}  

   

2. 逆转排序:

import java.util.*; class CollectionsDemo{       public static void main(String[] args)       {              sortDemo();       }        public static void sortDemo()       {              //TreeSet<String> list=new TreeSet<String>();              //TreeSet<String> list=new TreeSet<String>(Collections.reverseOrder());              //TreeSet<String> list=new TreeSet<String>(new MyComparator());              TreeSet<String> list=new TreeSet<String>(Collections.reverseOrder(new MyComparator()));              list.add("DaTo");              list.add("Vigiles");              list.add("YinZi");              list.add("LinErr");               for(Iterator it=list.iterator();it.hasNext();)              {                     System.out.println(it.next());              }       }} //长度比较器class MyComparator implements Comparator<String>{       public int compare(String s1, String s2)       {              if (s1.length()>s2.length())              {                     return 1;              }              else if(s1.length()<s2.length())              {                     return -1;              }              else              {                     return s1.compareTo(s2);              }       }}  

 

二. Arrays:

       此类包含用来操作数组(比如排序和搜索)的各种方法。

1. 数组变集合:

import java.util.*; class ArraysDemo{       public static void main(String[] args)       {              String[] arr={"book","foot", "desk", "paper", "bag"};              List<String>list=Arrays.asList(arr);              //将数组变成集合,不可以使用集合的增删方法,因为长度固定。否则发生UnsuppportedOperationException异常               sop(list);               int[] num={34, 52, 13, 33};              List<int[]>ln=Arrays.asList(num);              sop(ln);               Integer[] nums={23, 54, 35, 65,6};              List<Integer>li=Arrays.asList(nums);              sop(li);       }        public static void sop(Object obj)       {              System.out.println("\n"+obj);       }}


2. 集合变数组:

import java.util.*; class ArraysDemo{       public static void main(String[] args)       {              ArrayList<String> al=new ArrayList<String>();              al.add("desk");              al.add("book");              al.add("foot");               /*              高级for循环遍历集合,只能获取元素,不能进行操作。              迭代器除了遍历,还可以remove,如果使用ListIterator,还可以在遍历增删改查。              高级for有局限性:必须有被遍历的目标。遍历数组建议使用传统for。              */              for (String s:al)              {                     sop(s);              }               int[] num={85,3,14,2,96};              for (int i:num)              {                     sop(i);              }                           /*              如果指定类型的数组长度小于集合的size,则该方法自动创建一个长度为size的数组              如果指定类型的数组长度大于集合的size,会使用传递进来的数组              */              String[] arr=al.toArray(new String[al.size()]);              sop(Arrays.toString(arr));       }        public static void sop(Object obj)       {              System.out.println("\n"+obj);       }}    


三. 附加:

       JDK1.5后为了简化代码出现了多个新特性。

/*1.静态导入:       当类名重名时,须要指定具体的包名;       当方法重名时,需要指定所属的对象或类名。2.可变参数:       是数组作为参数的简写形式;       只能放在参数列表的最后。*/import staticjava.lang.System.*;import java.util.*;import staticjava.util.Arrays.*; class NewJdk //extends Object{       public static void main(String[] args)       {              int[] arr={5,9,3,7,2};              //使用静态方法。省略了Arrays.              sort(arr);              int index=binarySearch(arr, 9);              //使用静态导入的方法。省略了System.              out.println("排序后9的索引:"+index);              //因为NewJdk默认继承Object,有了重名的toString方法,所以要指定              out.println(Arrays.toString(arr));               //arguments(1,5,5,5,6,9);              arguments("variable","arguments",5,6,9);       }        //可变参数。放在参数列表最后       //public static void arguments(int...nums)       public static void arguments(String s1,String s2, int... nums)       {              out.println(s1+" "+s2);              for (int i=0; i<nums.length;i++)              {                     out.print(nums[i]);              }       }}

   

四. 其它常用类:

1.System:

import java.util.*; class CommonClass{       public static void main(String[] args)       {              //自定义系统信息              System.setProperty("MyJava","Vigiles");               //获取指定系统信息              String vl=System.getProperty("os.name");              System.out.println("vl="+vl);               //Properties是Hashtable的子类              Properties prop=System.getProperties();              //System.out.println(prop);               //通过map方法取出prop集合的所有元素              for (Object obj:prop.keySet())              {                     Stringvalue=(String)prop.get(obj);                     System.out.println(obj+"::"+value);              }       }}   


2.Runtime:

       这个类没有构造函数,应用程序不能创建自己的 Runtime 类实例。但有getRuntime()返回与当前 Java 应用程序相关的运行时对象。

class CommonClass{       public static void main(String[] args) throws Exception       {              Runtime run=Runtime.getRuntime();               //打开记事本,因为其在环境变量中有设置,可以省略全路径              //run.exec("notepad");               //创建一个进程              //Process p=run.exec("notepad");               //用记事本打开java文件              Process p=run.exec("notepadCommonClass.java");               Thread.sleep(1000);    //停留一秒              //杀死进程              p.destroy();       }}


3.Date:

       类 Date 表示特定的瞬间,精确到毫秒。

import java.util.Date;import java.text.SimpleDateFormat; class CommonClass{       public static void main(String[] args)throws Exception       {              Date date=new Date();              System.out.println(date);               //将模式封装到SimpleDateFormat对象              SimpleDateFormat sdf=newSimpleDateFormat("yyyy年MM月dd日 E ahh:mm:ss");              //指定Date对象              String time=sdf.format(date);              System.out.println("Now:"+time);       }}   


4.Calendar:

       为特定瞬间与日历字段之间的转换提供了一些方法,并为操作日历字段提供了一些方法。

import java.util.Calendar; class CommonClass{       public static void main(String[] args)throws Exception       {              Calendar c=Calendar.getInstance();              //返回给定日历字段的值              System.out.println(c.get(Calendar.YEAR)+"年"+                                                 (c.get(Calendar.MONTH)+1)+"月"+  //从0开始                                                 c.get(Calendar.DAY_OF_MONTH)+"日");               //将给定的日历字段设置为给定值              c.set(2012, 4, 6);              System.out.println("\n"+c);               //根据日历的规则,为给定的日历字段添加或减去指定的时间量              c.add(Calendar.YEAR, 2);              System.out.println("\n"+c);               c.add(Calendar.MONTH, -32);              System.out.println("\n"+c);       }}


5.Math:

       执行基本数学运算的方法。

import java.util.Random; class CommonClass{       public static void main(String[] args)throws Exception       {              //ceil返回大于参数值的最小整数值              double d1=Math.ceil(12.34);              System.out.println("double:"+d1);               //ceil返回小于参数值的最大整数值              double d2=Math.floor(12.34);              System.out.println("floor:"+d2);               //四舍五入              double d3=Math.round(12.34);              System.out.println("round:"+d3);               //前者的后者次方              double d4=Math.pow(2, 3);              System.out.println("pow:"+d4);               //随机数              double d5=Math.random()*10;              System.out.println("random:"+d5);               //使用Random类生成随机数              Random r=new Random();              for (int i=0; i<5; i++)              {                     int d=r.nextInt(10)+1;                     System.out.print(d);              }       }}