ArrayList类

本文详细介绍了Java中ArrayList类的使用方法,包括元素的添加、删除、查询等操作,并展示了如何使用迭代器遍历列表及常见错误避免。
package 集合类.list类;

/**
 * System.Collections.ArrayList类是一个特殊的数组。通过添加和删除元素,就可以动态改变数组的长度。

 一.优点

 1。支持自动改变大小的功能
 2。可以灵活的插入元素
 3。可以灵活的删除元素 
 * @author jjj
 *  注意,里面的元素是可以重复的,如果元素是new出来的一些对象的话,实际上元素只是对象的引用
 */
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

public class ArrayList类 {

	/**
	 * 老紫竹JAVA提高教程(7)-认识List列表之ArrayList<br>
	 * 
	 * @author 老紫竹 JAVA世纪网(java2000.net)
	 * 
	 */

	public static void main(String[] args) {
		testNormal();
		testSpecial();
		// 一个最常见的错误
		testForProblem();
	}

	public static void testNormal() {
		// -------------------------------------------------------
		// 声明一个列表
		// 允许放入任何数据
		// -------------------------------------------------------
		ArrayList list = new ArrayList();
		// 放入整数
		// 当然你用 new Integer(1)也可以
		list.add(1);
		// 放入字符串
		list.add("abc");
		// 放入浮点数
		list.add(new Float(1.11));
		// add会将数据保存到列表的尾部
		showList(list); // 1, abc, 1.11]

		// 下面我们在列表的头部增加数据
		list.add(0, 2);
		list.add(0, "bcd");
		list.add(0, new Double(2.34));
		// 列表可以指定插入的位置
		// 0 是头部第一个位置,所以数据都逐个放到最前面了
		showList(list); // [2.34, bcd, 2, 1, abc, 1.11]

		// 下面我们插入到我们希望的任何位置
		// 当然不能越界,(0 到 list.size()-1)范围内才可以
		list.add(1, 3);
		list.add(4, "xyz");
		// 数据被放到了正确的位置
		showList(list); // [2.34, 3, bcd, 2, xyz, 1, abc, 1.11]

		// -------------------------------------------------------
		// 我们有了数据,我们来测试读取数据
		// -------------------------------------------------------
		// 我们可以通过指定索引的位置,来拿到我们希望的数据
		System.out.println(list.get(0)); // 2.34
		System.out.println(list.get(4)); // xyz

		// -------------------------------------------------------
		// 测试是否存在某个数据
		// -------------------------------------------------------
		System.out.println(list.contains("xyz")); // true

		// 测试是否包含一组数据
		Collection c = new ArrayList();
		c.add(1);
		c.add(2);
		System.out.println(list.containsAll(c)); // true
		c.add(3);
		c.add(4);
		// containsAll_1234=false
		System.out.println(list.containsAll(c)); // false

		// -------------------------------------------------------
		// 查找某个数据所在的索引位置
		// 如果不存在,返回-1
		// -------------------------------------------------------
		System.out.println(list.indexOf(3)); // 1
		System.out.println(list.indexOf("xyz")); // 4
		System.out.println(list.indexOf("abcd")); // -1

		// -------------------------------------------------------
		// 测试删除数据
		// 请注意,
		// 如果你使用整数(int)数字,则默认调用的是remove(int index);
		// 如果你用 long,则会调用 remove(Object obj);
		// 所以如果你要删除整数,请使用 remove(new Integer(int));
		// -------------------------------------------------------
		// 删除索引为1的数据
		list.remove(1);
		// 索引为1的数据被干掉了
		showList(list); // [2.34, bcd, 2, xyz, 1, abc, 1.11]

		// 删除数字1 和字符串 abc
		list.remove(new Integer(1));
		list.remove("xyz");
		showList(list); // [2.34, bcd, 2, abc, 1.11]

		// -------------------------------------------------------
		// 迭代器的使用
		// -------------------------------------------------------
		Iterator it = list.iterator();
		while (it.hasNext()) {
			System.out.print(it.next() + " "); // 2.34 bcd 2 abc 1.11
		}
		System.out.println();

		// -------------------------------------------------------
		// 转化为数组
		// -------------------------------------------------------
		Object[] objs = list.toArray();
		for (Object obj : objs) {
			System.out.print(obj + " "); // 2.34 bcd 2 abc 1.11
		}
		System.out.println();
	}

