Java数据结构基本操作

说明:这是自己上机考试前写的针对个人不足的md记录文件,有链接的都可以按照对应的板块看看。主要为了熟悉操作。方便自己学习数据结构的时候能够专心于算法,写的时候不会掣肘。


结合另一个基本操作文件复习(主要是流的应用,列表和list的转换等等,这里没粘贴)


1.转义字符应用

`String[] split = order.split("\\.");`中split里对于转义的运用

https://www.cnblogs.com/that-jay/p/13280995.html

补充:(转义字符的概念)

https://codegym.cc/zh/groups/posts/java-escape-characters-zh

2.sb.setCharAt()用法

https://wenku.csdn.net/answer/a11ee5bd93a143469837aa910694e1c0

3.进制转换

https://blog.csdn.net/szwangdf/article/details/2601941

4.String.format用法

https://blog.csdn.net/lonely_fireworks/article/details/7962171

5.list,hashset和hashmap使用,存储对象的习题用法,遍历hashmap。

声明这三个平常用什么结构,arraylist/hashset/hashmap/linkedlist/LinkedHashSet/LinkedHashMap

6.Math的api使用

https://www.runoob.com/java/java-number.html

7.正则表达式

找下菜鸟教程用法。

8.Character的使用

https://www.runoob.com/java/java-character.html

9.lowercase的使用

https://www.runoob.com/java/java-string-tolowercase.html

10.找差值,hashset的用法,a-b=diff   =    a=b+diff

看下代码就知道了。

    private static int diffCombination(int[] arr, int diff) {
        if (diff == 0) {
            return 0;
        }
        Set<Integer> set = new HashSet<>();
        for (int i : arr) {
            set.add(i);
        }
        int count = 0;

        for (int i : arr) {
            if (set.contains(i + diff)) {   //每个元素的值为1
                count++;
            }
        }
        return count;
    }

11.滑动窗口的写法,滑动窗口的简洁写法(特定场景)

第一个自己写的,第二个一个大哥写的,感觉很简洁,就是觉得使用场景不多?

    private static int getLongestVowelStringLength(String input) {
        if (input.length() == 0) {
            return 0;
        }
        Set<String> vowel = new HashSet<>();
        vowel.add("a");
        vowel.add("e");
        vowel.add("i");
        vowel.add("o");
        vowel.add("u");
        vowel.add("A");
        vowel.add("E");
        vowel.add("I");
        vowel.add("O");
        vowel.add("U");
        if (input.length() == 1) {
            return vowel.contains(input) ? 1 : 0;
        }
        int res = 0;
        int fast = 0;
        int slow = 0;
        while (fast < input.length()) {
            if (vowel.contains(input.charAt(fast) + "")) {
                res = Math.max(res, fast - slow + 1);
                fast++;
            } else {
                slow = fast++;
                slow++;     //slow=++fast;
            }
        }
        return res;
    }

    private static int getLongestVowelStringLength2(String input) {      // 滑动窗口简洁写法,找连续的相同数
        char[] s = input.toLowerCase(Locale.ROOT).toCharArray();
        int count = 0;
        int res = 0;
        for (char c : s) {
            if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
                count++;
                res = Math.max(res, count);
            } else {
                count = 0;
            }
        }
        return res;
    }

12.前缀和,每次遍历都得给前缀和变量增量

看代码随想录 区间和。

13.循环找最大值,sum初始化MIN_VALUE,循环找最小值,sum初始化MAX_VALUE。注意sum+=的位置

,一般是全局变量

14.指令性应用题,暂时不太会,希望别出

15.四则运算、计算器,运用到单调栈的,不太熟

16.整除和ceil

整除:

