for那种方式效率最高

本文通过实验比较了Java中不同集合操作方式的时间消耗,包括基本的for循环、foreach、while循环和迭代器方法,旨在为开发者提供高效集合操作的指导。
package com.data.struct;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test2 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();

        int runTime = 1000;//执行次数
        for (int i = 0; i < 1000 * 1000; i++) {
            list.add(i);
        }
        int size = list.size();
        long currTime = System.currentTimeMillis();//开始分析前的系统时间
        //基本的for            
        for(int j = 0; j < runTime; j++) {
            for (int i = 0; i < size; i++) {
                list.get(i);
            }
        }
        long time1 = System.currentTimeMillis();

        //foreach
        for(int j = 0; j < runTime; j++) {
            for (Integer integer : list) {
            }
        }
        long time2 = System.currentTimeMillis();

        for(int j = 0; j < runTime; j++) {
            //while
            int i = 0 ;
            while(i < size){
                list.get(i++);
            }
        }
        long time3 = System.currentTimeMillis();

        for(int j = 0; j < runTime; j++) {//普通for循环
            for (int i = 0; i < list.size(); i++) {
                list.get(i);
            }
        }
        long time4 = System.currentTimeMillis();

        for(int j = 0; j < runTime; j++) {//迭代
            Iterator<Integer> iter = list.iterator();
            while(iter.hasNext()) {
                iter.next();
            }
        }
        long time5 = System.currentTimeMillis();

        long time = time1 - currTime ;
        System.out.print("use for:" + time);
        time = time2 - time1;
        System.out.print("\tuse foreach:" + time);
        time = time3 - time2;
        System.out.print("\tuse while:" + time);
        time = time4 - time3;
        System.out.print("\tuse for2:" + time);
        time = time5 - time4;
        System.out.print("\tuse iterator:" + time);
        System.out.println();
    }
}

use for:6035	use foreach:13345	use while:5930	use for2:9853	use iterator:11767

【四旋翼无人机】具备螺旋桨倾斜机构的全驱动四旋翼无人机:建模控制研究(Matlab代码、Simulink仿真实现)内容概要:本文围绕具备螺旋桨倾斜机构的全驱动四旋翼无人机展开研究,重点探讨其系统建模控制策略,结合Matlab代码Simulink仿真实现。文章详细分析了无人机的动力学模型,特别是引入螺旋桨倾斜机构后带来的全驱动特性,使其在姿态位置控制上具备更强的机动性自由度。研究涵盖了非线性系统建模、控制器设计(如PID、MPC、非线性控制等)、仿真验证及动态响应分析,旨在提升无人机在复杂环境下的稳定性和控制精度。同时,文中提供的Matlab/Simulink资源便于读者复现实验并进一步优化控制算法。; 适合人群:具备一定控制理论基础和Matlab/Simulink仿真经验的研究生、科研人员及无人机控制系统开发工程师,尤其适合从事飞行器建模先进控制算法研究的专业人员。; 使用场景及目标:①用于全驱动四旋翼无人机的动力学建模仿真平台搭建;②研究先进控制算法(如模型预测控制、非线性控制)在无人机系统中的应用;③支持科研论文复现、课程设计或毕业课题开发,推动无人机机动控制技术的研究进展。; 阅读建议:建议读者结合文档提供的Matlab代码Simulink模型,逐步实现建模控制算法,重点关注坐标系定义、力矩分配逻辑及控制闭环的设计细节,同时可通过修改参数和添加扰动来验证系统的鲁棒性适应性。
在C#的`PictureBox`中保留画线时,效率的方法通常是使用图像缓存技术结合双缓冲机制。具体来说,利用`BufferedGraphics`进行图像缓存,将绘制的内容先存储在缓冲区,再渲染到`PictureBox`上,这样可以避免闪烁问题,同时提绘制效率。 以下是一个示例代码: ```csharp using System; using System.Drawing; using System.Windows.Forms; using System.Drawing.Drawing2D; namespace PictureBoxDrawing { public partial class Form1 : Form { private BufferedGraphicsContext context; private BufferedGraphics bg; private List<Point> points = new List<Point>(); public Form1() { InitializeComponent(); context = BufferedGraphicsManager.Current; bg = context.Allocate(pictureBox1.CreateGraphics(), pictureBox1.ClientRectangle); pictureBox1.MouseDown += PictureBox1_MouseDown; pictureBox1.MouseMove += PictureBox1_MouseMove; pictureBox1.MouseUp += PictureBox1_MouseUp; pictureBox1.Paint += PictureBox1_Paint; } private void PictureBox1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { points.Add(e.Location); } } private void PictureBox1_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { points.Add(e.Location); DrawLines(); } } private void PictureBox1_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { points.Add(e.Location); DrawLines(); } } private void PictureBox1_Paint(object sender, PaintEventArgs e) { DrawLines(); } private void DrawLines() { bg.Graphics.Clear(pictureBox1.BackColor); bg.Graphics.SmoothingMode = SmoothingMode.AntiAlias; if (points.Count > 1) { for (int i = 0; i < points.Count - 1; i++) { bg.Graphics.DrawLine(Pens.Black, points[i], points[i + 1]); } } bg.Render(); } } } ``` 该方法通过创建`BufferedGraphics`对象,将绘制操作先在缓冲区进行,最后一次性渲染到`PictureBox`上,减少了屏幕刷新次数,提了绘制效率。同时,使用`SmoothingMode.AntiAlias`可以使线条更加平滑。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值