Java内置工具类
1.字符串类
1.String类
- String类不能被修改
- 其被修改的本质是申请新的内存空间,所以其每一次更改都会new新的对象
- 适用于需要量小不怎么修改的字符串时
2.StringBuffer和StringBuilder
- StringBuffer是多线程安全的类,适用于多线程。
- StringBuilder是多线程不安全的类,适用于单线程。
- 他们在被修改的时候不会new对象,适用于大量的修改字符串时
2.Scanner类
public class Test {
public static void main(String[] args) {
//通过new一个Scanner类对象获得标准输入设备
Scanner in = new Scanner(System.in);
int data;
//当输入的数据时Int类型时进行循环并输出,不是int直接返回false
while(in.hasNextInt()) {
data = in.nextInt();
System.out.println(data);
}
in.close();
}
}
- hasNext()和hasNextLine区别:
当程序遇到它们时就会停下等待输入,hasNext()会判断键盘缓冲区是否有非空白输入,若有,则会把非空白输入放入缓冲区,否则会一直等待非空白输入,而hasNextLine()会判断键盘缓冲区是否有输入(包括空白输入),回车键结束输入然后把所得输入放入键盘缓冲区
- in.next()和in.nextLine()区别:
两者都会从键盘缓冲区读取数据,前者会读取非空白输入(当遇到第一个非空白数据开始读取,之后在遇到空白数据会停下,若无非空白数据则不会结束),并释放键盘缓冲区,后者全部读取,以回车为结束符,并释放键盘缓冲区
- hasNextInt()
若得到的非空白数据是整型,则返回true,若输入不是整型返回false(空白除外,空白会一直等待输入),hasNextDouble()同理(遵循自动类型转换规则)
3. 一维数组
public class Test {
public static void main(String[] args) {
int[] arrInt = {1, 2, 3, 4};
Double[] arrDouble = new Double[10];
Float[] arrFloat;
arrFloat = new Float[5];
//输出三个数组的类
System.out.println(arrInt.getClass());
System.out.println(arrDouble.getClass());
System.out.println(arrFloat.getClass());
System.out.print("arrInt数组的内容:");
for(int i : arrInt) {
System.out.print(i + " ");
}
System.out.println();
System.out.print("arrDouble数组的内容:");
for(Double i : arrDouble) {
System.out.print(i + " ");
}
System.out.println();
System.out.println("arrDouble的长度:" + arrDouble.length);
System.out.print("arrFloat数组的内容:");
for(Float i : arrFloat) {
System.out.print(i + " ");
}
}
}
结果:
class [I
class [Ljava.lang.Double;
class [Ljava.lang.Float;
arrInt数组的内容:1 2 3 4
arrDouble数组的内容:null null null null null null null null null null
arrDouble的长度:10
arrFloat数组的内容:null null null null null
注意:
八大基本类数组内容默认是0,其他类默认是null,哪怕未赋初值,数组长度size()也会返回设定的长度
4.日历类Calendar
public class Test {
public static void main(String[] args) {
//使用日历类的静态方法获得单例的对象
Calendar today = Calendar.getInstance();
//定义下面需要的格式字符串对象
String df = "YYYY年 MM 月 dd 日 HH时mm分ss秒";
//把df字符串作为参数,申请SimpleDateFormat的对象
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(df);
//调用format()方法
String str = simpleDateFormat.format(today.getTime());
//输出str
System.out.println(str);
}
}
5.自动拆箱与封箱
Java八大基本类型与他们对应的八大类可以自动转换
6.泛型
- 当某一个类有泛型标志,则这个类中可以用这个当做一种数据类型
public class MyGeneric <T, K>{
public T a;
private K b;
}
- 当一个方法返回值类型前出现泛型标志,则代表这个方法可以用泛型
public static <T> T getA(T a){
return a;
}
7.ArrayList和LinkedList
public class Test {
public static void main(String[] args) {
ArrayList<Integer> arrayList = new ArrayList<>();
LinkedList<String> linkedList = new LinkedList<>();
arrayList.add(1);
arrayList.add(2);
int num = arrayList.get(0);
System.out.println("arrayList的第一个元素是 " + num);
int location = arrayList.indexOf(1);
System.out.println("1在arrayList的下表是:" + location);
System.out.println("判断3是否存在于arrayList中:" + arrayList.contains(3));
}
}
注意: indexof()方法contains方法是依赖equals()方法的,默认情况下equals()方法比较的是对象的内存地址,在ArrayList类中重写了equals()方法和hashCode()方法,所以我们可以这样比较
8. HashMap
public class Test {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
map.put(0, "张三");
map.put(1, "李四");
map.put(2, "王五");
for(int i : map.keySet()) {
System.out.println(map.get(i));
}
}
}
结果:
张三
李四
王五
特征:
- 键值唯一,如果给已经赋过值的键赋值,会覆盖之前的值
- map.size()会输出有效键值对的个数
- 在键值对个数大于16后,会采用“红黑树”高效的数据结构,对于大量的数据操作是,效果十分明显
- 红黑树操作最差的时间复杂度是O(logN)