1.数组工具类
java.util.Arrays
- Arrays是一个工具类。
- 其中有一个sort()方法,可以排序,静态方法(为了方便使用,工具类的方法一般都是静态,所以采用类名调用即可)。
- Arrays.sort();
- 需要使用Arrays方法时查找API帮助文档,切记死记硬背,多用几次就记住了。(在IDEA中按两次Shift键,查找类,即可查找类中的方法)
- 二分查找方法:
Arrays.binarySearch(arr,x);x为要查找的值。返回-1元素不存在。
2.字符串类(String)
- 字符串一旦创建不能更改.字符串是引用数据类型.
- 在jdk当中,字符串都是直接存储在"方法区"的字符串常量池"当中的.因为字符串在实际开发中使用太频繁,为了执行效率,所以把字符串放到了方法去的字符串常量中.
- 拼接操作并没有更改字符串,而是在字符串常量池中生成了另一个字符串对象.遇到双引号括起来的字符串就会生成一个字符串对象.
- 如果用new创建一个字符串,会在堆内存中生成一个对象,但是字符串常量池中也有.
*
- 直接定义字符串对象时,用双等号比较两个字符串相等的原因
- 而用new关键字创建String对象时.用双号比较不相等的原因如下图:.所以应该用equals方法.巧了String类重写了equals方法.
- 字符串为String类的对象者是为什么"fas".equals(k))可以使用的原因
- 题目:
- 将byte数组中的部分或全部元素转换成字符串方法
- byte[] bytes ={97,98,99};
String s2 = new String(bytes);//这里还有两个量可以写,第一是,下标起始位置,二是转换的长度.
System.out.println(s2);(默认调用toString方法,String类重写了toString方法.所以输出abc). - char数组与上面的byte数组类似.
- compareTo方法类似于C语言的那个strcmp()函数.(在string.h 库函数中,按照字母的排序,比较两个字符串是否相等)
- contains()方法,判断前面的字符串是否包含后面的字符串,返回值为boolean类型.
- endWith(".java")方法判断字符串是否以.java结尾.
- equalsIgnoreCase在equals基础上忽略大小写.
- getBytes()方法将字符串转换成byte数组.
- indexOf()方法,判断子字符串在字符串首次出现的索引.
- lastIndexOf方法,最后一次出现的索引.
- isEmpty()方法,判断某个字符串是否为空串
- .判断数组长度是length属性,判断字符串是否为空串用的是length方法.
- replace()方法,将字符串里的老字符串替换成新的字符串.
- split()以括号内的字符进行拆分,存入String数组中.
- StartWith()判断某个字符串是否以子字符串开始
- substring()返回从指定位置开始结束的字符串,两个参数给的话可以返回指定两个位置间的字符串,左闭右开.
- toCharArray()将字符串转换成char数组.
- toLowerCase()将字符串转换成小写
- trim()方法,去除字符串前面和后面的空字符.
- String中只有一个方法是static,不需要对象I(valueof方法),将非字符转换成字符串.并且println方法调用了valueof方法,所以 能打印在控制台上的都是字符串.
开发中,如果需要进行字符串的频繁拼接,会存在什么问题?
因为java的字符串是不可变的,每次拼接都会产生新的字符串.这样会占用大量的方法区内存,造成空间的浪费(字符串常量值).
- 这时StringBuffer就粉墨登场,哈哈,
- 用的时候,倒入类:import java.util.StringBuffer;
- 默认创建一个初始化容量为16的byte[]数组,用来保存字符串.想要追加append()上,会自动扩容,想要删除delete方法上…
- StringBuffer的优化.解决默认16空间,导致空间不足,经常扩容的问题.即创建时指定容量.
- StringBuffer sb = new StringBuffer(100);
StringBuilder和StringBuffer
StringBuffer中的方法都有:synchronized关键字修饰,表示StringBuffer在多线程环境下时安全的.而StringBuilder是不安全的.