JAVA自学笔记13

1、StringBuffer类

1)线程安全的可变字符序列

线程安全(即同步)

2)StringBuffer与String的区别:一个可变一个不可变

3)构造方法:

①public StringBuffer()

无参构造。

StringBuffer ssd=new StringBuffer();

Systrm.out.println(ssd);//已被重写,由于没有内容而为空

Systrm.out.println(ssd.capacity());//默认为16

Systrm.out.println(ssd.length);//0

②public StringBuffer(Int capacity)

指定容量的字符串缓冲区对象,容量即最大长度

③public StringBuffer(String str)

指定内容的字符串缓冲区对象

StringBuffer ssb=new StringBuffer(“abcd”);

Systrm.out.println(ssb.lcapacity);//输出为20,即=字符串长+16

4)添加功能

①pubilc StringBuffer append(String str);

可以把任意类型添加至字符串缓冲区中

StringBuffer sb=new StringBuffer();
StringBuffer sb2=sb.append("hello"); System.out.println(sb);//hello
System.out.println(sb2);//hello,这里sb=sb2.并没有开辟新空间
sb.appernd(1);
sb.appernd(two);
System.out.println(sb);//hello1two
//或链式编程:sb.append(1).append("two")

②pubilc StringBuffer insert(int offest,String str);

在指定位置把任意类型的数据插入到字符缓冲区中

5)删除功能:

①public StringBuffer deleteCharAt(int index)

删除指定索引处的字符,并返回删除后的字符串给自身

②public StringBuffer delete(int start,int end)

删除从指定位置开始到指定位置结束的字符串,并返回删除后的字符串给自身。注意,不删除索引为end的字符串,即包左不包右

6)替换功能:

public StringBuffer replace(int start,int end,String str)

将从指定位置开始到指定位置结束的字符串替换为指定字符串

7)反转功能

pubilc StringBuffer reverse()

将字符串顺序反转后返回给原字符串

8)截取功能:

public String substring(int start);

public String substring(int start,int end);

注意:将返回一个String类型,原字符串对象并未发生改变

9)String与StringBuffer的相互转换

String s=”abc”;

StringBuffer sb=”abc”//报错,不能把字符串的值直接赋给StringBuffer

StringBuffer sb=s;//同上

//由String向StringBuffer的转换

StringBuffer sb=new StringBuffer(s);//使用构造方法

StringBuffer sb2=new StringBuffer();

sb2.append(s);//也正确实现了上述转换

//由StringBuffer向String的转换

StringBuffer buffer=new StringBuffer(“abc”);

String s3=new String(buffer);//使用构造方法

String s4=buffer.toString();//使用toString()方法

@例题1:将数组拼接成一个字符串

int[] arr={44,55,66,77};
public static String arrayToString2(int[] arr){ StringBuffer sb=new StringBuffer();
sb.append("[");
//取出每一个字符后使用append方法拼接即可
sb.append("]");
return sb.toString;
}

@例题2:将字符串反转

String s=sc.nextLine();

//使用反转功能
StringBuffer sb=new StringBuffer(s);
sb.reverse();
return sb.toStrin();//或
return new StringBuffer(s).reverse().toString();

//判断字符串是否对称

String s=sc.nextLine();
//将第1个与最后1个比较
//将第2个与倒数第2个比较
//...共需比较长度/2 次
public static boolean isSymmetry(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 true;
} //直接使用StringBuffer中的反转功能
public static boolean isSymmetry(String s){
return new StringBuffer(s).reverse().toString().equals(s);
}

2、StringBuilder类

1)不同步的,不安全的,是StringBuffer的简易替换,常用在单线程当中,其功能与构造方法完全与String相同

2)String/StringBuffer/StringBuilder的区别

①String是内容不可变的,后两个是可变的

②StringBuffer是同步的,数据安全但效率较低;StringBuilder则相反

3)StringBuffer与数组的区别

两者都可以看作为容器盛装其他的数据,但StringBuffer的数据最终是一个字符串数据,而数组可以放置多种数据,但必须是同一数据类型的

4)形参传递问题

String作为参数传递,效果和基本类型作为参数传递是一样的

