1、StringBuffer类概述:线程安全的可变字符序列,一个类似于String的字符串缓冲区,但不能修改(不能像String那样用加号与其他类型数据连接),但通过某些方法调用可以改变该序列的长度和内容。java.lang包下,使用时不用导包。final修饰,不能有子类。

2、StringBuffer相当于一个容器。

3、StringBuffer是一个线程安全的可变字符序列 ,但需要同步,效率较低。

4、StringBuffer和String的区别:String是一个不可变的字符序列,StringBuffer是一个可变的字符序列 。

5、每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从JDK5开始,为该类补充了一个单个线程使用的等价类,即StringBuilder。与该类相比,通常应该优先使用StringBuilder类,因为它支持所有相同的操作,但由于它不执行同步,所以速度很快。

6、StringBuffer的构造方法:

public StringBuffer():无参构造方法。构造一个不带字符的字符串缓冲区,其初始容量为16个字符,初始容量即实际容量。

public StringBuffer(int capacity):构造一个不带字符,但具有指定容量的字符串缓冲区对象,实际容量给多少是多少。

public StringBuffer(String str):构造一个按指定字符串内容初始化的的字符串缓冲区对象,但不占初始容量,实际容量为字符串的length加上初始容量16。

7、StringBuffer的一般方法:

public int capacity():返回当前容量。调用capacity方法看容器的实际容量(理论值)。

public int length():返回长度(字符数)。调用length()方法看容器中的字符个数(实际值)。

8、StringBuffer在new的时候,是在堆内存创建了一个对象,底层是一个长度为16的字符数组。当调用添加的(append())方法时,不会再重新创建对象,而是在不断地向原缓冲区添加字符。

9、StringBuffer重写了toString方法,显示的是对象中的属性值。

10、StringBuffer的添加功能:

public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身。

public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身。如果没有指定位置的索引就会报索引越界异常。

11、StringBuffer的删除功能:

public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身。当缓冲区中这个索引没有元素的时候就会报StringIndexOutOfBoundsException。

public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身。删除时包含头不包含尾。

12、清空缓冲区:变量名.delete(0, 变量名.length()); 不要直接用创建对象的方式清空缓冲区,原来的对象会变成垃圾,浪费内存(原来的变量名 = new StringBuffer();)。

13、StringBuffer的替换功能:

public StringBuffer replace(int start,int end,String str):从start开始到end用str替换。

14、StringBuffer的反转功能:

public StringBuffer reverse():字符串反转。

15、StringBuffer的截取功能:

public String substring(int start):从指定位置截取到末尾。截取后产生新的字符串,用String记录。

public String substring(int start,int end):截取从指定位置开始到结束位置,包括开始位置,不包括结束位置。

16、注意:substring()的返回值类型不再是StringBuffer本身,而是一个String。创建String变量去接收返回值。

17、Alt + Shift + R改名。

18、String转换成StringBuffer:

ⅰ.通过StringBuffer的构造方法。直接在参数列表中添加字符串。相当于把字符串变成了StringBuffer对象。

ⅱ.通过StringBuffer的append()方法。通过append()方法将字符串转换为StringBuffer对象。

19、StringBuffer转换成String:

ⅰ.通过String的构造方法。

ⅱ.通过StringBuffer的toString()方法。最常用,直接调用,用String变量接收。

ⅲ.通过StringBuffer的subString(0,length); 通过截取此字符串。

20、把数组中的数据按照指定个格式拼接成一个字符串。String会不断产生垃圾,StringBuffer只会产生一个对象。

21、StringBuilder的概述:一个可变的字符序列。此类提供一个与StringBuffer兼容的API,但不保证同步。该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类,因为大多数实现中,它比StringBuffer要快。

22、StringBuffer和StringBuilder的区别:

StringBuffer是jdk1.0版本的,是线程安全的,同步的,效率低。

StringBuilder是jdk1.5版本的,是线程不安全的,不同步的,效率高。

23、String和StringBuffer,StringBuilder的区别:

String是一个不可变的字符序列。

StringBuffer,StringBuilder是可变的字符序列。

24、写出方法名和参数列表,Ctrl+1直接创建方法。

25、基本数据类型的值传递,不改变其值。引用数据类型的值传递,改变其值。

26、String作为参数传递。String类虽然是引用数据类型,但是他作为参数传递时和基本数据类型是一样的。String类一旦初始化,其值就不会被改变。

