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"}; SetstaffsSet = 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); }