public class StringBufferDemo {

public static void main(String[] args) {

String s1 = “hello”;

String s2 = “world”;

System.out.println(s1 + “—” + s2);// hello—world,因为直接对被传参的字符串赋值相当于尝试改变字符串常量,是不成功的,下同

change(s1, s2);

System.out.println(s1 + “—” + s2);// hello—world

    StringBuffer sb1 = new StringBuffer("hello");
StringBuffer sb2 = new StringBuffer("world");
System.out.println(sb1 + "---" + sb2);// hello---world
change(sb1, sb2);
System.out.println(sb1 + "---" + sb2);// hello---worldworld//操作字符串对象对容,可以发生改变 } public static void change(StringBuffer sb1, StringBuffer sb2) {
sb1 = sb2;
sb2.append(sb1);
} public static void change(String s1, String s2) {
s1 = s2;
s2 = s1 + s2;
}

}

2、数组的高级操作

1)排序

①冒泡排序:

相邻元素两两比较,大的往后放,第一次执行完毕,最大值将出现在最大索引处,之后以此类推

比较的次数是数组长度-1,代码如下

for(int x=0;x<arr.length-1;x++){
for(int y=0;y<arr.length-1-xly++){
if(arr[x]>arr[x+1]){
int temp=arr[x];
arr[x]=arr[x+1];
arr[x+1]=temp;
}
}
}

②选择排序

从索引为0处开始,依次与后面元素比较,小的往前放,一轮后最小的出现在最前面



代码如下:

for(int x=0;x

int max=arr.length-1;
int min=0
while(arr[mid]!=value){
if(arr[mid]>value){
max=mid-1;
else{
min=mid+!;
}
}
if(min>max){
return -1;
}
mid=(max+min)/2;
}

3、Arrays类

1)包含用来操作数组(比如排序和搜索)的各种方法

2)静态类

3)成员方法:

①public static String toString(基本数据类型数组);//把字符转为字符串

②public static void sort(基本数据类型数组);//对数组进行排序

③public static int binarySearch(基本数据类型数组,int key);//二分查找

4)只要是对象,就要判断是不是为空

4、基本类型包装类

1)为了对基本数据类型进行更多的操作,Java就针对每一种基本数据类型提供了对应的类类型,被称为包装类类型

将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据

2)常用的操作之一:用于基本数据类型与字符串之间的转换

3)基本类型和包装类之间的对应:Byte/Short/Integer/Float/Double/Character/Boolean

4)Integer类

①构造方法:public Integer(int value)

eg:Integer ii=new Integer(i);

String s=”100”;

Integer iii=new Integer(s);//实现了转换

System.out.println(iii);//100

public Integer(String s)

③Int类型与String类型的互相转换

//int转向String
int num=100;
//方式一:字符串的拼接
String s1=""+number;
//方式二:
String s2=String.valueOf(num);
//方式三:int -Integer-Stirng
Integer i=new Integer(num);
String s3=i.toString();
//方式四:
String s4=Integer.toString(num); //String转向int
String s="100";
//方式一:String-Integer-int
Integer ii=new Integer(s);
int x=ii.intValue();
//方式二:调用成员函数
int y=Integer.parseInt(s);

④成员方法:

public int intValue();

public static int parselnt(String s)

public static String toString(int i)

public static Integer valueOf(int i)

public static Integer valueOf(String s)

5、jdk5的新特性

自动装箱:把基本类型转为包装类类型

自动拆箱:把包装类类型转为基本类型

仅在对象不为null时能生效

即系统允许做以下操作:

Integer i=100;//自动装箱
//规范做法应该是:Integer ii=new Integer(100);
i+=100;//先自动装箱,处理完后自动拆箱

6、缓冲池

1)看程序写结果:

Integer i1=128;
Integer i2=128;
System.out.println(i1==12);//false Integer i1=127;
Integer i2=127;
System.out.println(i1==12);//true

针对byte范围内的数据,JVM制作了一个常量池。如果数据是该范围内的,每次并不创建新的空间。Integer的数据直接赋值,如果在-128~127之间,会直接从缓冲池中获取数据

7、Character类

1)提供了几种便利的方法(判断、转换大小写,数字)

2)成员方法大都是静态的

