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