Java API常见的使用类(二)

数组的高级操作

                 1,数组是存储同一种数据类型多个元素的容器。

              2,特点是每个元素都有从0开始的编号,称为索引。

              3,数据的操作:

                      1,遍历:

//数组的遍历
public static void printArray(int[] arr){
    for(int i=0;i<arr.length;i++){
        System.out.println(arr[i]);    
    }
}

                       2,获取最大值:

//获取最大值
public static int getMax(int[] arr){
    int max=arr[0];
    for(int i=1;i<arr.length;i++){
        if(arr[i]>max){
            max=arr[i];
        }
    }
    return max;
}

                       3,排序:

                              a 冒泡排序:相邻元素两两比较,最大后往后放,第一次比较完毕,最大值在最大索引处。

//冒泡排序
public static void bubleSort(int[] arr){
    for(int i=0;i<arr.length-1;i++){
        for(int j=0;j<arr.length-i-1;j++){
            if(arr[j]>arr[j+1]){
                int temp=arr[j];            
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }    
        }
    }
}

                              b 选择排序:从0索引元素开始,依次和后边的所有元素进行比较,小的往0索引处放,第一次比较完毕后,最小值在0索引。

//选择排序
public static void selectSort(int[] arr){
    for(int i=0;i<arr.length-1;i++){
        for(int j=i+1;j<arr.length;j++){
            if(arr[i]<arr[j]){
                int temp=arr[j];
                arr[j]=arr[i];
                arr[i]=temp;
            }
        }
    }
}

                       4,查找:

                              a 普通查找:遍历数组,从头找到尾。

//查找
public static int getIndex(int[] arr,int value){
    int index=-1;
    if(arr==null) return index;
    for(int i=0;i<arr.length;i++){
        if(arr[i]==value){
            index=i;
            break;
        }
    }
    return index;
}

                              b 二分查找:每次都从中间开始查找,如比中间值小,就在左边找,如果比中间值大,就在右边找,如果相等就返回该值索引。

                                         前提:数组必须是有序的。

public static void getIndex(int[] arr,int value){
    int start=0;
    int end=arr.length-1;
    int mid=(start+end)>>1;
    
    while(arr[mid]!=value){
        if(value>arr[mid]){
            start=mid+1;
        }else if(value<arr[mid]){
            end=mid-1;
        } 
        if(start>end){
            return -1;
        }
        mid=(start+end)>>1;
    }
    return mid;
}

Arrays

       1,Arrays是针对数据进行操作的工具类。

      2,需要掌握的功能:

                   a:把数组转换成字符串。

                      public static String toString(int[] arr)

                   b:排序。

                      public static void sort(int[] arr)

                   c:二分查找。

                     public static int binarySearch(int[] arr,int value)

StringBuffer

              1,StringBuffer是字符串缓冲区,长度可改变。

            2,构造方法:

                    a:StringBuffer buffer=new StringBuffer();

                    b:StringBuffer buffer=new StringBuffer(int capacity);

                    c:StringBuffer buffer=new StringBuffer(String s);

                    注意: StringBuilder的功能与StringBuffer一致,StringBuilder是JDK5以后出现的。

            3,需要掌握的功能:

                     添加功能:

                           StringBuffer append(data):在缓冲区追加数据,添加到尾部。

                           StringBuffer insert(index,data):在指定位置插入数据。

                     删除功能:

                           StringBuffer delete(start,end):删除从指定位置开始到结束的内容。包左不包右。

                           StringBuffer deleteCharAt(index):删除指定位置的字符。

                     替换功能:

                           StringBuffer replace(start,end,string):从指定位置开始至结束的内容替换成一个字符串,返回当前对象的引用。

                     截取功能:

                           public String substring(int start):截取从指定位置开始到末尾的字符串并返回。

                           public String subsring(int start,int end)截取从指定位置开始到指定位置结束的内容,并返回。

                     返转功能:

                           public StringBuffer reverse():把字符串缓冲区对象的内容进行反转。

                     字符串和字符缓冲区的相互转换:

// String-->StringBuffer
StringBuffer buffer=new StringBuffer(String s);
StringBuffer buffer=new StringBuffer();
buffer.append(String s); 

   // StringBuffer-->String
String s=new String(StringBuffer buffer);
String s=(StringBuffer buffer).toStirng();

