首页 > 编程语言 >Java内置工具类

Java内置工具类

时间:2023-05-01 22:44:06浏览次数:38  
标签:内置 Java String Calendar System 数组 工具 public out

Java内置工具类

1. String类

  • 首先,String类的值不能被更改

    如果对String对象操作(增加长度等),会新开辟一块内存空间,再更改String的指向(如果有的话),而原来字符串不变(可能指向被更改或者不存在)。因此如果要大量更改String类型时不推荐用他,应该用StringBuffer或者StringBulider

  • String类与其他类作和结果都是String类型

2. StringBuffer和StringBuilder类

  • 他们在字符串需要大量更改时好用,他们不需要另外申请字符串空间
  • StringBuffer适用于多线程,他是多线程安全的,StringBuilder适用于单线程,他相比于前者方法调用更快

3. 用户输入类

3.1 Scanner类

  1. 首先初始化Scanner类对象

    Scanner in = new Scanner(System.in); 其中,System.in就是标准输入设备,也就是键盘

  2. 确定你要输入的数据类型,并根据其选择方法调用比如:

    字符串对应:String str = in.next();

    整形对应:int a = in.nextInt();

    长整型:long b = in.nextLong();

  3. 进行“关闭”操作

    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 一维数组

  • 定义方式:

    1. 赋值定义:

      int[] array1 = {1, 2, 3, 4};

    2. 只申请空间: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()方法与浅克隆

  1. 浅克隆

    浅克隆指的是只是将空间的指向复制一份(现在新复制的和之前的指向同一内存空间)

  2. 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

  1. 初始化和调用基本方法
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)

  1. 日期输出类 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方法,在输出就完成了很好的日期输出

  2. 获得某一天对应的月份天数

    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. 自动拆箱与装箱以及泛型初步

  1. 自动拆箱与装箱:八大基本类型对应了八种类类型,如:int和Integer,它们在需要时可以自动转换。

  2. 泛型只能是类类型

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

  1. 两者的基本定义

    ArrayList是动态数组,底层是可以扩张大小的数组,在定义时默认大小为10,当我们需要更大空间的时候,他会创造1.5倍当前空间大小的数组,并将当前数组的值复制给新的数组;LinkedList是链表,在空间中分布可以不连续

  2. 使用场景

    • ArrayList适合查找,不适合大量的增删(会创造新数组,大量数据更改)
    • LinkedList适合增删,不适合查找(查找按顺序从头开始,很慢)
  3. indexOf()方法

    这个方法会自动调用equals()方法来进行“相等”判断

    list.indexOf(a) :返回a在list中的下标,不在则返回-1

  4. 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

相关文章

  • Java异常
    原文链接:Java里的异常(Exception)详解(一)什么是java里的异常由于java是c\c++发展而来的, 首先我们先看看c语言里的错误.1.c语言里的错误我们实现一个程序的过程包括, 代码编写,编译代码成为程序, 执行程序.其中大部分常见的语法错误都会被编译代码这样部过滤掉. 但......
  • Linq大白话深入浅出从零基础到手写开源工具兵贵神速系列(一)——为啥需要Linq
    所有的技术创新都是为了解决编程实践中的难点和痛点!如果我们不懂得这项技术所要解决的难点和痛点,我们在使用这项技术的时候就很可能走偏,在细节末节上隔靴搔痒,耗费很长的时间还掌握不了这项技术的精髓!而很多道友虽然在项目中掌握了一些基本的用法但是知其然而不知其所以然,不知道......
  • PB加密,PBD加密,杜绝PB程序反编译,PB加密工具
    如下是一个pbd混淆加密之后用反编译打开时的效果图(混淆器已经开发了十年,其代码混淆保护效果一直满意,用图说话)工具自2009年开发,2010年发布测试版,经历1-2年的测试改进,至最早的客户从2012年开始使用正式版开始,已累计数万次加密并消除了写PBD文件的BUG从而稳定下来,从POS到ERP,从各种终端......
  • 前端进化笔记-JavaScript(二)
    因为作者学过其他类c语言,就不对大家都熟悉的内容进行赘述了。语法JavaScript区分大小写标识符:变量,函数,属性,函数参数的名称第一个字符必须是字母,下划线(_),美元符号($);关键字、保留字、true、false和null不能用作标识符作者在后续阅读的过程中,发现对各种名称不熟悉导致阅读不......
  • JavaWeb复习笔记
    MysqlsqlDDLDMLDQL约束设计多表查询内连接外连接子查询事务......
  • 列举所了解的测试工具
    测试管理工具:TestDirector、jira、svn.性能测试工具:loadrunner、jmeter、httperf.白盒子测试工具:JUnit、cppunit、gtest.持续集成工具:jenkins、Hudson.网络测试工具:iperf、lxia、tcppium.app自动化工具:appium、Monkey.......
  • Java教程:Springboot项目如何使用Test单元测试
    今天早上来公司领导突然分配了任务,就是简单的测试一下实体的添加修改功能,要使用到Juntil单元测试,目前使用springboot项目,jpa,maven管理,回忆起曾经用到过@Test注解,于是开始唰唰唰的写起了测试咧,然鹅,一顿报错,依赖无法注入,空指针,乱七八糟的一大通,无奈开始借助百度,终于实现了单元测试,......
  • java-echart报表插件使用笔记
    java-echart报表插件使用笔记  报表插件Echart java类 packagecom.spring.controller;importjava.io.IOException;importjava.util.Arrays;importjava.util.Date;importjava.util.List;importjavax.servlet.http.HttpServletRequest;importjavax.servle......
  • JAVA创建线程的方式总结
    1.继承Thread类通过继承Thread类,并重写它的run方法,就可以创建一个线程。publicclassTestThread1extendsThread{publicTestThread1(Stringname){super(name);}@Overridepublicvoidrun(){System.out.println(Thread.currentTh......
  • java:输入一个字符串,在其中寻找长度最长的,不含重复字符的字符串,如果有多个长度相同的最
    publicclasstest2{publicstaticList<String>findLongestSubstring(Strings){List<String>result=newArrayList<>();intn=s.length();Map<Character,Integer>map=newHashMap<......