JAVA 笔记(七)

  1. 字符串的面试题(看程序写结果)A:==和equals()。
String s1 = new String("hello");

String s2 = new String("hello");

System.out.println(s1 == s2);// false

System.out.println(s1.equals(s2));// true

String s3 = new String("hello");

String s4 = "hello";

System.out.println(s3 == s4);// false

System.out.println(s3.equals(s4));// true

String s5 = "hello";

String s6 = "hello";

System.out.println(s5 == s6);// true

System.out.println(s5.equals(s6));// true

 

B:字符串的拼接

String s1 = "hello";

String s2 = "world";

String s3 = "helloworld";

System.out.println(s3 == s1 + s2);// false

System.out.println(s3.equals((s1 + s2)));// true

System.out.println(s3 == "hello" + "world");// false 这个我们错了,应该是true

System.out.println(s3.equals("hello" + "world"));// true

 

  1.   字符串的功能

  A:判断功能

                   

  boolean equals(Object obj)

  boolean equalsIgnoreCase(String str)

  boolean contains(String str)

  boolean startsWith(String str)

  boolean endsWith(String str)

  boolean isEmpty()

B:获取功能

                    

                     int length()

                     char charAt(int index)

                     int indexOf(int ch)

                     int indexOf(String str)

                     int indexOf(int ch,int fromIndex)

                     int indexOf(String str,int fromIndex)

                     String substring(int start)

                     String substring(int start,int end)

C:转换功能

                   

                     byte[] getBytes()

                     char[] toCharArray()

                     static String valueOf(char[] chs)

                     static String valueOf(int i)

                     String toLowerCase()

                     String toUpperCase()

                     String concat(String str)

D:其他功能

                     

                    a:替换功能

                            String replace(char old,char new)

                            String replace(String old,String new)

                     b:去空格功能

                            String trim()

                     c:按字典比较功能

                            int compareTo(String str)

                            int compareToIgnoreCase(String str)

 

  1. 线程安全问题:安全-----同步(数据是安全的,我在做别人就不能做,效率低)           不安全------异步(效率高)
  2. Append(Sting  str)可以把任意类型数据添加到字符串缓冲区 ,并且返回字符串缓冲区本身。Insert( 参数)是从指定位置插入,例如第五个位置,就是字符第五个位置开始插入。
  3. Delete(参数)删除是包左不包右。
  4. Reverse()反转(stingbuffer 类中也有)
  5. StringBuffer的截取返回值是String(这个要特别注意,因为这样改变的就是新的地址值,而不是原地址修改了)
  6. Stingbuffer转换成string(1.通过构造方法2.通过append()方法)string转换成Stingbuffer(1.通过构造方法2.通过toString()方法)
  7. 任何引用类型使用tostring()方法都可以编程字符串。
  8. StringBuilder可看做和Stringbuffer一样(只不过它主要操作单线程异步操作,效率高)
  9. String作为参数传递的时候,效果和基本类型作为参数的效果一样。(切记,这条结论很重要)因为字符串是一种特殊的引用类型。而stringbuffer作为形参时,调方法会改变,直接赋值不会改变。
  10. 冒泡排序排序相邻元素两两比较,第一次结束就是最大值出现在最大索引处,再以此类推。
  11. 冒泡排序:(for(intx=0;x<length-1;x++){for(inty=0;y<length-1-x;y++)})这种循环才是最佳的,c语言书中的该方法外循环次数虽然一样,但是内循环次数没有减掉每次已经排好的数据。
  12. 选择排序,从0索引开始,依次和后面元素比较,小的往前放,第一次比较完毕,最小值出现在最小索引处。
  13.  选择排序的循环for(int x=0;x<length-1;x++){for(int y=x+1;y<length;y++)}也就是到数组的最后两个元素相比较的时候就结束了。而内循环从x+1是因为每一次比较完毕后,最小索引处就确定了,不需要在进行比较。
  14. 将字符转换成字符串(valueof()方法最佳)
  15. 二分查找的前提是数组有序。而无序就用基本查找(从头找到尾)大了在左边找,max=mid-1;小了在右边找,min=mid+1;如果最小值比最大值大了还没有找到就是没有,那么返回一个负数---(low+1)这是原码定义的;
  16. Arrays:针对数组进行操作的工具类(比如排序和查找)。
  17. Sort()的原码是快速排序。
  18. 开发原则:只要是对象,我们需要判断该对象是否为null.
  19. Integer(String s)的这个构造方法中的字符串必须是数字组成的字符串。
  20. Int-àstring(string.valueof())  stringàint(Integer.parseInt()),这些方法推荐使用,别的虽然也能实现二者的转换,但是较为麻烦。
  21. 十进制到其它进制public static String tostring(int I,int radix)(其范围是2-36,因为数字是0---9,字母是a---z,其余木有了)。
  22. 其它进制转换成十进制publicstatic  int parseInt(Stirng s,int redix).
  23. 自动装箱:就是把基本类型转换成包装类类型。自动拆箱:就是把包装类类型转换成基本类型。在使用时integer x=null,会出现空指针异常,所以使用的时候要先判断是否为空。
  24. For循环的第二条语句如果省略不写,就默认是ture.
  25. 通过查看源码,我们就知道了,针对-128到127之间的数据,做了一个数据缓冲池,如果数据是该范围内,每次并不创建新的空间。不在范围之内,每次要创建。(这条结论很重要)。【integer的数据直接赋值,如果在-128到127之间,就直接从缓冲池中获取数据】
  26. StringBuffer的构造方法 

            A:StringBuffer()

            B:StringBuffer(int size)

            C:StringBuffer(String str)

         StringBuffer:同步的,数据安全,效率低。

                     StringBuilder:不同步的,数据不安全,效率高。

  1. 排序和查找

  A:冒泡排序

                     相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处。同理,其他的元素就可以排好。

