Java上路15-集合工具类


一. 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);
              }
       }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值