```
java10/3和10/3.0的区别:
在Java中,10/3 和 10/3.0 的主要区别在于它们涉及的数据类型以及由此产生的运算结果。

数据类型:

10/3:这里,10 和 3 都是整数(int类型)。在Java中,当两个整数进行除法运算时,结果也会是整数。这意味着小数部分会被截断。
10/3.0:这里,10 是整数(int类型),但 3.0 是浮点数(double类型)。在Java中,当整数与浮点数进行运算时,整数会自动提升为浮点数,因此整个运算会在浮点数范围内进行,结果也会是浮点数。

运算结果:

10/3 的结果是 3,因为小数部分被截断了。
10/3.0 的结果是 3.3333333333333335(或类似的浮点数表示,具体取决于Java虚拟机的实现和精度)。这是因为整个运算在浮点数范围内进行,保留了小数部分。

综上所述,10/3 和 10/3.0 的主要区别在于它们处理数据类型的方式和产生的运算结果。前者是整数除法,后者是浮点数除法。

此外,值得注意的是,Java中的除法运算符(/)会根据操作数的类型来决定运算结果的类型。这是Java语言设计中的一个重要特性,有助于开发者在编写代码时更加精确地控制数据类型和运算结果。

最后,需要提醒的是,浮点数运算可能会受到精度问题的影响,因此在处理需要高精度的计算时,应该使用适当的数据类型和方法来避免精度损失。
```

```
如何保留10/3.0的小数点后两位:
在Java中,如果你想要保留10/3.0的结果的小数点后两位,你可以使用以下几种方法:

1. 使用String.format()方法

String.format()方法可以根据指定的格式来格式化数字。如果你想要保留两位小数,可以使用%.2f作为格式化字符串。

java
double result = 10 / 3.0;
String formattedResult = String.format("%.2f", result);
System.out.println(formattedResult); // 输出 3.33


2. 使用DecimalFormat类

DecimalFormat是NumberFormat的一个子类,专门用于格式化十进制数。你可以通过实例化DecimalFormat对象并传入一个包含所需格式的字符串来设置小数位数。

java
import java.text.DecimalFormat;

double result = 10 / 3.0;
DecimalFormat df = new DecimalFormat("#.00");
String formattedResult = df.format(result);
System.out.println(formattedResult); // 输出 3.33

注意:在DecimalFormat中,#字符通常用于可选的部分(如整数部分),但在这种情况下,由于我们想要确保总是显示小数部分,使用0可能更合适(尽管#在这里也能工作)。不过,为了清晰起见,如果你知道整数部分总是存在的,使用0可能更好。

3. 使用BigDecimal类

如果你需要处理更高精度的数值,或者你的数值非常大或非常小,BigDecimal类可能是一个更好的选择。然而,对于简单的保留两位小数的需求,它可能相对较重。

java
import java.math.BigDecimal;
import java.math.RoundingMode;

double result = 10 / 3.0;
BigDecimal bd = new BigDecimal(Double.toString(result));
BigDecimal rounded = bd.setScale(2, RoundingMode.HALF_UP);
String formattedResult = rounded.toString();
System.out.println(formattedResult); // 输出 3.33

注意:将double转换为BigDecimal时,最好使用Double.toString(double)方法,因为直接使用new BigDecimal(double)可能会导致精度问题。

4. 使用NumberFormat类

虽然NumberFormat类本身没有直接设置小数位数的方法(除了通过其子类如DecimalFormat),但了解它的存在和用途仍然很重要。你可以通过获取NumberFormat的实例(如使用NumberFormat.getNumberInstance()),然后调用setMaximumFractionDigits(int newValue)来设置最大小数位数。

java
import java.text.NumberFormat;

double result = 10 / 3.0;
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
String formattedResult = nf.format(result);
System.out.println(formattedResult); // 输出依赖于Locale,但通常是 3.33

请注意,NumberFormat的输出可能会受到当前Locale设置的影响,这可能会影响小数点字符、千位分隔符等的显示方式。

以上方法都可以用于保留10/3.0结果的小数点后两位。选择哪种方法取决于你的具体需求、对性能的考虑以及对代码可读性的偏好。
```

ceil:https://www.runoob.com/java/number-ceil.html

17.抽取TOP3数字,思路很重要

18.位运算,各种类型之间的转换

各种类型之间的转换:https://blog.csdn.net/qq_47897078/article/details/120038031

19.用给定的几个数去列举组合

20.身高体重分类,注意流的用法,comparator的使用

21.hashmap的compute和merge用法

22.String和char的转换,使用场景

https://blog.csdn.net/yaokai_assultmaster/article/details/52082763


代码随想录:数组、哈希表、字符串、双指针


接上文,粘贴一下流的用法,自己老不理解,记不住。

Stream提供的常用操作有:

其他操作 - Java教程 - 廖雪峰的官方网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值