Java总结(15) 加强for 装箱

本文深入探讨了Java中增强for循环的使用场景与限制,以及自动装箱与自动拆箱功能的原理与应用。通过具体代码示例,展示了如何在不同数据结构上高效地进行迭代与数据转换。


加强for

语法:
for ( type 变量名:集合变量名 )  { … } 
注意事项:
迭代变量必须在( )中定义!
集合变量可以是数组或实现了Iterable接口的集合类。
举例: 
public static int add(int x,int ...args) {
        int sum = x;
        for(int arg:args) {
                sum += arg;
        }
        return sum;
}

加强for用法:

①:首先增强for循环和iterator遍历的效果是一样的,也就说增强for循环的内部也就是调用iteratoer实现的,但是增强for循环有些缺点,例如不能在增强循环里动态的删除集合内容。不能获取下标等。
②:ArrayList由于使用数组实现,因此下标明确,最好使用普通循环。
③:而对于LinkedList 由于获取一个元素,要从头开始向后找,因此建议使用增强for循环,也就是iterator。
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
 * 增强for循环用法
 * 
 */
public class ForTest {
        public static void main(String[] args) {
                //List<Integer> list = new ArrayList<Integer>();
                List<Integer> list = new LinkedList<Integer>();
                for (int i = 0; i < 50000; i++) {
                        list.add(11);
                }    
                int resutl = 0;
                long start = System.currentTimeMillis();
                for (int i = 0; i < list.size(); i++) {
                        resutl = list.get(i);
                }
                System.out.println("普通循环使用了"+ (System.currentTimeMillis() - start)+"毫秒");
                start = System.currentTimeMillis();
                for (int c2 : list) {
                }
                System.out.println("增强for循环使用了"+ (System.currentTimeMillis() - start)+"毫秒");
        } 
} 

自动装箱:

概述:

JAVA JDK1.5提供了自动装箱(Autoboxing)与自动拆箱(AutoUnboxing)功能,所谓自动装箱,就是可以把一个基本类型变量直接赋给对应的包装类变量,或者赋给Object变量;自动拆箱则与之相反,允许直接把包装类对象直接赋给一个对应的基本类型变量。
如下例:
public class AutoBoxingUnboxing{
        public static void main(String args []){
                //直接把一个基本类型变量赋给Integer对象
                Integer inObj = 5;
                //直接把一个boolean类型变量赋给一个Object类型的变量
                Object boolobj = true;
                //直接把一个Integer对象赋给int类型的变量
                int it = inObj;
                if(boolobj instanceof Boolean){
                        //先把Object对象强制类型转换为Boolean类型,再赋给boolean变量
                        boolean b = (Boolean)boolobj;
                        System.out.println(b);
                }            
        }    
}
进行自动装箱和自动拆箱时必须注意类型匹配,例如Integer只能自动拆箱成int类型的变量,不要试图拆箱成boolean类型的变量;与之类似的是,int类型的变量只能自动装箱成Integer对象(即使赋给Object类型的变量,那只是利用了JAVA的向上自动转型特性),不要试图装箱成Boolean对象。
除此之外,包装类还可实现基本类型变量和字符串之间的转换,除了Chracter之外的所有包装类都提供了一个parseXxx(String s)静态方法,用于将一个特定字符串转换成基本类型变量;除此之外,在String类里也提供了多个重载valueOf()方法,用于将基本类型变量转换成字符串,如下例:
public class Primitive2String{
        public static void main(String args []){
                String intStr = "123";
                int it = Integer.parseInt(intStr);
                System.out.println(it);
                String floatStr = "4.56";
                float ft = Float.parseFloat(floatStr);
                System.out.println(ft);
                //把一个float变量转换成String变量
                String ftStr = String.valueOf(2.345f);
                System.out.println(ftStr);
                //把一个布尔变量转换成String变量
                String boolStr = String.valueOf(true);
                System.out.println(boolStr.toUpperCase());
        }        
}
如果希望把基本类型变量转换成字符串,还有一种更简单的方法,将基本类型变量和""进行连接运算,系统会自动把基本类型变量转换成字符串。
//intStr的值为“5”
String intStr = 5 + "";

java中数据类型分为两种 : 基本数据类型   引用数据类型(对象)
在 java程序中所有的数据都需要当做对象来处理,针对8种基本数据类型提供了包装类,如下:
int --> Integer
byte --> Byte
short --> Short
long --> Long
char --> Character
double --> Double
float --> Float
boolean --> Boolean
jdk5以前基本数据类型和包装类之间需要互转:
基本---引用   Integer x = new Integer(x);
引用---基本   int num = x.intValue();
1)、Integer x = 1; x = x + 1;  经历了什么过程?装箱->拆箱->装箱;
2)、为了优化,虚拟机为包装类提供了缓冲池,Integer池的大小 -128~127 一个字节的大小;
3)、String池:Java为了优化字符串操作 提供了一个缓冲池;

Integer num1 = 12;

自动拆箱:
System.out.println(num1 + 12);
基本数据类型的对象缓存:
Integer num1 = 12;
Integer num2 = 12;  这块相等,<=127都是真的
System.out.println(num1 == num2);
Integer num3 = 129;                这块不相等,因为是对象
Integer num4 = 129;
System.out.println(num3 == num4);
Integer num5 = Integer.valueOf(12);
Integer num6 = Integer.valueOf(12);   这块的道理同上
System.out.println(num5 == num6);

【多变量输入超前多步预测】基于CNN-BiLSTM的光伏功率预测研究(Matlab代码实现)内容概要:本文介绍了基于CNN-BiLSTM模型的多变量输入超前多步光伏功率预测方法,并提供了Matlab代码实现。该研究结合卷积神经网络(CNN)强大的特征提取能力与双向长短期记忆网络(BiLSTM)对时间序列前后依赖关系的捕捉能力,构建了一个高效的深度学习预测模型。模型输入包含多个影响光伏发电的气象与环境变量,能够实现对未来多个时间步长的光伏功率进行精确预测,适用于复杂多变的实际应用场景。文中详细阐述了数据预处理、模型结构设计、训练流程及实验验证过程,展示了该方法相较于传统模型在预测精度和稳定性方面的优势。; 适合人群:具备一定机器学习和深度学习基础,熟悉Matlab编程,从事新能源预测、电力系统分析或相关领域研究的研发人员与高校研究生。; 使用场景及目标:①应用于光伏电站功率预测系统,提升电网调度的准确性与稳定性;②为可再生能源并网管理、能量存储规划及电力市场交易提供可靠的数据支持;③作为深度学习在时间序列多步预测中的典型案例,用于科研复现与教学参考。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注数据归一化、CNN特征提取层设计、BiLSTM时序建模及多步预测策略的实现细节,同时可尝试引入更多外部变量或优化网络结构以进一步提升预测性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值