public static void bubbleSort(int[] arr) {

       for(int x=0; x<arr.length-1; x++) {

             for(int y=0; y<arr.length-1-x; y++) {

                            if(arr[y] > arr[y+1]) {

                                int temp = arr[y];

                                 arr[y] = arr[y+1];

                                 arr[y+1] = temp;

                               }

                           }

                      }

         }

 

B:选择排序

                     把0索引的元素,和索引1以后的元素都进行比较,第一次完毕,最小值出现在了0索引。同理,其他的元素就可以排好。

                     

public static void selectSort(int[] arr) {

         for(int x=0; x<arr.length-1; x++) {

               for(int y=x+1; y<arr.length; y++) {

                       if(arr[y] < arr[x]) {

                          int temp = arr[x];

                           arr[x] = arr[y];

                           arr[y] = temp;

                           }

                       }
              }
         }

 

                       

       (2)查找

              A:基本查找

                     针对数组无序的情况

                     public static int getIndex(int[] arr,int value) {

                            int index = -1;

                            for(int x=0; x<arr.length; x++) {

                                   if(arr[x] == value) {

                                          index = x;

                                          break;

                                   }

                            }

                            return index;

                     }

              B:二分查找(折半查找)

                     针对数组有序的情况(千万不要先排序,在查找)

                   

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

             int min = 0;

             int max = arr.length-1;

             int mid = (min+max)/2;

             while(arr[mid] != value) {

               if(arr[mid] > value) {

                   max = mid - 1;

                   }

else if(arr[mid] < value) { min = mid + 1; } if(min > max) { return -1; } mid = (min+max)/2; } return mid; }

 

  1.    

        Integer i = 100;           装箱

                     i += 200;        先拆线,在装箱

  1.  正则表达式:符合一定规则的字符串。  

   

   (1)就是符合一定规则的字符串

   (2)常见规则

          A:字符

                 x 字符 x。举例:'a'表示字符a

                 \\ 反斜线字符。

                 \n 新行(换行)符 ('\u000A')

                 \r 回车符 ('\u000D')

                

          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 单词边界

                        就是不是单词字符的地方。

                        举例:hello world?haha;xixi

                

E:Greedy 数量词

                 X? X,一次或一次也没有

                 X* X,零次或多次

                 X+ X,一次或多次

                 X{n} X,恰好 n 次

                 X{n,} X,至少 n 次

                 X{n,m} X,至少 n 次,但是不超过 m 次

   (3)常见功能:(分别用的是谁呢?)

          A:判断功能

                 String类的public boolean matches(String regex)

          B:分割功能

                 String类的public String[] split(String regex)

          C:替换功能

                 String类的public String replaceAll(String regex,String replacement)

          D:获取功能

                 Pattern和Matcher

                        Pattern p = Pattern.compile("a*b");

                        Matcher m = p.matcher("aaaaab");

                        find():查找存不存在

group():获取刚才查找过的数据

 

                               

  1.  正则表达式(.表示任意字符。\b 单词边界(就是不是单词字符的地方))规则字符在java.util.regex Pattern类中,字符串中的matches()方法就是验证字符串是否满足正则表达式。
  2. String的replaceALL()具有替换功能(主要是和谐)
  3. 获取功能:pattern(模式)和matcher(匹配器)【二者典型的调用顺序为:Pattern p = Pattern.compile("a*b");Matcher m = p.matcher("aaaaab");boolean b = m.matches();(第三句根据不同的需求来写,是可变的)】matcher中的group()方法使用前必须的先使用find()方法,就是先找,然后才能返回。
  4. Math类中的ceil()向上取整,floor()向下取整(这两个方法不考虑四舍五入的)。Round()方法是四舍五入。Sqrt()是取正平方根。
  5. 获取任意两个数之间的随机数的式子:int number=(int )((math.random()*(end-start+1))+start;(其中的start和end就是表示范围的两个数据。
  6. Random()本身也是包括左边不包括右边。
  7. Random类(非math类中的random()方法)是提供随机数的类public Random();没有给种子的构造方法,用得是默认种子,是当前时间的毫秒数。Public Random(long seed);给出指定的种子(给出种子后,每次得到的随机数一样的,因为种子相同)。该类方法nextInt();返回的范围是整个int范围内。nettInt(参数);返回是[0,参数)的范围内。
  8. 引用对象默认调用tostring()方法
  9. 执行system.gc()前。系统会自动调用finalize()方法清除对象占有的资源,通过super.finalize()方式可以实现从下到上的fianlize()方法的调用,即先释放自己的资源,然后再去释放父类的资源。(尽量不要频繁的调用垃圾回收机制)-------->待续
posted on 2016-04-08 19:48  doAction  阅读(231)  评论(0编辑  收藏  举报