JAVA算法比赛常用的方法

BigInteger用法

BigInteger abs()  返回大整数的绝对值
BigInteger add(BigInteger val) 返回两个大整数的和
BigInteger and(BigInteger val)  返回两个大整数的按位与的结果
BigInteger andNot(BigInteger val) 返回两个大整数与非的结果
BigInteger divide(BigInteger val)  返回两个大整数的商
double doubleValue()   返回大整数的double类型的值
float floatValue()   返回大整数的float类型的值
BigInteger gcd(BigInteger val)  返回大整数的最大公约数
int intValue() 返回大整数的整型值
long longValue() 返回大整数的long型值
BigInteger max(BigInteger val) 返回两个大整数的最大者
BigInteger min(BigInteger val) 返回两个大整数的最小者
BigInteger mod(BigInteger val) 用当前大整数对val求模
BigInteger multiply(BigInteger val) 返回两个大整数的积
BigInteger negate() 返回当前大整数的相反数
BigInteger not() 返回当前大整数的非
BigInteger or(BigInteger val) 返回两个大整数的按位或
BigInteger pow(int exponent) 返回当前大整数的exponent次方
BigInteger remainder(BigInteger val) 返回当前大整数除以val的余数
BigInteger leftShift(int n) 将当前大整数左移n位后返回
BigInteger rightShift(int n) 将当前大整数右移n位后返回
BigInteger subtract(BigInteger val)返回两个大整数相减的结果
byte[] toByteArray(BigInteger val)将大整数转换成二进制反码保存在byte数组中
String toString() 将当前大整数转换成十进制的字符串形式
BigInteger xor(BigInteger val) 返回两个大整数的异或

BigInteger是java中比较好用的一个类,减少C语言中必须手动敲的麻烦,非常好用。BigInteger类包括以下几个函数,基本上这些函数的使用方法都类似,掌握一个基本上就掌握大多数了,但是偶尔几个需要注意。

基本函数包括:
1.valueOf(parament); 将参数转换为制定的类型
比如 int a=3;//valueOf()里面应该是只能整型;
BigInteger b=BigInteger.valueOf(a);
valueOf(long num);
则b=3;

2.add(); 大整数相加
BigInteger a=new BigInteger(23);
BigInteger b=new BigInteger(34);
a. add(b);

3.subtract(); 相减

4.multiply(); 相乘

5.divide(); 相除取整

6.remainder(); 取余

7.pow(); a.pow(b)=a^b//pow(int)如果里面不是int无法执行;

8.gcd(); 最大公约数

9.abs(); 绝对值
例如:sum = sum.abs();

10.negate(); 取反数

11.mod(); a.mod(b)=a%b=a.remainder(b);

12.max(); min();//取最大值最小值

13.punlic int comareTo();

14.boolean equals(); 是否相等

15.BigInteger构造函数:

Stream常用方法

案例1:提取集合中所有偶数并求和:mapToInt()方法,filter()方法,sum()方法;

package com.imooc.stream;
 
import org.junit.Test;
 
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class StreamMethod {
    
    
 
    /**
     * 提取集合中所有偶数并求和
     */
    @Test
    public void case1() {
    
    
        List<String> list = Arrays.asList("1", "2", "3", "4", "5","8");
        int sum = list.stream()      // 获取stream流对象
                .mapToInt(s -> Integer.parseInt(s))  // mapToInt():这儿的作用是将流中的每一个数据转为整数
                .filter(n -> n % 2 == 0)   // filter()对流中的数据进行过滤,将符合条件的保留下来
                .sum();    // 只有在整数类型的流中,才可以调用sum()方法,起作用是将stream流中的数据进行求和。
        System.out.println(sum);
    }
}

在这里插入图片描述

(1)mapToInt()方法:将流中的数据转换成整数;只有将流中的数据转成int以后,才能对流中的数据进行计算处理;

在这里插入图片描述
在这里插入图片描述

mapToInt()方法的参数要求是一个ToIntFunction函数式接口的实现,当然可以是对应的Lambda表达式
其实并不难,遇到一个函数式接口,只需要三点:【明白这个接口的作用】【方法的输入值】【方法的返回值】;然后编写相应的Lambda表达式去实现接口进行啦!

(2)filter()方法:对流中的数据进行过滤,将符合条件的保留下来

在这里插入图片描述
在这里插入图片描述

(3)sum()方法:只有在整数类型的流中,才可以调用sum()方法,起作用是将stream流中的数据进行求和。

经过实际查找,在Stream接口中没有找到sum()方法;上面调用的sum()方法是定义在IntStream接口中的;

