stringBuffer、StringBuilder、排序、Arrays、Jdk1.5新特性(java基础知识十三)
1.StringBuffer类的概述
* A:StringBuffer类概述
* 通过JDK提供的API,查看StringBuffer类的说明
* 1.线程安全的可变字符序列。
* 2.可将字符串缓冲区安全地用于多个线程。
* 3.StringBuffer 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
* 4.每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大。从 JDK 5 开始,为该类补充了一个单个线程使用的等价类,即 StringBuilder。与该类相比,通常应该优先使用 StringBuilder 类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
* B:简述安全问题
* 线程安全效率低
* C:StringBuffer和String的区别
* String是一个不可变的字符序列。
* StringBuffer是一个可变的字符序列。
2.StringBuffer类的构造方法
* A:StringBuffer的构造方法:
* public StringBuffer():无参构造方法
* public StringBuffer(int capacity):指定容量(16)的字符串缓冲区对象
* public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
* B:StringBuffer的方法:
* public int capacity():返回当前容量。 理论值(16不掌握)
* public int length():返回长度(字符数)。 实际值
3.StringBuffer的添加功能和删除功能
* A:StringBuffer的添加功能
* public StringBuffer append(String str):
* 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
* public StringBuffer insert(int offset,String str):
* 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
* B:StringBuffer的删除功能
* public StringBuffer deleteCharAt(int index):
* 删除指定位置的字符,并返回本身
* public StringBuffer delete(int start,int end):
* 删除从指定位置开始指定位置结束的内容,并返回本身,包含头不包含尾。
4.StringBuffer的替换和反转功能
* A:StringBuffer的替换功能
* public StringBuffer replace(int start,int end,String str):
* 从start开始到end用str替换
* B:StringBuffer的反转功能
* public StringBuffer reverse():
* 将字符串反转
5.StringBuffer的截取功能及注意事项
* A:StringBuffer的截取功能
* public String substring(int start):
* 从指定位置截取到末尾
* public String substring(int start,int end):
* 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
* B:注意事项
* 注意:返回值类型不再是StringBuffer本身,而是String。
6.StringBuffer和String的相互转换
* A:String --> StringBuffer
* a:通过构造方法
* 1.StringBuffer sb = new StringBuffer("myworld");//创建对象,一创建就调用构造方法。
* b:通过append()方法
* 2.StringBuffer sb = new StringBuffer();
* sb.append("myworld");
* B:StringBuffer --> String
* a:通过构造方法
* 1. StringBuffer sb = new StringBuffer("wwwwh");
* String s = new String(sb);
* b:通过toString()方法
* 2. StringBuffer sb = new StringBuffer("wwwwh");
* String s = sb.toString();
* c:通过subString(0,length);
* 3. StringBuffer sb = new StringBuffer("wwwwh");
* String s = sb.substring(0,sb.length());
7.把数组转成字符串
* 需求:把数组中的数据按照指定个格式拼接成一个字符串
举例:
int[] arr = {1,2,3};
输出结果:
"[1, 2, 3]"
用StringBuffer的功能实现
public static void main(String[] args) {
int[] arr = {1,2,3};
StringBuffer sb = new StringBuffer("[");
for (int i = 0; i < arr.length; i++) {
if(i == 2){
sb.append(arr[i] + "]");
}else {
sb.append(arr[i] + ",");
}
}
System.out.println(sb);
}
8.字符串反转
需求:把字符串反转
举例:键盘录入"abc"
输出结果:"cba"
用StringBuffer的功能实现
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请从键盘输入一个字符串:");
String str = sc.nextLine();
StringBuffer sb = new StringBuffer(str);//利用构造把字符串对象转化成StringBuffer对象
str = sb.reverse().toString();//利用StringBuffer类中的反转功能,然后再转化成字符串
System.out.println(str);
}
9.StringBuffer和StringBuilder的区别
* A:StringBuilder的概述
* 通过查看API了解一下StringBuilder类
* 1.一个可变的字符序列。
* B:面试题
* String,StringBuffer,StringBuilder的区别?
* StringBuffer和StringBuilder的区别。
* StringBuffer是jdk1.0版本的,是线程安全的,效率低。
* StringBuilder是jdk1.5版本的,是线程不安全的,效率高。
* String和StringBuffer,StringBuilder的区别?
* String是一个不可变的字符序列。
* StringBuffer,StringBuilder是可变的字符序列。
10.String和StringBuffer分别作为参数传递
* String作为参数传递
* String不会改变原有对象的值,一旦初始化就不能被改变
* StringBuffer作为参数传递
* StringBuffer会改变原有对象的值。
11.数组高级冒泡排序原理案例
需求:
数组元素:{24, 69, 80, 57, 13}
请对数组元素进行排序。 冒泡排序
相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
public static void main(String[] args) {
int[] arr = {24,69,80,57,13};
for (int i = 0; i < arr.length - 1; i++) { //外层循环控制的是找到最大的数为止
for (int j = 0; j < arr.length - 1 - i; j++) { //内层循环控制的是俩俩相比较的次数
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for (int i : arr) {
System.out.println(i);
}
}
数组高级选择排序原理
* 需求:
* 数组元素:{24, 69, 80, 57, 13}
* 请对数组元素进行排序。 * 选择排序
* 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
public static void main(String[] args) {
int[] arr = {66,55,44,33,22,11};
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) { //j = i+1 的作用是:当获取到最小值后,就该从下一位进 行比较
if(arr[i] > arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for (int i : arr) {
System.out.println(i);
}
}
12.Arrays类的概述和方法使用
* A:Arrays类概述
* 1.此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。
* 2.除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException。
* 针对数组进行操作的工具类。
* 提供了排序,查找等功能。
* B:成员方法
* public static String toString(int[] a) //返回指定数组内容的字符串表示形式。
* public static void sort(int[] a) //对int数组按数字升序进行排序
* public static int binarySearch(int[] a,int key) //使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。
13.基本类型包装类的概述
* A:为什么会有基本类型包装类
* 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据。
* B:常用操作
* 常用的操作之一:用于基本数据类型与字符串之间的转换。
* C:基本类型和包装类的对应
*
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
14.Integer类的概述和构造方法
* A:Integer类概述
* 通过JDK提供的API,查看Integer类的说明
* 1.Integer 类在对象中包装了一个基本类型 int 的值。
* 2.该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,
* 3.还提供了处理 int 类型时非常有用的其他一些常量和方法
* B:构造方法
* 1.public Integer(int value) //构造一个新分配的 Integer 对象,它表示指定的 int 值。
* 2.public Integer(String s) //构造一个新分配的 Integer 对象,它表示 String 参数所指示的 int 值。
15.String和int类型的相互转换
* A:int -- String
* 1:和""(空字符串)进行拼接
* int num = 100;
* String s = num + "";
* 2:public static String valueOf(int i) //String 类中的ValueOf()方法,可将任意类型的数据,转换成字符串
* int num = 100;
* String s = String.valueOf(num);
* 3:int -- Integer -- String(Integer类的toString方法())
* Integer i = new Integer(100);
* String s = i.ToString();
* 4:public static String toString(int i)(Integer类的静态方法)
* String s = Integer.ToString(100);
* B:String -- int
* 1:String -- Integer -- int
* public static int parseInt(String s)
* String s = "100";
* int i = Integer.parseInt(s);
16.JDK5的新特性自动装箱和拆箱
* A:JDK5的新特性
* 自动装箱:把基本类型转换为包装类类型
* 自动拆箱:把包装类类型转换为基本类型
* B:案例演示
* JDK5的新特性
* 1.自动装箱和拆箱
* 2.泛型
* 3.增强for循环
* 4.静态导入(导入的是方法)
* 5.可变参数(其实就是一个大小可变的数组)
* 6.互斥锁
* Integer ii = 100;//自动装箱
* ii += 200;//自动拆箱。
* C:注意事项
* 在使用时,Integer x = null;代码就会出现NullPointerException。
* 建议先判断是否为null,然后再使用。
stringBuffer、StringBuilder、排序、Arrays、Jdk1.5新特性(java基础知识十三)的更多相关文章
- JDK1.5新特性,基础类库篇,集合框架(Collections)
集合框架在JDK1.5中增强特性如下: 一. 新语言特性的增强 泛型(Generics)- 增加了集合框架在编译时段的元素类型检查,节省了遍历元素时类型转换代码量. For-Loop循环(Enhanc ...
- JDK1.6新特性,基础类库篇,集合框架(Collections)
2006 年底,Sun 公司发布了 Java Standard Edition 6(Java SE 6)的最终正式版,代号 Mustang(野马). 集合框架增强如下: 1. 增加了如下新接口(Int ...
- JDK1.6新特性,基础类库篇,IO支持
1. JDK1.6中提供了java.io.Console类 JDK1.6中提供了java.io.Console 类专用来访问基于字符的控制台设备.你的程序如果要与Windows下的cmd或者Linux ...
- JDK1.5新特性,基础类库篇,线程类(Thread)增强了哪些
java.lang.Thread类增强特性如下: 线程优先级已经更改.java.lang.Thread.MIN_PRIORITY = 1 java.lang.Thread.NORM_PRIORITY ...
- JDK1.5新特性,基础类库篇,调用外部命令类(ProcessBuilder)用法
一. 背景 ProcessBuilder类是用来创建操作系统进程的.与Runtime.exec相比,它提供了更加方便的方法以创建子进程. 每个ProcessBuilder实例管理着一个进程属性的集合. ...
- JDK1.5新特性,基础类库篇,XML增强
Document Object Model (DOM) Level 3 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口.DO ...
- JDK1.5新特性,基础类库篇,System类
一. 背景 System.getenv(String)方法继续有效:增加了新的System.getenv()方法,返回保存环境变量的Map<String,String>. 同时增加了以纳秒 ...
- JDK1.6新特性,基础类库篇,Jar与Zip增强
1. API改变 增加了两个实现类 java.util.zip.DeflaterInputStream: 此类为解压缩 "deflate" 压缩格式的数据实现流过滤器.它还用作其他 ...
- JDK1.5新特性,基础类库篇,浅谈并发工具包(Concurrency Utilities)
java.util.concurrent, java.util.concurrent.atomic, 和 java.util.concurrent.locks 包提供了高性能的.可扩展的框架,保证开发 ...
随机推荐
- 标准C程序设计七---16
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- linux命令netstat或ifconfig未找到
linux命令netstat或ifconfig未找到 linux使用netstat或者ifconfig命令时,显示命令未找到.通过yum search netstat这个命令,匹配结果如下:===== ...
- Yii 之视图
控制器方法代码: public function actionIndex(){ $data = array( 'name' => 'zhangsan', 'age' => 12, 'add ...
- objective-c中#import和@class的区别
在Objective-C中,可以使用#import和@class来引用别的类型, 但是你知道两者有什么区别吗? @class叫做forward-class, 你经常会在头文件的定义中看到通过@cla ...
- LeetCode OJ--Evaluate Reverse Polish Notation
http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/ 栈使用 #include <iostream> #inc ...
- word2013 交叉引用添加参考文献的尾注编号,通过查找 ^# 替换为 [^&] 的方式添加中括号,在进行“更新域”操作后,中括号消失。
word2013 交叉引用添加的尾注编号,通过查找 ^# 替换为 [^&] 的方式添加中括号,用这个方法添加中括号很多次了,这次却出现问题:在进行“更新域”操作后,中括号消失. 详 ...
- pandaboard用wifi时打不开网页
不可以手动修改/etc/resolv.conf,因为重启会被自动清空(raspberry pi 可以) 修改 resolvconf服务的配置文件: /etc/resolvconf/resolv.con ...
- 单片机C51串口发送、接收寄存器
所以,发送和接收寄存器可使用同一地址,编写验证程序(发送和接收是独立空间):读取一个数(1)->发送一个数(2)->再读取得1则是独立空间 不知道STM32串口寄存器和C51串口寄存器是否 ...
- 抽球游戏(fwt)
地址:https://nanti.jisuanke.com/t/26017 分析: 现在是给定p,求是否存在这样的数列c,我们可以让p进行fwt变换,然后把点值都三次方根,然后再把得到的点值ufwt成 ...
- 深入GCD(一): 基本概念和Dispatch Queue
什么是GCD?Grand Central Dispatch或者GCD,是一套低层API,提供了一种新的方法来进行并发程序编写.从基本功能上讲,GCD有点像NSOperationQueue,他们都允许程 ...