基本数据类型包装类

                1,我们针对基本数据类型只能做一些基本的算术运算,想对其做一些复杂操作,就做不了。

                     所以,JAVA提了基本数据类型的包装类,这样就有很多属性和方法可供我们使用了。

                2,基本数据类型对应的包装类:

                       byte       >> Byte

                       short      >> Short

                       int         >> Integer

                       long       >> Long

                       float      >> Float

                       double   >> Double

                       char      >> Character

                       boolean >> Boolean

                 3,Integer类的构造方法:

                        a Integer i=new Integer(int x);

                        b Integer i=new Integer(String s);

                             注意:s必须是数字字符组成的字符串。

                 4,Integer的功能:

                        a  String >>  int

                               String s=”100”;

                               int i=Integer.parseInt(s);

                        b  int  >>  String

                               int i=100;

                               String s=Integer.valueOf(i);

                 5,JDK5以后的新特性。

                        a 自动装箱:从int到Integer

                        b 自动拆箱:从Integer到int

//示例
Integer i=100; //自动装箱,等价于 Integer i=new Integer(100);
i+=200; //i自动拆箱  i.intValue()
 //自动装箱   i=i.intValue()+200;    
System.out.println(i);

注意事项:基本数据类型包装类让我们操作变的简单 ,但其中也隐含一个问题,操作前最好做不为null的校验。

                6,Byte常量池的问题:

//byte常量池示例
Integer i=new Integer(128);
Integer i2=new Integer(128);

System.out.println(i==i2);  //false
System.out.println(i.equals(i2)); //true

Integer i3=128;
Integer i4=128;

System.out.println(i3==i4);    //false
System.out.println(i3.equals(i4));  //true

Integer i5=127;
Integer i6=127;

System.out.println(i5==i6);   //true
System.out.println(i5.equals(i6));  //true

Integer i7=new Integer(127);   
Integer i8=new Integer(127);

System.out.println(i7==i8);    //false
System.out.println(i7.equals(i8)); //true

//byte范围内的值赋值包装类的时候,是从常量池里获取的。

            7,包装类的功能测试

                需求:把“1 44 34 88 98 -4”字符串进行排序并打印输出

                分析:

                        首先需要将字符串中的空格进行去除,

                        然后将字符串需要进行类型转换成数组。     

                        将数组进行排序,

                        将数组转换成字符串,输出。

