特辣的海藻!1

目录

基础知识点

数组

Arrays(java.util.Arrays)

字符串和字符数组的相互转换

Scanner(Java.util.Scanner)

快速排序


基础知识点
数组

1.定义

  • 一维:数据类型[ ]  数组名 =  new 数据类型[长度]
  • 二维:数据类型[ ][ ]  数组名  =  new  数据类型[行数][列数]

2.数组长度

数组名.length

tips:数组的长度是数组的属性,不是方法,因此不需要加括号(所以length()是错误的)

Arrays(java.util.Arrays)

1.排序

Arrays.sort()

● 实现原理

    对于基本类型数组,使用双轴快速排序(Dual-Pivot Quicksort),时间复杂度为O(nlogn)

    对于对象数组,使用TimSort算法,时间复杂度为O(nlogn)

● 对基本类型数组(如int[ ],double[ ] 等)进行升序排序

● 对对象数组(如String[ ]、Integer[ ]等)进行排序,对象必须实现Comparable接口

● 默认升序排序

● 降序排序

Integerp[ numbers = {5, 3, 9, 1, 6};

// 使用Arrays.sort()和Comparator实现降序排序
Arrays.sort(numbers, Collections.reverseOrder());

System.out.println(Arrays.toString(numbers)); // [9, 6, 5, 3, 1]

tips:

 Collection.reverseOrder() 返回一个降序比较器,适用于对象数组(如Integer[ ]、String[ ]),对于基本类型数组(如int[ ] ),需要先将其转换为对象数组(如Integer[ ] )

2.搜索

Arrays.binarySearh()

用于再已排序的数组中查找元素

● 示例

int[] arr = {1,3,5,6,9};
int index = Arrays.binarySearch(arr, 5);

● Tips

  数组必须是有序的,否则结果未定义。

  如果找到元素,返回元素的索引,否则返回负数。

3.填充

Arrays.fill()

用于用指定值填充数组

● 示例

int [] arr = new int[5];
Arrays.fill(arr, 10);  // arr = {10, 10, 10, 10, 10}

4.比较

Arrays.equals()

用于比较两个数组是否相等

 ● 示例

int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
boolean isEqual = Arrays.equals(arr1, arr2);  // isEqual = true;

5.转换

Arrays.toString() 和 Arrays.asList() 是常用的转换方法

● 示例

int[] arr = {1, 2, 3};
String str = Arrays.toString(arr);  // str = "[1, 2, 3]"

String name = {"Alice", "Bob", "Charlie"};
List<String> list = Arrays.asList(names);  // list = ["Alice", "Bob", "Charlie"];

6.复制

Arrays,copyOf() 和 Arrays.copyOfRange() 用于复制数组

● 示例

int[] arr = {1, 2, 3, 4, 5};
int[] copy1 = Arrays.copyOf(arr, 3);  // copy1 = {1, 2, 3}
int[] copy2 = Arrays.copyOfRange(arr, 1, 4);  // copy2 = {2, 3, 4}

● Tips

  起始位置 - 终止位置

  只写一个参数代表终止位置,起始位置默认为0

  左闭右开

字符串和字符数组的相互转换

字符串 --> 字符数组

String类的toCharArray()

String str = "Hello, World!";
char[] ch = str.toCharArray();

字符数组 --> 字符串

使用String的构造函数:通过字符数组创建一个新的String对象

char[] ch = {'H', 'e', 'l', 'l', 'o'};
String str = new String(ch);

使用String.valueOf(char[ ])静态方法

char[] ch = {'H', 'e', 'l', 'l', 'o'};
String str = String.valueOf(ch);

部分数组转换为字符串:构造函数指定起始位置和长度

// 将从索引0开始的5个字符转为字符串
char[] ch = {'H', 'e', 'l', 'l', 'o'};
String str = new String(ch, 0, 5); // 
Scanner(Java.util.Scanner)

 构造方法

● 从控制台输入

Scanner sc = new Scanner(System.in);

● 从文件输入

Scanner sc = new Scanner(new File("input.txt"));

● 从字符串输入

Scanner sc = new Scanner("Hello World");

读取基本类型

  • nextInt():读取一个int类型的值
  • nextLong():读取一个Long类型的值
  • nextDouble:读取一个double类型的值
  • nextFloat():读取一个float类型的值
  • nextBoolean():读取一个boolean类型的值

读取字符串

● next():读取一个以空白符分隔的单词

● nextLine():读取一行文本包括空格、换行符

Tips:

  ● next()会忽略输入中的空白符(如空格、制表符等),而nextLine()会读取整行内容,包括空白符

  ● 在使用nextLine()之前,如果调用了nextInt()、nextDouble()等方法,需要额外调用一次nextLine()来清除缓冲区

检查输入

  • hasNextInt():检查下一个输入是否是int类型
  • hasNextDouble():检查下一个输入是否是double类型
  • hasNextBoolean():检查下一个输入是否是boolean类型
  • hasNextLine():检查是否有下一行输入

使用分隔符

Scanner默认使用空白符(如空格、制表符等)作为分隔符,但可以通过useDelimeter()方法自定义分隔符。

Scanner sc = new Scanner("Apple,Orange,Banana");
sc.useDelimeter(",");  // 使用逗号作为分隔符

while (sc.hasNext()) {
    System.out.println(sc.next());
}

// 输出:
// Apple
// Orange
// Banana

 关闭Scanner

Scanner类实现了Closeable接口,因此在使用完毕后应调用close()方法释放资源

快速排序
public class Main {
    
    public static void QuickSort(int[] nums, int l, int r) {
        if(l >= r) return;
        
        int i = l-1, j = r+1, pivot = nums[(l+r) >> 1];

        while(i < j) {
            do i++; while(nums[i] < pivot);
            do j--; while(nums[j] > pivot);
            
            if(i < j) {
                int t = nums[i];
                nums[i] = nums[j];
                nums[j] = t;
            }
            
            QuickSort(nums, l, j);
            QuickSort(nums, j+1, r);
        }
    }
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        int[] nums = new int[n];

        for(int i = 0; i < n; i++)
            nums[i] = sc.nextInt();

        QuickSort(nums, 0, n-1);

        for(int i = 0; i < n; i++)
            System.out.print(nums[i] + " ");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值