java常用算法


1、数组拼接和截取:System.arrayCopy

System.arrayCopy的源代码声明 :
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
代码解释:
  Object src : 原数组
  int srcPos : 原数组的起始位置开始
  Object dest : 目标数组
  int destPos : 目标数组的起始位置
  int length : 拷贝原数组的长度
import java.util.Arrays;

public class test2 {
    public static void main(String[] args) {
        int[] a = {1, 2, 3, 4};
        new test2().rotate(a,3);
    }

    public void rotate(int[] nums, int k) {
        // 向右旋转数组解法,k是移动位数
        int l = nums.length;
        // 新建c数组,拼接2段nums数组
        int[] c = new int[l * 2];
        System.arraycopy(nums, 0, c, 0, l);
        System.arraycopy(nums, 0, c, l, l);
        // k取余,然后nums从c的索引(l-y)开始取数据,长度是l
        int y = k % l;
        System.out.println("拼接完成的数组c  "+Arrays.toString(c));
        System.arraycopy(c, l - y, nums, 0, l);
        System.out.println("nums截取c  "+Arrays.toString(nums));
    }
}

 2、去重

基本数据类型的数组不能通过Arrays.asList(a) 的方式转化为List,

但可以通过Arrays.stream(new int[]{1, 2, 3, 1}).boxed().collect(Collectors.toList())的方式转化为List,

解释可以参考: https://zhuanlan.zhihu.com/p/67224831

    public static void main(String[] args) {
        //方法一,int类型的数组不能用该方法
        String[] staffs = new String[]{"Tom", "Bob", "Jane"};
        Set staffsSet = new HashSet<>(Arrays.asList(staffs));
        System.out.println("======" + staffsSet);

        Integer[] a = new Integer[]{1, 2, 3, 1};
        HashSet b = new HashSet<>(Arrays.asList(a));
        System.out.println("======" + b);

        //方法二
        //boxed的作用就是将int类型的stream转成了Integer类型的Stream
        List n = Arrays.stream(new int[]{1, 2, 3, 1})
                .distinct()
                .boxed()
                .collect(Collectors.toList());
        System.out.println("======" + n);
    }