母线同杆架设数据结构转换小计

来源:互联网 发布:希尔排序算法详细 编辑:程序博客网 时间:2024/04/29 18:01

卡了一俩个消失,幸得大神指导,感恩分享:

 List<String[]> list = service.getList();        List<String[]> dataList = new ArrayList<>();        if ((list != null) && (!list.isEmpty())) {            dataList.add(list.get(0));        }        for (int i = 1; i < list.size(); i++) {            String[] syg = dataList.get(dataList.size() - 1);            String[] dqh = list.get(i);            if (dqh[0].equals(syg[0])) {                syg[1] += ";" + dqh[1];            } else {                dataList.add(dqh);            }        }

将数据库如下:


转换成如下的结构:


关于上面代码的一些重要提示:

为什么将datelist的上一个的值给数组时,在循环内数组中的值改变,它的数据源datalist中的值就发生改变?

1、 按值传递(by value)
适用范围:8种基本数据类型、String对象
特点:在内存中复制一份数据,把复制后的数据传递到方法内部
作用:在方法内部改变参数的值,外部数据不会跟着发生改变
2、 按址传递(by address)
适用范围:数组、除String以外的其他所有类型的对象
特点:将对象的地址传递到方法内部
作用:在方法内部修改对象的内容,外部数据也会跟着发生改变


这是java语法的规定!
string[]是数组,属于按址传递,也就是把string[]的地址传递到了for循环的内部,在循环内部修改数组中的值时,原来的内容也发生改变。

以上特性是Java语言中的规定,在语法上无法指定参数传递是按值传递还是按址传递,但是可以通过下面的变换实现:
1、 对于按值传递的参数,如果需要在方法调用以后修改参数的值,可以利用返回值来实现。
2、 对于按值传递的参数,如果需要在方法内部修改时原来的参数不改变,则可以在方法内部重新创建该对象实现。


原创粉丝点击