学习笔记

xiaoxiao2021-02-28  48

1:StringBuffer(掌握) (1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的, 为了解决这个问题,Java就提供了一个字符串缓冲区类,StringBuffer,供我们使用。 (2)StringBuffer的构造方法 A:StringBuffer() B:StringBuffer(int size)  容量 C:StringBuffer(String str) (3)StringBuffer的常见功能 (自己补齐 方法的声明和方法的解释) A:添加功能 public StringBuffer append(String str):在最后位置,可以把任意类型数据,添加到字符串缓冲区里面,并返回字符串缓冲区本身 public StringBuffer insert(int offset,String str):在指定位置,把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身 B:删除功能 public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身   只删除一个字符 public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身   只包括左边,不包括右边 C:替换功能 public StringBuffer replace(int start,int end,String str):从start开始到end,用str替换   包左不包右 D:反转功能 public StringBuffer reverse()   把对象本身反转 E:截取功能 (注意这个返回值是String类型!) public String substring(int start) public String substring(int start,int end) (4)StringBuffer的练习 (做一遍) A:String和StringBuffer的相互转换 String -- StringBuffer:建议通过构造方法 String s = "hello"; //通过构造方法 StringBuffer sb = new StringBuffer(s);  //通过append()方法 StringBuffer sb2 = new StringBuffer();  sb2.append(s); StringBuffer -- String:建议通过toString()方法   不通过构造方法 StringBuffer buffer = new StringBuffer("java"); String str = new String(buffer);  构造方法 String str2 = buffer.toString();  toString()方法 B:字符串的拼接 // 用StringBuffer做拼接的方式 public static String arrayToString2(int[] arr) { StringBuffer sb = new StringBuffer(); sb.append("["); for(int x= 0;x<arr.length;x++) { if(x==arr.length-1) { sb.append(arr[x]); }else { sb.append(arr[x]).append(", "); } } sb.append("]"); return sb.toString(); } // 用String做拼接的方式 public static String arrayToString(int[] arr) { String s = ""; s+="["; for(int x =0;x<arr.length;x++) { if(x==arr.length-1) { s +=arr[x]; }else { s +=arr[x]; s +=", "; } } s+="]"; return s; } C:把字符串反转 // 用StringBuffer的reverse()功能 public static String myReverse2(String s) { /* 通过append()方法    String -- StringBuffer * StringBuffer sb = new StringBuffer();  sb.append(s); //通过构造方法    String -- StringBuffer  StringBuffer sb = new StringBuffer(s);     1 sb.reverse();  //反转                     2 return sb.toString();  返回的是String    3 */ // 简易版   1,2,3步合为一步 return new StringBuffer(s).reverse().toString(); } // 用String做拼接 public static String myReverse(String s) { String result = ""; //先定义一个空串 char[] chs = s.toCharArray();//把字符串转为字符数组 for (int x = chs.length - 1; x >= 0; x--) { //反过来拼 // char ch = chs[x];  先拿到每一个字符 // result += ch;   再拼 result += chs[x];//两步合为一步 } return result; } D:判断一个字符串是否对称 // 一个一个的比较    // 版本1 // public static boolean isSame(String s) { // // 把字符串转成字符数组 // char[] chs = s.toCharArray(); // // for (int start = 0, end = chs.length - 1; start <= end; start++, end--) { // if (chs[start] != chs[end]) { // return false;  一旦有不相等,就return false // } // } // // return true; 最终如果没有进去,就return true; // } // 一个一个的比较    // 版本2 public static boolean isSame(String s) { boolean flag = true;//先定义一个boolean类型的flag // 把字符串转成字符数组 char[] chs = s.toCharArray(); for (int start = 0, end = chs.length - 1; start <= end; start++, end--) { if (chs[start] != chs[end]) { flag = false;//一旦有问题了,flag的值就改了 break; } } return flag; } //用字符串缓冲区的反转功能 public static boolean isSame2(String s) { return new StringBuffer(s).reverse().toString().equals(s); //new StringBuffer(s).reverse().toString()  表示反转后的字符串 } (5)面试题 小细节:StringBuffer和StringBuilder,可以看成一样的,不过还是有区别: StringBuffer: 同步的,数据安全,效率低。 StringBuilder: 不同步的,数据不安全,效率高。 A:String,StringBuffer,StringBuilder的区别? 首先回答,String和StringBuffer,StringBuilder的区别? String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。 再回答,StringBuffer(多线程)和StringBuilder(单线程)的区别? StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高 注意:此处的安全指的是多线程的情况下。而我们常用的单线程的程序不会有问题的。所以,用的最多的是StringBuilder B:StringBuffer和数组的区别? (6)注意的问题: String作为形式参数,特殊的引用类型   形式参数改变,String不变   因为String相当于常量,main方法里放的是常量值 StringBuffer作为形式参数。 形式参数,StringBuffer是变化的  2:数组高级,以及Arrays  (掌握) (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  就进入循环;  if(arr[mid] > value) { //value在左边 max = mid - 1; }else if(arr[mid] < value) { //value在右边 min = mid + 1; } if(min > max) { //肯定找不到 别玩了 return -1; } mid = (min+max)/2;    重新计算   因为没找到,还得继续在这走啊 } return mid;   //if arr[mid] == value  直接return mid; } (3)Arrays工具类 A:是针对数组进行操作的工具类。包括排序和查找等功能。 B:要掌握的方法(自己补齐方法) 把数组转成字符串:public static String toString(int[] a) 把数组转成字符串  可对任意数据类型进行操作 我以int举例 排序:public static void sort(int[] a) 对数组进行(升序)排序      可对任意数据类型进行操作 我以int举例 二分查找:public static int binarySearch(int[] a,int key) 二分查找 (4)Arrays工具类的源码解析 (5)把字符串中的字符,进行排序 举例: "edacbgf" 得到结果"abcdefg" 3:Integer (掌握)  int对应的包装类类型 (1)为了让基本类型的数据进行更多的操作,Java就为每种基本类型,提供了对应的包装类类型 byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean (2)Integer的构造方法 A:Integer i = new Integer(100); B:Integer i = new Integer("100");    注意:这里的字符串,必须是由数字字符组成。 (3)String和int的相互转换 A:String -- int: Integer.parseInt("100"); Integer这个类就记住这一个方法 类比:找到该类型对应的包装类,调用parseXxx() String -- float: Float.parseFloat(s)  Integer这个类就记住这一个方法 B:int -- String: String.valueOf(100); (4)其他的功能(了解) 进制转换  2-26进制 * 1常用的基本进制转换 * public static String toBinaryString(int i)   十进制到2进制 * public static String toOctalString(int i) 十进制到8进制 * public static String toHexString(int i) 十进制到16进制 * 2十进制到其他进制 * public static String toString(int i,int radix)  radix指多少进制 * 由这个我们也看到了进制的范围:2-36 * 为什么呢? 0,...9,a...z * 3其他进制到十进制 * public static int parseInt(String s,int radix) (5)JDK5的新特性 自动装箱 基本类型--引用类型 自动拆箱 引用类型--基本类型 把下面的这个代码,理解即可: Integer i = 100; i += 200; (6)面试题 -128到127之间的数据缓冲池问题 4:Character  (了解)     char对应的包装类类型 (1)Character构造方法 Character ch = new Character('a');  字符类型 (2)要掌握的方法:(自己补齐) A:判断给定的字符是否是大写 静态方法不需要构建对象,直接类名调用 public static boolean isUpperCase(char ch) B:判断给定的字符是否是小写 public static boolean isLowerCase(char ch) C:判断给定的字符是否是数字字符 public static boolean isDigit(char ch) D:把给定的字符转成大写 public static char toUpperCase(char ch) E:把给定的字符转成小写 public static char toLowerCase(char ch) (3)案例: 统计 字符串中大写,小写及数字字符出现的次数
转载请注明原文地址: https://www.6miu.com/read-2619569.html

最新回复(0)