27、StringBuffer作为参数传递。两个引用指向同一个对象,所以值会改变。

28、冒泡排序:轻的上浮,沉的下降。

两个相邻位置元素进行比较,如果前面的元素比后面的元素大就交换位置。第一轮结束,最大值出现在最大索引处,截取除最大索引的元素后重复比较交换的步骤,直到截取的只剩首个索引位置的元素。利用for的嵌套循环实现。

外循环次数根据比较次数,内循环次数根据外循环次数设定。一般外循环次数为数组长度-1,内循环次数为数组长度-1-外循环次数所在次数(一般也就是i),数值上等于外循环次数-i。

具体交换过程,在比较后,设个int变量做中间媒介,进行交换即可。

29、选择排序:

从0索引开始,依次和后面其他索引位置上的元素比较,小的往前放。第一轮结束,最小值出现在了最小索引处,截取除最小索引的元素后重复比较交换的步骤,直到截取的只剩最后索引位置的元素。利用for的嵌套循环实现。

内循环初始次数应设为外循环次数所在次数值加一(一般即j = i + 1),外循环次数根据比较次数。

30、冒泡排序是相邻元素之间进行比较,大数后放。选则排序是固定索引,与后依次比较,小数前放。

31、冒泡排序的内循环次数,是在设置循环次数范围时根据外循环次数的减少而减少,而选择排序的内循环次数,是在每次初始化的时候根据外循环次数的增加而增加。(初始化值的增加等同于循环次数范围的减少)。

32、二分查找:查找元素对应的索引。前提:数组元素有序

ⅰ.创建方法,返回值类型为int。设定三个int类型变量分别为最小值存储数组首个元素的索引,最大值存储数组末尾元素的索引即数组长度-1,和中间值存储最大值加最小值的和被二整除的值所代表的索引。

ⅱ.用while循环,条件是当中间值不等于要找的值,即开始循环查找。分两种情况,当中间值小于了要找的值,就使最小值代表的索引等于中间值的索引加一;当中间值大于要找的值,就使最大值代表的索引等于中间值的索引减一。无论最大索引还是最小索引改变,中间索引等于新的最大索引或最小索引加上不变的最小索引或最大索引的和被二整除。最后判断,如果最小索引比最大索引还大,就返回-1。

ⅲ.如果仍未满足中间值等于要找的值,也没返回-1,则重复第二步。如果满足中间值等于要找的值,则返回中间索引。

33、 注意:如果数组无序,就不能使用二分查找。因为即使你排序了,但是你排序的时候已经改变了最原始的元素索引位置。

34、Arrays类概述:针对数组进行操作的工具类。java.util包下,使用需要导包。方法均被静态修饰,直接通过类名.调用即可 Arrays.方法名。提供了排序,查找等功能。

35、Arrays类成员方法:

public static String toString(int[] a) 将数组转换成字符串。

public static void sort(int[] a) 对数组进行排序。

public static int binarySearch(int[] a,int key) 二分查找法。返回:如果它包含在数组中,则返回搜索键的索引;否则返回(-(插入点)-1)。插入点被定义为将键插入数组的那一点:即第一个大于此键的元素索引,如果数组中的所有元素都小于指定的键,则为a.legth,这保证了当且仅当此键被找到时,返回的值将>=0。

36、Ctrl + Shift + T打开类搜索。Ctrl + O打开方法搜索。

37、解析:

//toString源码public static String toString(long[] a) {if (a == null)                                               //如果传入的数组是nullreturn "null";                                           //返回nullint iMax = a.length - 1;                                     //iMax最大索引if (iMax == -1)                                              //如果数组中没有元素return "[]";                                             //返回[]StringBuilder b = new StringBuilder();                       //线程不安去,效率高b.append('[');                                               //将[添加到字符串缓冲区中for (int i = 0; ; i++) {                                     //遍历数组,判断语句没有写默认是trueb.append(a[i]);                                          //把第一个元素添加进字符串缓冲区if (i == iMax)                                           //如果索引等于最大最大值return b.append(']').toString();                     //将[添加到字符串缓冲区,再转换成字符串并返回b.append(", ");                                          //如果不等于最大索引就将, 添加到缓冲区}}
//binarySearch0源码private static int binarySearch0(long[] a, int fromIndex, int toIndex, long key) {int low = fromIndex;                                           //最小索引0int high = toIndex - 1;                                        //最大索引数组长度-1while (low <= high) {                                          //最小索引小于等于最大索引可以循环判断int mid = (low + high) >>> 1;                              //求出中间索引值,(最小+最大)/2long midVal = a[mid];                                      // 通过中间索引获取中间值if (midVal < key)                                          //中间索引对应的值小于查找的值low = mid + 1;                                         //最小索引变化else if (midVal > key)                                     //中间索引对应的值大于查找的值high = mid - 1;                                        //最大索引变化elsereturn mid; // key found                               //找到了}return -(low + 1);  // key not found.                          //-插入点-1}