//获取字符串
String s="1 44 34 88 98 -1";
//将字符串空格切割转换成字符串数组
String[] strs=s.split(" ");
//将字符串数组转成int数组
int [] arr=new int[strs.length];
for(int i=0;i<strs.length;i++){
arr[i]=Integer.parseInt(strs[i]);
//对数组进行排序
Arrays.sort(arr);
//调用方法 将数组转换成字符串原来的格式。
String result=strsToString(arr);
System.out.println(result);
//
//返回类型:String
//参数列表:int[]
private static String strsToString(int[] arr) {
        
    StringBuilder builder=new StringBuilder();
     for(int i=0;i<arr.length;i++){
        builder.append(arr[i]).append(" ");
     }
            return builder.toString().trim();
        
}

                       

Random

           1,是产生随机数的类。

           2,构造方法:

                    a Random r=new Random();

                    b Random r=new Random(long seed);

                        注意:种子一样,随机数一样。

           3,掌握的方法 :

                   public int nextInt(int n );

                       产生在[0,n]之间的随机数。

正则表达式

          1,符合一定规则的字符串。

          2,规则:

                 字符:

                      x    字符x

                      \\   反斜线字符

                      \r   回车

                      \n  换行

                 字符类:

                      [abc]         a、b或c

                      [^abc]       任何字符,除了a、b或c

                      [a-zA-Z]     a到z,A到Z,包括两端的字符

                      [0-9]          数字0到9

                 预定义字符:

                      .         任意字符

                      \d       数字[0-9]

                      \w       单词字符[a-zA-Z_0-9]

                 边界适配器:

                     ^       行的开头

                     $       行的结尾

                     \b      单词的边界 指这里不能出现的字符,如hello;world   xi.xi

                 Greedu数量词:

                     x?        x,一次或一次也没有。

                     x*       x,零次或多次。

                     x+       x,一次或多次。

                     x{n}    x,n次。

                     x{n,}   x,n次以上。

                     x{n,m} x至少n次不超过m

                 组:从左边小括号开始编号,每一个对应一个组。

                          (a(b(c)d(e)))
                              第一组:a(b(c)d(e))

                         第二组:b(c)d(e)

                         第三组:c

                         第四组:e

                         我们可以通过组名来获取组内的内容,组0表示整个表达式。

                         组功能示例:

                                  需求:

                                        “我..我.爱爱....JJJ..ja...a..vv...aaa....a”将字符串还原成"我爱Java"

                                  分析:

                                          首先将所有.替换成“”

                                          将重复的叠词只保留一个。

//定义一个字符串
String strs="我..我.爱爱....JJJ..Ja...a..vv...aaa....a";
//将.替换成""
String s1=strs.replaceAll("\\.","");
//将重复的叠词保留一个
String s2=s1.replaceAll("(.)\\1+","$1");
System.out.println(s2);

  叠词:

                                  在同一个字符串中,右边引用左边:“(.)\\1+”

                                  在下一个字符串中引用前边字符串组的内容:“(.)\\1+”,“$1”

           3,通过String类的功能使用正则表达式

                        判断 public boolean matches(String regex)

                        分割 public String[] split(String regex)

                        替换 public String replaceAll(String regex,String newString)

                      

                       获取 :  

                            1,pattern和Matcher类。

                                    pattern:正则表达式的编译表示形式。

                                    Matcher:匹配器

                            2,使用步骤:

//正则表达式获取功能的使用步骤
Pattern p=Pattern.compile(String regex);//规则
Matcher m=p.matcher(String findstring);//查找的字符串
//判断是否有
while(m.find){
    //有就获取
    System.out.println(m.group());
}

                                           

                        3,获取的简易示例:

                                   需求:“hi,what do you want to do?”找到其中两个字符的单 词分别是哪些

//定义一个字符串
String s="hi,what do you wat to do ?";
//定义规则
String regex="\\b[a-z]{2}\\b"
Pattern p=Pattern.compile(regex);
Matcher m=p.mathcer(str);
while(m.find){
    System.out.println(m.group());
}

Date

           1,Date:是一个日期类,大部分方法已过时。被Calendar替代

                     构造方法 :

                                   Date d=new Date();//获得当前日期的毫秒值

                            Date d=new Date(long time);//把一个毫秒值转换成日期。

                     获取毫秒值:

                            getTime()

         2,DateFormat:

                    对日期进行格式化和字符串进行解析的类。

                    String >> Date

                       public  Date parse(String source)

                       解析:parse()

                    Date  >> String

                      public final String format(Date date)

                      格式化:format()

                       示例:

//获得当前日期
Date d=new Date();
String s=dateToString(d,"yyyy年MM月dd日HH:mm:ss");
System.out.println(s);

public static String dateToString(Date date,String format){
    return new SimpleDateFormat(format).format(date);
}

//字符串日期转成日期
String s="2014-03-27 15:20:13";
Date d=stringToDate(s,"yyyy-MM-dd HH:mm:ss");
System.out.println(d);

private static Date stringToDate(String date,String string) throws ParseException {
    return new SimpleDateFormat(string).parse(date);

}

         3,Calendar:

                  日历类,对日期进行了更细的划分,可以获取日历的每个字段值。

                  根据日历字段获取对应的值:

                                   get()

                  设置年月日

                                  set(int year,int month,int date)

                  修改指定日历的值

                                  add(int field,int value)

                 示例:

                       根据输入的日期判断这年的2月有多少天(闰年)

Calendar c=Calendar.getIntance();
Scanner sc=new Scanner(System.in);
int y=sc.nextInt();

c.get(y,2,1);
c.add(Calendar.DATE,-1);
int d=c.get(Calendar.DATE);
System.out.println(d);

System

            系统类,通过静态的方法供我们使用。

            需要掌握的功能:

                  exit()

                  currentTimeMillis()

                  arraycopy() 小写。

Collection

         1,集合的由来:

               我们需要对多个对象进行存储,可以使用对象数组。

               但是如果对象的个数是变化的, 对象数组就解决不了。

               因此Java提供了集合类。

         2,集合体系的由来:

               多种集合的数据结构不同,但是它们都有共同的特性,

               通过不断的向上抽取,最终形成了集合的体系结构。

                  Collection

                       |  

                       |-----List

                                 |---ArrayList

                                 |---Vactor

                                 |---LinkedList

                       |

                       |-----Set

                                 |---HashSet

                                 |---TreeSet

           3,Collection的接口功能:

                     添加功能:add(Object obj)

                     删除功能:remove(Object obj)

                     判断功能:contains(Object obj)

                     获取功能:Iterator iterator()

                     长度功能:size()

           4,迭代器:以内部类的方式存在。

                    1,就是遍历集合的一种方式。

                    2,迭代器不能单独使用,它依赖集合而存在。

                    3,使用步骤:

                                1,通过集合调用Iterator的方法得到迭代器对象。

                                2,通过迭代器的hasNext()判断是否有元素。

                                3,通过迭代器的next()方法获取元素。

             集合示例:

//创建集合对象
Collection c=new ArrayList();

//创建元素对象
String s="hello";
String s1="world";
String s2="java";

//将元素添加到集合
c.add(s);
c.add(s1);
c.add(s2);

//通过集合调用Iterator()方法获得迭代器对象
Iterator it=c.iterator();
//遍历
while(it.hasNext()){
    //向下转型
    String s=(String)it.next();
    System.out.println(s);
}

posted @ 2014-03-27 17:11  ear  阅读(957)  评论(0编辑  收藏  举报