• java数组中删除元素或一个数组元素


    java数组中删除元素或一个数组元素

    这里直接介绍两种情况:
    1、删除数组中单个元素
    2、删除数组中多个元素(数组表示) 

    删除数组中单个元素

    1、
    新建一个数组,
    将原数组中值写入新数组时进行判断是否为要删除的元素,
    如果是就直接跳过进行下一个循环,
    否则直接写入新数组,
    最后将新数组赋值给原数组
    以下给出简要代码

    1. //ints是原数组,temp是新数组,err是要删除的元素
    2. j=0
    3. for(int in: ints){
    4. if(int == err)
    5. continue;
    6. else
    7. temp[j++] = in;
    8. }
    9. ints=temp

    2、
    比较常见的遍历一遍数组,
    找到需要删除的元素,(这只限于删除第一个找到err元素,如果需要删除数列中全部的err元素,看代码中注释)
    后面所有的元素向前一个位置覆盖之前的元素,达到删除元素的效果
    以下是完整的函数代码
    (为了达到统一输出的效果,加了一个flag判定是否删除) 

    1. public static int[] delete(int[] ints,int err) {
    2. boolean flag = false;
    3. int length = ints.length;
    4. //这里只进行了找到第一个需要删除元素位置,
    5. //并用后面的元素逐次向前覆盖,并不是真正的删除
    6. //(删除是通过底下重新建立数组赋值进行的)
    7. for(int i = 0; i < length; i++) {
    8. if(err == ints[i]) {
    9. for(int j = i; j < length - 1; j++) {
    10. ints[j] = ints[j + 1];
    11. }
    12. length--;
    13. flag = true;
    14. break;//如果要删除全部的err元素 这里改为 i--;
    15. //为了防止相邻相同的情况
    16. }
    17. }
    18. if (flag)
    19. System.out.println("删除" + err + "成功!");
    20. else
    21. System.out.println("输入err有误,不存在" + err +",无法删除");
    22. //将删除后数组进行重新保存 并返回
    23. int[] result = new int[length];
    24. System.arraycopy(ints,0,result,0,length);
    25. return result;
    26. }

    删除数组中多个元素(数组表示)
    新建一个数组
    将原数组写入新数组的同时对写入的元素进行判断是否在需要删除的数组中
    运用flag进行标记是否需要写入(即该元素是否在需要删除的数组中)
    通过fiag的标识,在新的数组中写入元素,
    最后将中间的temp数组通过copy再返回,原因是 删除元素后的数组长度是需要测量出来的,即为代码中的index。
     

    1. //在ints数组中删除包含res数组元素
    2. public static int[] delete(int[] ints,int[] errs) {
    3. int index = 0;
    4. int[] temp = new int[ints.length];
    5. //通过foreach的循环只能够进行遍历 并不能进行删除修改操作
    6. for (int in: ints){
    7. boolean flag = true;
    8. for (int err: errs)
    9. if (in == err){
    10. flag = false;
    11. break;
    12. }
    13. if(flag)
    14. temp[index++]=in;
    15. }
    16. //将中间保存的temp数组进行重新保存(删除后面多余的长度) 并返回
    17. //index 也代表着长度 因为在每次获取值后++了
    18. //所以最终是比实际下标多1
    19. int[] result = new int[index];
    20. System.arraycopy(temp,0,result,0,index);
    21. return result;
    22. }

    另外也可以通过万能的Arrays.asList(ints) 将数组转化为list ,然后就直接运用循环加上remove函数删除就好了。

    附上一段测试的代码

    1. public static void main(String[] args) {
    2. int[] ints = new int[10];//初始数组
    3. for (int i = 0; i < ints.length; i++){
    4. ints[i] = i;
    5. }
    6. int[] err = new int[3];//初始数组
    7. for (int i = 0; i < err.length; i++){
    8. err[i] = i + 1 ;
    9. }
    10. err[2] = 52;//测试一下err不在ints中
    11. int[] result = delete(ints,err);
    12. System.out.println(Arrays.toString(err));
    13. System.out.println(Arrays.toString(ints));
    14. System.out.println(Arrays.toString(result));
    15. }

    以及结果:
     

    以下是最初的时候,直接进行写的,没有写方法。

    1. public static void main(String[] args) {
    2. int[] res = new int[2];//要求删除的元素值
    3. for (int i = 0; i < res.length; i++){
    4. res[i]=i + 2;
    5. }
    6. int err = 5;
    7. int j = 0;
    8. int[] temp = new int[8];//用来存放新元素的数组
    9. //在ints数组中删除包err元素
    10. for(int in: ints){
    11. if(int == err)
    12. continue;
    13. else
    14. temp[j++] = in;
    15. }
    16. j = 0;
    17. for (int te: ints){
    18. System.out.println(te);
    19. }
    20. //在ints数组中删除包含res数组元素
    21. for (int in: ints){
    22. boolean flag = true;
    23. for (int re: res)
    24. if (in == re)
    25. flag = false;
    26. if(flag)
    27. temp[j++]=in;
    28. }
    29. ints = temp;
    30. for (int te: ints){
    31. System.out.println(te);
    32. }
    33. }

     

     

     

     

     

     

  • 相关阅读:
    多任务学习的二分类数据该怎么合并和处理?
    HIVE-17824,删除hdfs分区信息,清理metastore元数据
    Linux 进程管理之current
    做店干货|抖音小店找达人的要求以及渠道
    C语言实现姿态四元数转欧拉角
    vue3插槽、具名插槽、作用域插槽-足够入门了!
    华为OD机试 - 按单词下标区间翻转文章内容 - (Java 2023 B卷 100分)
    Ubuntu 1804 ModuleNotFoundError: No module named ‘OpenSSL‘ in Python
    数据结构初阶——树和二叉树
    TCP 中 Flags 标志位 ACK、SYN 与 seq、ack
  • 原文地址:https://blog.csdn.net/m0_61466807/article/details/126157280