38、基本类型包装类的概述:为什么会有基本类型包装类:将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。

39、基本类型包装类常用的操作之一:用于基本数据类型与字符串之间的转换。

40、八种基本类型和包装类的对应:

基本类型

对应包装类

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

char

Character

boolean

Boolean

41、Integer类概述:Integer 类在对象中包装了一个基本类型 int 的值,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还提供了处理 int 类型时非常有用的其他一些常量和方法。

42、Integer类的常量:

public static final int MAX_VALUE值为2^31-1的常量,它表示int类型能够表示的最大值。

public static final int MIN_VALUE值为-2^31的常量,它表示int类型能够表示的最小值。

43、Integer类的构造方法:

public Integer(int value) 构造一个新分配的Integer对象,它表示指定的int值。

public Integer(String s) 构造一个新分配的Integer对象,它表示String参数所指示的int值。必须传int类型(数字类型)的字符串,否则报NumberFormatException数字格式异常。

44、int类转换成String类:推荐用前两个方法。

ⅰ.用+和""进行拼接。

ⅱ.public static String valueOf(int i)

ⅲ.int -- Integer -- String(Integer类的toString方法():返回一个表示该Integer值的String对象)

ⅳ.public static String toString(int i)(Integer类的静态方法) 直接类名调用,参数传int值。Integer.toString(int值);

45、String类转换成int类:推荐第二种。

ⅰ.String -- Integer -- int (Integer类的intValue()方法:以int类型返回该Integer的值。)

ⅱ.public static int parseInt(String s) (Integer类的parseInt()方法:将字符串参数作为有符号的十进制整数作为解析。静态方法,Integer.parseInt(String值);)

46、基本数据类型包装类有8种,其中七种有parseXxx的方法,可以将这七种的字符串表现形式转换成基本数据类型。char的包装类Character中没有parseXxx的方法。字符串到字符的转换,通过toCharArray()就可以把字符串转换为字符数组。

47、JDK5以前装箱和拆箱:

int x = 100;
Integer i1 = new Integer(x);//将基本数据类型包装成对象,装箱
int y = i1.intValue();         //将对象转换为基本数据类型,拆箱

48、JDK5的新特性:

自动装箱:把基本类型转换为包装类类型。基本数据类型直接给引用数据类型赋值,把基本数据类型转换成对象。

自动拆箱:把包装类类型转换为基本类型。把对象转换为基本数据类型。底层相当于调用intValue()。

49、注意:在使用时,Integer  x = null;代码就会出现NullPointerException。空指针调intValue方法报空指针异常。建议先判断是否为null,然后再使用。

50、Integer中的equals方法:public boolean equals(Object obj) :比较此对象与指定对象,当且仅当参数不为null,并且是一个与该对象包含相同int值的Integer对象时,结果为true。

51、 Integer的面试题:看程序写结果。

 Integer i1 = new Integer(97);Integer i2 = new Integer(97);System.out.println(i1 == i2);           //falseSystem.out.println(i1.equals(i2));     //trueSystem.out.println("-----------");Integer i3 = new Integer(197);Integer i4 = new Integer(197);System.out.println(i3 == i4);         //falseSystem.out.println(i3.equals(i4));       //trueSystem.out.println("-----------");/*-128到127是byte的取值范围,如果在这个取值范围内,自动装箱就不会新创建对象,而是从常量池中获取如果超过了byte取值范围就会新创建对象。*/Integer i5 = 127;Integer i6 = 127;System.out.println(i5 == i6);         //trueSystem.out.println(i5.equals(i6));        //trueSystem.out.println("-----------");Integer i7 = 128;Integer i8 = 128;System.out.println(i7 == i8);           //falseSystem.out.println(i7.equals(i8));       //true/*public static Integer valueOf(int i) {                          //Cache缓存if (i >= IntegerCache.low && i <= IntegerCache.high)       //i >= -128 && i <= 127return IntegerCache.cache[i + (-IntegerCache.low)];    //底层创建数组,数组大小256,0索引位置存的是-128,255索引位置存的127。i5和i6都是从数组直接取值,所以结果相同。return new Integer(i);}*/

