黑马程序员————遍历数组、排序以及几种类的学习

------- android培训、java培训、期待与您交流! ----------

1:数组的高级操作
 (1)数组:存储同一种数据类型的多个元素的容器。
 (2)特点:每个元素都有从0开始的编号,方便我们获取。专业名称:索引。
 (3)数组操作:
  A:遍历
   public static void printArray(int[] arr) {
    for(int x=0; x      System.out.println(arr[x]);
    }
   }

  B:获取最值
   public static int getMax(int[] arr) {
    int max = arr[0];

    for(int x=1; x      if(arr[x]>max) {
      max = arr[x];
     }
    }

    return max;
   }

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

    public static void bubbleSort(int[] arr) {
     for(int x=0; x       for(int y=0; y        if(arr[y] > arr[y+1]) {
        int temp = arr[y];
        arr[y] = arr[y+1];
        arr[y+1] = temp;
       }
      }
     }
    }

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

    public static void selectSort(int[] arr) {
     for(int x=0; x       for(int y=x+1; y        if(arr[y]         int temp = arr[y];
        arr[y] = arr[x];
        arr[x] = temp;
       }
      }
     }
    }

  D:查找
   a:普通查找
    原理:遍历数组,从头找到尾

    public static int getIndex(int[] arr,int value) {
     int index = -1;

     for(int x=0; x       if(arr[x]==value) {
       index = x;
       break;
      }
     }

     return index;
    }

   b:二分查找(折半查找)
    前提:数组必须是有序的。

    原理:每次都从中间开始找,如果比中间数据小,就在左边找,
          如果比中间数据大,就在右边找,如果相等,就返回中间的索引值。

    public static int getIndex(int[] arr,int value) {
     int start = 0;
     int end = arr.length-1;
     int mid = (start+end)/2;

     while(arr[mid]!=value){
      if(value>arr[mid]) {
       start = mid + 1;
      }else if(value        end = mid - 1;
      }

      if(start > end) {
       return -1;
      }

      mid = (start+end)/2;
     }

     return mid;
    }

2: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)
 (3)Arrays工具类的源码。(理解)

3:StringBuffer类
 (1)StringBuffer:是字符串缓冲区类,容量可以改变。
 (2)面试题:
  String和StringBuffer的区别?
   String的长度固定。
   StringBuffer的长度可变。
  StringBuffer和StringBuilder的区别?
   StringBuffer的线程安全,效率低。
   StringBuilder的线程不安去,效率高。
 (3)StringBuffer的构造方法
  A:StringBuffer sb = new StringBuffer();
  B:StringBuffer sb = new StringBuffer(int capacity);
  C:StringBuffer sb = new StringBuffer(String s);

  注意:StringBuilder的功能和StringBuffer一模一样。前者是JDK5以后出现的。
 (4)要掌握的功能:(请自己把对应的方法写出来)
  A:添加功能
  B:删除功能
  C:其他功能
   替换功能
   截取功能
   反转功能
 (5)案例:
  把一个字符串反转。

4:基本数据类型包装类
 (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 = String.valueOf(i);
 (5)JDK5以后的新特性
  A:自动装箱 从int--Integer
  B:自动拆箱 从Integer--int

  请大家解释下面的代码:哪里体现了自动装箱,哪里体现了自动拆箱
   Integer i = 100;
   i += 200;
   System.out.println(i);
  
  注意:
   让我们操作变得简单,但是隐含了一个问题,这个时候,我们在使用对象前,最好做不为空的校验。
 (6)面试题:(看代码 IntegerTest.java)
  byte常量池。
 (7)案例:
  预习后,试着把字符串"-34 29 76 11 27"中的数据排序并输出。

5:Random
 (1)是产生随机数的类。
 (2)构造方法:
  A:Random r = new Random();
  B:random r = new Random(long seed);

  注意:种子一样,随机数一样。
 (3)掌握的方法:
  public int nextInt(int n):产生在[0,n)之间的随机数。


0:
 冒泡排序*****
 选择排序***
 二分法查找***

1:正则表达式(
 (1)符合一定规则的字符串。
 (2)规则:
  A:字符
   x 字符 x
   \\ 反斜线字符
   \r 回车符
   \n 换行符

  B:字符类
   [abc] a、b 或 c
   [^abc] 任何字符,除了 a、b 或 c 
   [a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内
   [0-9] 包括0-9之间的字符

  C:预定义字符类
   . 任何字符
   \d 数字:[0-9]
   \w 单词字符:[a-zA-Z_0-9]

  D:边界匹配器
   ^ 行的开头
   $ 行的结尾
   \b 单词边界
    就是指这里出现的不能使单词字符。
     he;wor xixi
    
  E:Greedy 数量词
   X? X,一次或一次也没有
   X* X,零次或多次
   X+ X,一次或多次
   X{n} X,恰好 n 次
   X{n,} X,至少 n 次
   X{n,m} X,至少 n 次,但是不超过 m 次

  F:组的概念(按照小括号从左开始编号,每一个对应着一个组)
   (a(b(c)d(e)))

   第一组:a(b(c)d(e))
   第二组:b(c)d(e)
   第三组:c
   第四组:e

   将来我们就可以通过编号来获取组中内容。组0表示整个表达式。
 (3)通过String类的功能使用正则表达式
  A:判断功能
   public boolean matches(String regex)
  B:分割功能
   public String[] split(String regex)
  C:替换功能
   public String replaceAll(String regex,String newString)

  记住:
   叠次:
    在同一个字符串中,右边引用左边:"(.)\\1+"
    在后一个字符串中引用前面的字符串的组内容:"(.)\\1+","$1"
 (4)案例:
  A:校验电话号码
  B:校验邮箱
  C:我要学编程

2:日期
 (1)Date:
  表示一个日期类。大部分方法过时,被Calendar替代。

  构造方法:
   Date d = new Date();
   Date d = new Date(long time);
  获取毫秒值:
   getTime();
 (2)DateFormat:
  对日期进行格式化和对字符串解析的类

  String -- Date:
   解析:parse(转换的意思)

  //将一个字符串日期,转成一个date日期>>>经常做的
  String date = "2014年09月25日 12时24分15";
  DateFormat dateFormat2 = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss");
  Date parse = dateFormat2.parse(date);
  System.out.println(parse);

  Date -- String:
   格式化:format(“要符合的日期格式”)

  DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒");//格式 yyyy年MM月dd日  HH时mm分ss秒
  String format = dateFormat.format(new Date());
  System.out.println(format);

  


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

  根据日历字段获取对应的值:
   get(Calendar.相应字段)
  设置年月日:
   一般情况下,都是由getInstance()获取Calendar对象
   在特殊业务需求时,需要进行判断
   set(int year,int month,int date)
  修改指定日历的值:
   add(int field,int value)

3:System
 (1)系统类,通过了静态的方法供我们使用。
 (2)要掌握的功能:
  A:exit(int i)  //推出VM
  B:currentTimeMillis() //获取当前毫秒值  可以用来测算程序运行的时间
  C:arraycopy() //arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
           从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束
  D:getProperties(String key)     getProperties()   获取系统属性值
  
 gc():跟finalize()进行辨析   //调用垃圾回收器(暗示!)

4:Math
  X abs(X x)  获取绝对值
 double random()    获取随机数
 double ceil(double a)  向上取整
 double floor(double a)  向下取整
  X max/min(X x,X y)  取最值
 double pow(double a, double b)  a^b
 round(double a)   四舍五入取整
  

 

 

 

你可能感兴趣的:(笔记整理)