在这里插入图片描述

案例2:所有名字首字母大写:map()方法,forEach()方法;

package com.imooc.stream;
 
import org.junit.Test;
 
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class StreamMethod {
    
    
 
    /**
     * 所有名字首字母大写
     */
    @Test
    public void case2(){
    
    
        List<String> list = Arrays.asList("jack", "lily", "tom");
        list.stream()   // 获取stream流对象
                .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1)) // map()方法的作用是按照指定的规则对每一个流中的数据进行相应的转换;
                .forEach(s -> System.out.println(s));
    }
}

在这里插入图片描述

(1)map()方法:作用是按照指定的规则对每一个流中的数据进行相应的转换;

在这里插入图片描述

Function函数式接口的作用就是接受一个参数,并且会返回一个值;具体Function函数式接口参见Lambda表达式五:函数式编程三:Function函数式接口;(生成【定长随机字符串】)

(2)forEach()方法:对stream流中的所有数据做一个操作。。。本案例的操作是输出这个数据;

在这里插入图片描述

Consumer函数式接口的作用是:接受一个参数,不返回值;具体可参见Lambda表达式四:函数式编程二:Consumer函数式接口;

案例2(附加):所有名字首字母大写:最后有一个规约操作,得到一个最终结果。得到一个新的list集合;collect()方法;

package com.imooc.stream;
 
import org.junit.Test;
 
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class StreamMethod {
    
    
 
    /**
     * 所有名字首字母大写
     */
    @Test
    public void case2(){
    
    
        List<String> list = Arrays.asList("jack", "lily", "tom");
        List newList = list.stream()   // 获取stream流对象
                .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1)) // map()方法的作用是对每一个流中的数据进行相应的转换
                .collect(Collectors.toList());  //collect是收集的意思,可以将流中的每一个数据都包装成list或者set这样的集合并返回
        System.out.println(newList);
    }
}

案例2(附加):所有名字首字母大写:最后有一个规约操作,得到一个最终结果。得到一个新的list集合;collect()方法;

package com.imooc.stream;
 
import org.junit.Test;
 
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class StreamMethod {
    
    
 
    /**
     * 所有名字首字母大写
     */
    @Test
    public void case2(){
    
    
        List<String> list = Arrays.asList("jack", "lily", "tom");
        List newList = list.stream()   // 获取stream流对象
                .map(s -> s.substring(0, 1).toUpperCase() + s.substring(1)) // map()方法的作用是对每一个流中的数据进行相应的转换
                .collect(Collectors.toList());  //collect是收集的意思,可以将流中的每一个数据都包装成list或者set这样的集合并返回
        System.out.println(newList);
    }
}

在这里插入图片描述

(1)collect()方法:collect是收集的意思,可以将流中的每一个数据都包装成list或者set这样的集合并返回;

collect(java.util.stream.Collector<? super
T,A,R>)是Stream的一个函数,负责收集流。collect()方法是一个“终端操作”。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Collectors是集合中顶级的类,其提供了一系列的工具方法,toList()方法的作用是将流中的数据转换为一个list集合;
自然,Collectors中也提供了toSet()方法,将生成一个set集合;(比如,如果最终的结果不允许出现重复的结果的话,就是用toSet方法;允许出现重复结果就是用toList方法);

案例3:将所有奇数从大到小进行排序,且不允许出现重复;

package com.imooc.stream;
 
import org.junit.Test;
 
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
 
public class StreamMethod {
    
    
 
    /**
     * 将所有奇数从大到小进行排序,且不允许出现重复
     */
    @Test
    public void case3(){
    
    
        List<Integer> list = Arrays.asList(1,35,60,47,24,80,13,36,77,13,60);
        List newList = list.stream()   // 获取stream流对象
                .distinct()  // distinct():去除流中重复的数据
                .filter(n -> n % 2 == 1)  // 使用filter()方法,过滤数据。这儿具体是保留奇数
                .sorted((a, b) -> b - a)   // sorted()方法:排列数据,
                .collect(Collectors.toList());
        System.out.println(newList);
    }
 
}

在这里插入图片描述

(1)distinct()方法:去除流中重复的数据

在这里插入图片描述

(2)sorted(Comparator<? super T > comparator)方法:流中数据排序

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Comparator接口的内容可以参考:补充:Stream接口的sorted()方法,Comparator函数式接口效果展示;Comparator函数式接口;函数式接口严格规范;这篇文章。

Stack栈使用

在这里插入图片描述

Stack通过五个操作对

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_47174945/article/details/125003784