Java 知识点整理-7.StringBuffer类+冒泡排序+选择排序+二分法+Arrays类+基本数据类型的包装类相关推荐

  1. c语言数组项目按身高排序,过三关 Java冒泡排序选择排序插入排序小练习

    材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选 ...

  2. 【排序算法】冒泡排序|选择排序|插入排序|希尔排序

    文章目录 冒泡排序 选择排序 插入排序 希尔排序 冒泡排序   第一个元素开始向第二个元素比较,若大于则交换位置,不大于则不动.然后第二个元素和第三个元素比较,再然后第三个元素和第四个元素比较-一直比 ...

  3. 冒泡排序选择排序插入排序

    目录 冒泡排序 选择排序 插入排序 冒泡排序 冒泡排序(最好是O(n), 最坏O(n2)) 原理: 拿自己与上面一个比较,如果上面一个比自己小就将自己和上面一个调换位置,依次再与上面一个比较,第一轮结 ...

  4. 十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 ...

  5. 大数据——Java 知识点整理

    1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java开发工具包,提供了java的开发环境和运行环境. JRE:Java Runtime Envir ...

  6. 过三关 Java冒泡排序选择排序插入排序小练习

    材料:猴子排序,按照身高来从小到大来排序. 第一关: 老猴子带领小猴子队伍按大小逐一比较,交换,开始高矮排列队伍.(冒泡排序) 第二关: 太慢了,给第一关增加难度,进行选择排序 第三关: 最后,尝试选 ...

  7. java冒泡排序函数验证_java冒泡排序-选择排序-插入排序-使用API中文文档直接调用函数...

    import java.util.Arrays; public class ArrayDemo2_3 { public static void main(String []args) { //---- ...

  8. java知识点整理(onenote)

    文章目录 1. Lambda表达式 2. Static和Final 3. Java中的集合 4. 函数式接口 5. 字符串 6. Stream数据流 7. Input和Output Scancer: ...

  9. java 冒泡排序 选择排序 插入排序及其异同点

    交换两坐标位置的swap()函数 之后要用到 public static void swap(int[] arr, int a, int b) {int temp;temp = arr[a];arr[ ...

最新文章

  1. DockerCon 2016 深度解读: Citrix 服务发现解决方案 —— Nitrox
  2. 论述类文本知识框架_考前知识梳理与答题技巧之论述类文本
  3. php项目安装器,php服务器环境安装及项目搭建
  4. 工业控制中无线局域网应用前景分析
  5. 计算机快捷键下档健,电脑文档快捷键
  6. 微信表情包像素不合适的解决办法
  7. RTF文件结构分析及其应用
  8. 如何使用gdb调试java虚拟机_Eclispe+qemu+gdb调试linux Kernel
  9. 样条插值 spline interpolation matlab c++实现
  10. 开篇鸿蒙谁为情种,曹雪芹  红楼梦引子    开辟鸿蒙,谁为情种?都只为风月情浓。 这句话什么意思 只要这句话的解释...
  11. iOS UITableview 禁止上下弹性或一个方向弹性
  12. 消费者理论:效用函数
  13. 数据库导入表时出错:Importing tables....errors detected(see log page)
  14. 春天喝这五种花草茶 身体排毒又美容养颜
  15. 微信名片加好友服务器繁忙,还傻乎乎的微信加好友?这些细节你要注意!
  16. matlab基础05
  17. 交换机的接口类型 面试官与求职者之间谈话。面对面试官的疯狂追问,如果你是求职者,你能扛得住嘛?
  18. mongodb数据库的下载、安装、配置与使用
  19. android switch 空间,android Android UI(Switch)详解
  20. Cannot find reference 'dynamic_rnn' in '__init__.py'

热门文章

  1. (一)libvirt库简介
  2. 15. 【C语言】Hanoi塔问题(Demo)
  3. 人脸识别技术原理及解决方案
  4. linux quota硬盘,Linux系统中quota磁盘命令的相关使用解析
  5. 旋转机械设备故障诊断的轴心轨迹总结
  6. NTP对时服务器(NTP电子时钟)在生物制药业应用
  7. ADSO中的表和视图
  8. hadoop 历史版本下载
  9. 数据结构与算法精选面试50题(附答案)
  10. IOS手机ssh连接linux好用工具