@例题四:如何校验一个qq号码

JAVA自学笔记13的更多相关文章

  1. JAVA自学笔记11

    JAVA自学笔记11 1:Eclipse的安装 2:用Eclipse写一个HelloWorld案例,最终在控制台输出你的名字 A:创建项目 B:在src目录下创建包.cn.itcast C:在cn.i ...

  2. JAVA自学笔记18

    JAVA自学笔记18 1.Map接口: 1)功能: 2) Map<String,String>m=new HashMap<String,String>(); //添加元素,元素 ...

  3. JAVA自学笔记20

    JAVA自学笔记20 1.递归: 1)方法定义中定义中调用方法本身的现象 2)要有出口,否则就是死递归 次数不能太多.否则内存将溢出 构造方法不能递归使用 //斐波那契数列:1,1,2,3,5,8,1 ...

  4. JAVA自学笔记22

    JAVA自学笔记22 1.操作基本数据类型的流 DataInputStream DataOutputStream 数据输出流允许应用程序以适当方式将基本的Java数据类型写入输出流中.然后,应用程序可 ...

  5. JAVA自学笔记24

    JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...

  6. JAVA自学笔记09

    JAVA自学笔记09 1.子类的方法会把父类的同名方法覆盖(重写) 2.final: 1)可修饰类.方法.变量 2)修饰类时:此时该类变为最终类,它将无法成为父类而被继承 3)修饰方法时:该方法将无法 ...

  7. JAVA自学笔记05

    JAVA自学笔记05 1.方法 1)方法就是完成特定功能的代码块,类似C语言中的函数. 2)格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,-){ 函数体; return ...

  8. JAVA自学笔记06

    JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...

  9. JAVA自学笔记04

    JAVA自学笔记04 1.switch语句 1)格式:switch(表达式){ case 值1: 语句体1; break; case 值2: 语句体2; break; - default: 语句体n+ ...

随机推荐

  1. 优化 Markdown 在 Notepad++ 中的使用体验

    选择一个强大而好用的文本编辑器,是进行 Web 开发和编程必不可少的一部分,甚至对于通常的写作,一个舒服的文本编辑器也会让你写起文字来觉得优雅而潇洒.Sublime Text 是一款不错的编辑器,简洁 ...

  2. ajax一次获取整个表单的数据

    $.ajax({ cache: true, type: "POST", url:ajaxCallUrl, data:$('#yourformid').serialize(),// ...

  3. Hbase的写入负载均衡

    在写Hbase的时候,会担心数据分布在各个region上不均匀(与预分区无关): 这个时候可能想到的方式:hash.加盐等(当然是可以的,但是读取的时候咋办呢? 哪天写一个这样的文章) 本文采用新方式 ...

  4. gitlab之六: gitlab 备份恢复

    参考:   https://blog.csdn.net/ouyang_peng/article/details/77070977 备份: 所有的权限,库文件等信息全部备份到的 不更改备份目录的话: v ...

  5. sublime text 自定义插件,自动插入署名,自定义插入日期,自动生成头部注释

    自动插入署名 菜单下面的 一.工具(tool)>新代码段(new snippet…) 看到以下代码 <snippet> <content><![CDATA[ Hel ...

  6. spring cloud (三、服务提供者demo_provider)

    spring cloud (一.服务注册demo_eureka) spring cloud (二.服务注册安全demo_eureka) 创建一个服务提供者注册到服务注册中心,跟前一个案例一样创建一个s ...

  7. day22 模块最后的补充。包。

    前一天内容复习: # def func(): # a # # def main(): # func() # # try: # main() # except: # pass # raise NameE ...

  8. Linux系统数据共享-NFS服务

    转载:http://www.cnblogs.com/mchina/archive/2013/01/03/2840040.html 一.NFS服务简介 NFS 是Network File System的 ...

  9. git checkout 撤销多个文件,撤销整个文件夹

    git checkout 撤销多个文件,撤销整个文件夹 git checkout <folder-name>/ git checkout -- <folder-name> 这样 ...

  10. 解决UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position

    最近用Python写了些爬虫,在爬取一个gb2312的页面时,抛出异常: UnicodeEncodeError: 'ascii' codec can't encode characters in po ...