Java内置工具类
1. String类
-
首先,String类的值不能被更改
如果对String对象操作(增加长度等),会新开辟一块内存空间,再更改String的指向(如果有的话),而原来字符串不变(可能指向被更改或者不存在)。因此如果要大量更改String类型时不推荐用他,应该用StringBuffer或者StringBulider
-
String类与其他类作和结果都是String类型
2. StringBuffer和StringBuilder类
- 他们在字符串需要大量更改时好用,他们不需要另外申请字符串空间
- StringBuffer适用于多线程,他是多线程安全的,StringBuilder适用于单线程,他相比于前者方法调用更快
3. 用户输入类
3.1 Scanner类
-
首先初始化Scanner类对象
Scanner in = new Scanner(System.in); 其中,System.in就是标准输入设备,也就是键盘
-
确定你要输入的数据类型,并根据其选择方法调用比如:
字符串对应:String str = in.next();
整形对应:int a = in.nextInt();
长整型:long b = in.nextLong();
-
进行“关闭”操作
in.close();
public class Demo {
public static void main(String[] args) {
//从键盘接收数据
Scanner scanner = new Scanner(System.in);
//判断是否有非空白输入(如果一直是空白则一直等待输入)
if (scanner.hasNext()){
System.out.println(6);
String str = scanner.nextLine();
System.out.println(6);
}
scanner.close();
}
}
- hasNext()和hasNextLine区别:
当程序遇到它们时就会停下等待输入,hasNext()会判断键盘缓冲区是否有非空白输入,若有,则会把非空白输入放入缓冲区,否则会一直等待非空白输入,而hasNextLine()会判断键盘缓冲区是否有输入(包括空白输入),回车键结束输入然后把所得输入放入键盘缓冲区
- scanner.next()和scanner.nextLine()区别:
两者都会从键盘缓冲区读取数据,如果键盘缓冲区没有数据,则会等待输入,前者会读取非空白输入(当遇到第一个非空白数据开始读取,之后在遇到空白数据会停下,若无非空白数据则不会结束),并释放键盘缓冲区,后者全部读取,以回车为结束符,并释放键盘缓冲区
- hasNextInt()
若得到的非空白数据是整型,则返回true,若输入不是整型返回false(空白除外,空白会一直等待输入),hasNextDouble()同理(遵循自动类型转换规则)
4. 数组
4.1 一维数组
-
定义方式:
-
赋值定义:
int[] array1 = {1, 2, 3, 4};
-
只申请空间:int[] array2 = new int[10];
-
public class Test {
public static void main(String[] args) {
int[] array = {1, 2, 3, 4, 5, 6, 7, 8};
for(int i : array) {
System.out.print(i);
System.out.print(" ");
}
System.out.println();
System.out.println(array.getClass());
}
}
结果:
1 2 3 4 5 6 7 8
class [I
可见:int 数组的类是: [I 那么double数组的类是 [D 等等
-
八大基本类型数组空间默认值是0,其他类默认是null(float和double默认0.0,boolean默认false)
-
因为对象的本质是指针,所以数组本身也是一个指针,里面的内容指向不同的内存空间首地址
4.2 数组的clone()方法与浅克隆
-
浅克隆
浅克隆指的是只是将空间的指向复制一份(现在新复制的和之前的指向同一内存空间)
-
clone()方法就是浅克隆:创造一个新的数组,指向他克隆的数组指向的空间
4.3 二维数组
二维数组的每一个元素本质是一维数组,因为一维数组的大小我们可以自己制定,所以二位数组中每个“列”大小不固定
想更直观了解二维数组的话,可以先创建一个一维数组,再将其赋值给一个二维数组:
public class Test {
public static void main(String[] args) {
Son[] array1 = new Son[5];
Son[] array2 = new Son[2];
Son[][] array = new Son[3][];
array[0] = array1;
array[1] = array2;
}
}
上面的代码中,我们创建了一个行数为3的二维数组,然后分别将大小为5和2的一维数组赋值给这个二维数组
5. 日历类Calendar
- 初始化和调用基本方法
public class Test {
public static void main(String[] args) {
//通过静态方法获得目标对象(应该是单例的)
Calendar today = Calendar.getInstance();
//输出年 月 日 时(24制) 分 秒 毫秒
System.out.println(today.get(Calendar.YEAR));
System.out.println(today.get(Calendar.MONTH));
System.out.println(today.get(Calendar.DATE));
System.out.println(today.get(Calendar.HOUR_OF_DAY));
System.out.println(today.get(Calendar.MINUTE));
System.out.println(today.get(Calendar.SECOND));
System.out.println(today.get(Calendar.MILLISECOND));
}
}
注意:在Java中,我们日常生活中的1月在这里是0月(也就是0月到11月),周末对应的是0(也就是周0到周6)
-
日期输出类 SimpleDateFormat
public class Test { public static void main(String[] args) { Calendar today = Calendar.getInstance(); String df = "YYYY年MM月dd日HH时 mm分:ss秒"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat(df); String str = simpleDateFormat.format(today.getTime()); System.out.println(str); } }
SimpleDateFormat构造时将对应格式的字符串传递过去,然后调用里面的format方法,在输出就完成了很好的日期输出
-
获得某一天对应的月份天数
public class Test { public static void main(String[] args) { Calendar date = Calendar.getInstance(); //通过set方法设置对应的某一天 date.set(2023, 5, 1); System.out.println(date.getActualMaximum(Calendar.DATE)); } }
getActualMaximum方法的参数可以有很多,可以获得对应的信息
6. 自动拆箱与装箱以及泛型初步
-
自动拆箱与装箱:八大基本类型对应了八种类类型,如:int和Integer,它们在需要时可以自动转换。
-
泛型只能是类类型
public class Parent <T> {
public int i = 0;
private T b;
public T getNum(T t) {
return t;
}
}
-
类后面带上
代表这个类可以以T作为泛型参数,还可以这么写 public class Parent <P, Q>
这就是以 P Q作为泛型代表
-
方法返回值类型前面加上
,代表这个方法可以用泛型代表类型
public class Parent{
public int i = 0;
public <T> T getNum(T t) {
return t;
}
}
7. ArrayList和LinkedList
-
两者的基本定义
ArrayList是动态数组,底层是可以扩张大小的数组,在定义时默认大小为10,当我们需要更大空间的时候,他会创造1.5倍当前空间大小的数组,并将当前数组的值复制给新的数组;LinkedList是链表,在空间中分布可以不连续
-
使用场景
- ArrayList适合查找,不适合大量的增删(会创造新数组,大量数据更改)
- LinkedList适合增删,不适合查找(查找按顺序从头开始,很慢)
-
indexOf()方法
这个方法会自动调用equals()方法来进行“相等”判断
list.indexOf(a) :返回a在list中的下标,不在则返回-1
-
contain()方法
list.contain(a) :判断列表中是否存在a
8. HashMap
HashMap是一种双泛型类,主要是体现在对“键值对”的操作
特点:
1. 键不能重复,值可以重复
2. 对同一个键第二次put会将其对应的值更改
3. 遍历是无序的
public class Test {
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<>();
//放入键值对
map.put(1, "张三");
map.put(2, "李四");
map.put(3, null);
for(Integer i : map.keySet()) {
//取出每个键对应的值并输出
String name = map.get(i);
System.out.println(name);
}
}
}
优点:
HashMap在键值对大于16组之后,采用“红黑树”(自平衡二叉树查找),其增删改查最差的时间复杂度是O (logN),对于庞大的数据其高效性十分突出
标签:内置,Java,String,Calendar,System,数组,工具,public,out From: https://www.cnblogs.com/geeklee/p/17367137.html