没有合适的资源?快使用搜索试试~ 我知道了~
文章目录1.常用API1.1. String 类1.1.1.常用方法1.1.2.字符串比较1.1.3. StringBuffer与 StringBuilder1.1.4. String、StringBuffer、StringBuilder的区别1.1.5.封装类比较1.2. Math类1.3. Arrays 类1.4. System 类1.5. Object 类1.6. Date 类1.6.1.日期格式化1.7. Calendar 类2.数组与集合2.1.数组2.1.1.数组的定义2.1.2.数组的访问2.1.3.数组相关算法2.2. Collection集合2.2.1.迭代器2.2.2. C
资源推荐
资源详情
资源评论
基础(二)基础(二)
文章目录文章目录1.常用API1.1. String 类1.1.1.常用方法1.1.2.字符串比较1.1.3. StringBuffer与 StringBuilder1.1.4. String、
StringBuffer、StringBuilder的区别1.1.5.封装类比较1.2. Math类1.3. Arrays 类1.4. System 类1.5. Object 类1.6. Date 类1.6.1.
日期格式化1.7. Calendar 类2.数组与集合2.1.数组2.1.1.数组的定义2.1.2.数组的访问2.1.3.数组相关算法2.2. Collection集合
2.2.1.迭代器2.2.2. Collections 工具类2.3. List2.3.1. ArrayList(默认)2.3.2. LinkList(增删)2.3.3. Vector(安全)2.4.
Set2.4.1. HashSet(默认)2.4.2. LinkedHashSet(有序)2.4.3. TreeSet (排序)2.4.4.拓展:可变参数2.5.
Map2.5.1.HashMap(默认)2.5.2. LinkedHashSet(有序)2.5.3. TreeMap(排序)2.5.4. Hashtable (安全)2.6.数据结构
2.6.1. 栈(stack)2.6.2. 队列(queue)2.6.3. 数组(Array)2.6.4. 链表(Linked list)2.6.5. 二叉树(binary tree)2.6.6. 红
黑树(Red Black Tree)
1.常用常用API
1.1. String 类类
概述
java.lang.String 类代表字符串。
类 String 中包括用于检查各个字符串的方法,比如用于比较比较字符串,搜索搜索字符串,提取子提取子字符串以及创建具有翻译为大写或小大写或小
写写的所有字符的字符串的副本。
常量对象:字符串常量对象是用双引号括起的字符序列。常量对象:字符串常量对象是用双引号括起的字符序列。 例如("abc" )
特点
字符串不变:String是一个final类,字符串的值在创建后不能被更改创建后不能被更改。
因为String对象是不可变的,所以它们可以被共享可以被共享。
String类其实是通过char数组来保存字符串的。
"abc" 等效于 char[] data={ 'a' , 'b' , 'c' } 。
例如:
String str = "abc";
相当于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
// String底层是靠字符数组实现的。
字符串常量池
JVM 为了提高性能和减少内存的开销,在实例化字符串的时候进行了一些优化:使用字符串常量池。
每当我们创建字符串常量时,JVM会首先检查字符串常量池,
如果该字符串已经存在常量池中,那么就直接返回常量池中的实例引用。
如果字符串不存在常量池中,就会实例化该字符串并且将其放到常量池中。
由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串。
1.1.1.常用方法常用方法
构造
// 无参构造
String str = new String();
// 通过字符数组构造
char chars[] = {'a', 'b', 'c'};
String str2 = new String(chars);
// 通过字节数组构造
byte bytes[] = { 97, 98, 99 };
String str3 = new String(bytes);
判断方法
public boolean equals (Object anObject) :将此字符串与指定对象进行比较。
public boolean equalsIgnoreCase (String anotherString) :将此字符串与指定对象进行比较,忽略大小写。
获取功能的方法
public int length () :返回此字符串的长度长度。
public String concat (String str) :将指定的字符串连接连接到该字符串的末尾末尾。
public char charAt (int index) :返回指定索引处的索引处的 char值值。
public int indexOf (String str) :返回指定子字符串第一次出现在该字符串内的索引索引。
public String substring (int beginIndex) :返回一个子字符串返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。(包含 index )
public String substring (int beginIndex, int endIndex) :返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不
含endIndex。(左闭右开左闭右开)
//简单示例使用
String s = "helloworld";
System.out.println(s.substring(1));// 结果"elloworld"
转换功能的方法
public char[] toCharArray () :将此字符串转换为新的字符数组字符数组
public byte[] getBytes () :使用平台的默认字符集将该 String编码转换为新的字节数组字节数组。
public String replace (CharSequence target, CharSequence replacement) :将与target匹配的字符串使用replacement字符串替换。
String str = "study Java";
String replace = str.replace("st", "ST");
System.out.println(replace); // STudy Java
分隔功能的方法
public String[] split(String regex) :将此字符串按照给定的regex(规则)拆分为字符串数组字符串数组
//创建字符串对象
String s = "aa|bb|cc";
String[] strArray = s.split("|"); // ["aa","bb","cc"]
1.1.2.字符串比较字符串比较
String求求你别秀了
String str1 = "aaa";
String str2 = "aaa";
System.out.println(str1 == str2);// true 因为String有常量池
String str3 = new String("aaa");
String str4 = new String("aaa");
System.out.println(str3 == str4);// false 可以看出用new的方式是生成不同的对象,比较堆上的
String s0="helloworld";
String s1="helloworld";
String s2="hello"+"world";
System.out.println(s0==s1); //true 可以看出s0跟s1是指向同一个对象
System.out.println(s0==s2); //true 可以看出s0跟s2是指向同一个对象
String st0="helloworld";
String st1=new String("helloworld");
String st2="hello" + new String("world");
System.out.println( st0==st1 ); //false 用new String() 创建的字符串不是常量,不能在编译期就确定
System.out.println( st0==st2 ); //false st2地址存在堆中,不可能相同
System.out.println( st1==st2 ); //false
String stri1="abc";
String stri2="def";
String stri3=stri1+stri2;
System.out.println(stri3=="abcdef"); //false 变量相+是在的堆内存中创建
String strin0 = "a1";
String strin1 = "a" + 1; //这种不是变量,是常量
System.out.println((strin0 == strin1)); //result = true
String strin2 = "atrue";
String strin3= "a" + "true";
System.out.println((strin2 == strin3)); //result = true
String strin4 = "a3.4";
String strin5 = "a" + 3.4;
System.out.println((strin4 == strin5)); //result = true
String string0 = "ab";
String string1 = "b";
String string2 = "a" + string1;
System.out.println((string0 == string2)); //result = false 在字符串的"+"连接中,有字符串引用存在,而引用的值在程序编译期
是无法确定的
String test="javalanguagespecification";
String test2="java";
String test3="language";
String test4="specification";
System.out.println(test == "java" + "language" + "specification"); //true 字符串字面量拼接操作是在Java编译器编译期间就执
行了
System.out.println(test == test2 + test3 + test4); //false 字符串引用的"+"运算是在Java运行期间执行的
String ss0 = "ab";
final String ss1 = "b";
String ss2 = "a" + ss1;
System.out.println((ss0 == ss2)); //result = true 对于final修饰的变量,它在编译时被解析为常量值的一个本地拷贝存储到自己
的常量池中或嵌入到它的字节码流中。所以此时的"a" + s1和"a" + "b"效果是一样的
String ss10 = "ab";
final String ss11 = getS1();
String ss12 = "a" + ss11;
System.out.println((ss10 == ss12)); //result = false 这里面虽然将s1用final修饰了,但是由于其赋值是通过方法调用返回的,
那么它的值只能在运行期间确定
public static String getS1(){
return "b";
}
总结
单独使用""引号创建的字符串都是常量,编译期编译期就已经确定存储到String Pool中;
使用new String("")创建的对象会存储到heap中,是运行期运行期新创建的;
使用只包含常量只包含常量的字符串连接符如"aa" + "aa" 创建的也是常量,编译期就能确定,已经确定存储到String Pool中;
使用包含变量包含变量(引用引用)的字符串连接符如的字符串连接符如"aa" + s1创建的对象是创建的对象是运行期才创建运行期才创建的,存储在 heap 中;
但是如果s1是被 final 修饰的话,则s1是属于常量属于常量。结果存在String Pool,但是 final 修饰的是一个方法返回的值也是在编译器
确定。
1.1.3. StringBuffer与与 StringBuilder
StringBuilder
原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操
作。
它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动维护数组的
扩容。
常用方法
public StringBuilder append(...):添加任意类型数据的字符串形式,并返回当前对象自身。
public String toString():将当前 StringBuilder 对象转换为 String 对象。
public void setCharAt(int index,char ch) :将给定索引处的字符设置为 ch。(替换第 i 个字符)
public insert(int offset, Char c) :在指定位置之前插入字符在指定位置之前插入字符(串串)
public delete(int start, int end) :删除起始位置(含)到结尾位置(不含)之间的字符串删除起始位置(含)到结尾位置(不含)之间的字符串
StringBuffer
StringBuffer 同 StringBuilder 使用时,只会开辟一块内存空间,可以使用 append 添加 delete 等操作内容。
StringBuffer与 StringBuilder 支持的方法类似,但他是线程安全的 。
1.1.4. String、、StringBuffer、、StringBuilder的区别的区别
可变与不可变可变与不可变:
String 是不可变字符串对象,
StringBuilder和StringBuffer是可变字符串对象(其内部的字符数组长度可变)。
是否多线程安全是否多线程安全:
String 中的对象是不可变的,也就可以理解为常量,显然线程安全。
StringBuffer 中的方法大都采用了synchronized 关键字进行修饰,因此是线程安全的因此是线程安全的,
而 StringBuilder 没有这个修饰,可以被认为是非线程安全非线程安全的。
三者的执行效率如下
StringBuilder > StringBuffer >String 当然这个是相对的,不一定在所有情况下都是这样。
比如String str = "hello"+ "world"的效率就比 StringBuilder st = new StringBuilder().append("hello").append("world") 要高。因此,这三个类是
各有利弊,应当根据不同的情况来进行选择使用
剩余18页未读,继续阅读
资源评论
weixin_38548231
- 粉丝: 7
- 资源: 892
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功