	public static void testSpecial() {
		// -------------------------------------------------------
		// 测试重复和null
		// -------------------------------------------------------
		//
		List<Integer> list = new ArrayList<Integer>();
		list.add(123);
		list.add(456);
		list.add(123);
		list.add(456);
		// 数据允许重复
		showList(list); // [123, 456, 123, 456]

		list.add(null);
		list.add(789);
		list.add(null);
		list.add(999);
		// 允许放入多个null
		showList(list); // [123, 456, 123, 456, null, 789, null, 999]

		// -------------------------------------------------------
		// 测试一下查找最后一次出现的位置
		// -------------------------------------------------------
		System.out.println(list.indexOf(123)); // 0
		System.out.println(list.lastIndexOf(123)); // 2

		// -------------------------------------------------------
		// 转化为数组
		// 记得要转化为Inerger.
		// -------------------------------------------------------
		Integer[] nums = (Integer[]) list.toArray(new Integer[0]);
		// 注意数据里面有null,所以循环变量不要用int 要用Integer
		for (Integer num : nums) {
			System.out.print(num + " "); // 123 456 123 456 null 789 null 999
		}
		System.out.println();

	}

	public static void testForProblem() {
		// 一些朋友在向循环里向列表增加对象的时候
		// 经常忘记初始化,造成最终加入的都是同一个对象
		List<MyObject> list = new ArrayList<MyObject>();
		MyObject obj = new MyObject();
		for (int i = 1; i <= 5; i++) {
			obj.setName("Name" + i);
			list.add(obj);
		}
		// 里面的数据都是最后一个
		showList(list); // [Name5, Name5, Name5, Name5, Name5]

		// 正确的做法
		List<MyObject> list2 = new ArrayList<MyObject>();
		MyObject obj2 = null;
		for (int i = 1; i <= 5; i++) {
			obj2 = new MyObject();
			obj2.setName("Name" + i);
			list2.add(obj2);
		}
		// 里面的数据都是最后一个
		showList(list2); // [Name1, Name2, Name3, Name4, Name5]
	}

	/**
	 * 显示List里面的数据。
	 * 
	 * @param list
	 */
	private static void showList(List list) {
		System.out.println(Arrays.toString(list.toArray()));
	}
}

class MyObject {
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	/**
	 * 重写toString方法,输出name
	 */
	public String toString() {
		return name;
	}
}
内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,涵盖正向与逆向运动学求解、正向动力学控制,并采用拉格朗日-欧拉法推导逆向动力学方程,所有内容均通过Matlab代码实现。同时结合RRT路径规划与B样条优化技术,提升机械臂运动轨迹的合理性与平滑性。文中还涉及多种先进算法与仿真技术的应用,如状态估计中的UKF、AUKF、EKF等滤波方法,以及PINN、INN、CNN-LSTM等神经网络模型在工程问题中的建模与求解,展示了Matlab在机器人控制、智能算法与系统仿真中的强大能力。; 适合人群:具备一定Ma六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)tlab编程基础,从事机器人控制、自动化、智能制造、人工智能等相关领域的科研人员及研究生;熟悉运动学、动力学建模或对神经网络在控制系统中应用感兴趣的工程技术人员。; 使用场景及目标:①实现六自由度机械臂的精确运动学与动力学建模;②利用人工神经网络解决传统解析方法难以处理的非线性控制问题;③结合路径规划与轨迹优化提升机械臂作业效率;④掌握基于Matlab的状态估计、数据融合与智能算法仿真方法; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解运动学建模与神经网络控制的设计流程,关注算法实现细节与仿真结果分析,同时参考文中提及的多种优化与估计方法拓展研究思路。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值