Java蓝桥杯基础总结

1. 变量大小与类型

在这里插入图片描述

在这里插入图片描述

2. 输入输出

scanner.next() 从缓冲区接收字符遇到空格后停止。 相当于 cin 和 scanf
scanner.nextLine() 从缓冲区接收字符,并且接收空格,遇到换行才停止,并且会自动舍弃换行。 相当于 gets()

scanner.hasNext() 判断缓存区中还有没有数据,有返回true, 否则等待输入。
scanner.hasNextInt() 判断输入的是不是int型的数据,是的话返回true 否则继续扫描缓冲区,或者等待输入。
scanner.hasNextDouble() 判断输入的是不是double型的数据,是的话返回true 否则继续扫描缓冲区,或者等待输入。

Scanner scanner = new Scanner(System.in); // 正常输入
Scanner scanner = new Scanner(new File("src/XX"));// 指定文件输入

int a = 5;
System.out.println(a); // 正常输出到控制台
System.setOut(new PrintStream(new File("src/XX"))); // 设置输出到指定文件,当字符串特别长时只能用这种方法
System.out.println(a); // 会输出到指定文件

int sum = 0;
while (scanner.hasNext()) {  //直到输入-1才停止
    int a = scanner.nextInt();
    if (a == -1)
        break;
    sum += a;
}
System.out.println(sum);

System.out.printf(); //和C/C++中的printf一样。 可使用格式控制符进行格式化输出。
System.out.print() //不能使用格式控制符进行格式化输出,仅输出变量
System.out.println() //不能使用格式控制符进行格式化输出,仅输出变量,但会自动输出一个换行。

3. 基本数据类型与操作

Arrays.fill(int[] arr, int x);   //将arr内的每个元素赋值为x
 
System.arraycopy(Object a, int begin_a, Object b, int begin_b, int length);  //从a复制到b,复制从a数组指定的位置begin_a开始,到begin_a+length-1结束。放置从b的begin_b开始,到begin_b+length-1结束。
Arrays.copyOf(int[] a, int length);  //从a数组的第一个元素开始复制,复制length个元素。
Arrays.copyOfRange(int[] a, int begin, int to);  //从a数组begin开始复制,到to-1位置结束。

String s1 = "abcdef";
char[] s2 = s1.toCharArray();
for(int i = 0; i < s2.length; i++){   //遍历字符串,需要先将其转化为字符数组
    System.out.println(s2[i]);
}

4. 常用java类

日期、数学

这里只举例常用的Java类,不用去记每种用法,太多也记不住,主语要直到怎么用就可以,具体用法到时候也可以具体参考文档

BigIntegerBigDecimal 大整数与大浮点数

Math类:四舍五入用 Math.round(double x);

在java中String类不可变的,创建一个String对象后不能更改它的值。所以如果需要对原字符串进行一些改动操作,就需要用StringBuilder类或者StringBuffer类,StringBuilder比StringBuffer更快一些,缺点是StringBuilder不是线程安全的,但在算法竞赛中一般我们用不到多线程。所以,主要推荐使用StringBuilder类。

Calendar 类是一个抽象类,它为特定瞬间与一组诸如YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
瞬间可用毫秒值来表示,它是距历元(即格林威治标准时间 1970 年 1 月 1 日的 00:00:00.000,格里高利历)的偏移量。

Calendar c = Calendar.getInstance();  //生成一个新的Calendar类
c.set(2022, 4, 6, 10, 10, 10);  //set(int year, int month, int date, int hourOfDay, int minute, int second)
c.set(Calendar.YEAR, 2022);  //set(int field, int value) 将给定的日历字段设置为给定的值
c.set(Calendar.MONTH, 4);
c.set(Calendar.DAY_OF_MONTH, 5);
System.out.println(c.get(Calendar.YEAR));  //输出当前年
System.out.println(c.get(Calendar.MONTH));  //输出当前月
System.out.println(c.get(Calendar.DATE));  //输出当前日
System.out.println(c.get(Calendar.DAY_OF_WEEK));  //输出当前的星期
System.out.println(c.get(Calendar.HOUR_OF_DAY));  //输出当前小时
System.out.println(c.get(Calendar.MINUTE));  //输出当前分钟
System.out.println(c.get(Calendar.SECOND));  //输出当前秒数
System.out.println(c.getTimeInMillis());  //输出当前时间戳
System.out.println(c.getTime());  //输出的是一个Date对象,表示当前的日期
System.err.println(c.get(Calendar.DAY_OF_WEEK));

List

ArrayList 类可以实现可增长的对象数组。

ArrayList();//构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
ArrayList(int initialCapacity);//使用指定的初始容量和容量增量构造一个空的向量。

LinkedList是List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。

Stack<Integer> Stack = new Stack<>();  //第一种栈的实现方式
LinkedList<Integer> Stack = new LinkedList<>(); // LinkedList没有实现Stack接口,但是我们只需要用其中的关于栈的方法。
Queue<Integer> Queue = new LinkedList<>();//LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。

Map

Map是一种key-value键值对存储的容器结构

HashMap是基于哈希表的 Map 接口的实现,是无序的

TreeMap是基于红黑树实现的,是有序的, 可进行排序。此实现为 containsKey、get、put 和 remove 操作提供受保证的 log(n) 时间开销

Set

set容器的特点是不包含重复元素,也就是说自动去重。

HashSet基于哈希表实现,无序。

TreeSet基于红黑树实现。有序。

因为TreeSet和TreeMap是基于红黑树实现,所以可以二分查找一个比当前元素大的最小元素,或者比当前元素小的最大元素。

ceiling(E e)//返回一个大于等于当前元素的最小元素,不存在返回null
floor(E e)//返回一个小于等于当前元素的最大元素,不存在返回null
higher(E e)//返回此 set 中严格大于给定元素的最小元素,不存在返回null
lower(E e)//返回此set中严格小于给定元素的最大元素,不存在返回null
first()//返回第一个元素
last()//返回最后一个元素

PriorityQueue

优先队列,本质是一个堆, 默认情况下堆顶每次都保留最小值(小根堆),每插入一个元素,仍动态维护堆顶为最小值。

PriorityQueue<Integer> container = new PriorityQueue<>(new Comparator<Integer>() { //大根堆构造
	@Override
    public int compare(Integer o1, Integer o2) {
    	return o2 - o1; // 按照降序排序
    }
});

Sort排序

在做一些算法题时常常会需要对数组、自定义对象、集合进行排序. 在java中对数组排序提供了Arrays.sort()方法,对集合排序提供Collections.sort()方法。对自定义对象排序时要自己重写比较器,对象数组则调用Arrays.sort(),对象集合则调用Collections.sort()。两个方法默认都是升序,也可以重写比较器,实现降序。

TreeSet<Integer> s = new TreeSet<>(new Comparator<Integer>(){  //自定义TreeSet排序规则
		public int compare(Integer a, Integer b) {  
	        return b - a; 
		}
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦码城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值