java集合

集合类型主要有3种:set(集)、list(列表)和map(映射)。

Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。但是却让其被继承产生了两个接口,就是Set和List。

Collection是集合接口
    |————Set
子接口:无序,不允许重复。
    |————List子接口:有序,可以有重复元素。

1.Set

Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

set的实现基础是map。

HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是 在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储项。

例: HashSet的add(Object obj)方法的实现

public boolean add(Object obj)
{
        return map.put(obj, PRESENT) == null;
}

这个也是为什么在Set中不能像在List中一样有重复的项的根本原因,因为HashMap的key是不能有重复的。

常用方法:

boolean add(E o)                               //如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。
boolean addAll(Collection<? extends E> c)      //如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中(可选操作)。
void clear()                                  //移除 set 中的所有元素(可选操作)。
boolean contains(Object o)                     //如果 set 包含指定的元素,则返回 true。
boolean containsAll(Collection<?> c)           //如果此 set 包含指定 collection 的所有元素,则返回 true。
boolean equals(Object o)                       //比较指定对象与此 set 的相等性。
int hashCode()                                 //返回 set 的哈希码值。
boolean isEmpty()                              //如果 set 不包含元素,则返回 true。
Iterator<E> iterator()                         //返回在此 set 中的元素上进行迭代的迭代器。
boolean remove(Object o)                       //如果 set 中存在指定的元素,则将其移除(可选操作)。
boolean removeAll(Collection<?> c)             //移除 set 中那些包含在指定 collection 中的元素(可选操作)。
boolean retainAll(Collection<?> c)             //仅保留 set 中那些包含在指定 collection 中的元素(可选操作)。
int size()                                     //返回 set 中的元素数(其容量)。
Object[] toArray()                             //返回一个包含 set 中所有元素的数组。
<T> T[]    toArray(T[] a)                      //返回一个包含 set 中所有元素的数组;返回数组的运行时类型指定数组的类型

1.1.HashSet

使用HashMap的一个集的实现。虽然集定义成无序,但必须存在某种方法能相当高效地找到一个对象。使用一个HashMap对象实现集的存储和检索操作是在固定时间内实现的.

1.2.TreeSet

在集中以升序对对象排序的集的实现。这意味着从一个TreeSet对象获得第一个迭代器将按升序提供对象。TreeSet类使用 了一个TreeMap。TreeSet对Set中的元素进行自然排序存放,升序。

2.List

List是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式。

常用方法:

boolean add(E o)                                      //向列表的尾部追加指定的元素(可选操作)。  
void    add(int index, E element)                     //在列表的指定位置插入指定元素(可选操作)。  
boolean    addAll(Collection<? extends E> c)          //追加指定collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序(可选操作)。  
boolean addAll(int index, Collection<? extends E> c) //将指定collection 中的所有元素都插入到列表中的指定置(可选操作)。  
void clear()                           //从列表中移除所有元素(可选操作)
boolean contains(Object o)             //如果列表包含指定的元素,则返回 true
boolean containsAll(Collection<?> c)   //如果列表包含指定collection的所有元素,则返回 true
boolean equals(Object o)             //比较指定的对象与列表是否相等。E get(int index) //返回列表中指定位置的元素
int hashCode()           //返回列表的哈希码值。int indexOf(Object o) //返回列表中首次出现指定元素的索引,如果列表不包含此元素,则返回-1。
boolean isEmpty()        //如果列表不包含元素,则返回 true。
Iterator<E> iterator()   //返回以正确顺序在列表的元素上进行迭代的迭代器。int  
lastIndexOf(Object o)    //返回列表中最后出现指定元素的索引,如果列表不包含此元素,则返回-1
ListIterator<E> listIterator()         //返回列表中元素的列表迭代器(以正确的顺序)
ListIterator<E> listIterator(int index)//返回列表中元素的列表迭代器(以正确的顺序),从列表的指定位置开始
E remove(int index)                    //移除列表中指定位置的元素(可选操作)
boolean remove(Object o)               //移除列表中出现的首个指定元素(可选操作)。boolean  
removeAll(Collection<?> c)             //从列表中移除指定collection 中包含的所有元素(可选操作)
boolean retainAll(Collection<?> c)     //仅在列表中保留指定collection 中所包含的元素(可选操作)。
E set(int index, E element)            //用指定元素替换列表中指定位置的元素(可选操作)。int size() //返回列表中的元素数。
List<E> subList(int fromIndex,int toIndex) //返回列表中指定的fromIndex(包括 )和toIndex(不包括)之间的部分视图。
Object[]toArray()                      //返回以正确顺序包含列表中的所有元素的数组。
<T> T[] toArray(T[] a)                 //返回以正确顺序包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。  

2.1.ArrayList(非线程安全,适合查找)

实现一个数组,它的规模可变并且能像链表一样被访问。它提供的功能类似Vector类但不同步。

2.2.LinkedList(非线程安全,插入删除元素较快)

实现一个链表。由这个类定义的链表也可以像栈或队列一样被使用。

3.Map

Map是Java.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。
常用方法:

V put(K key, V value)                  //(可以相同的key值,但是添加的value值会覆盖前面的,返回值是前一个,如果没有就返回null)                                          
putAll(Map<? extends K,? extends V> m) //从指定映射中将所有映射关
remove()                               //删除关联对象,指定key对象
clear()                                //清空集合对象
value get(key);                        //可以用于判断键是否存在的情况。当指定的键不存在的时候,返回的是null。
boolean isEmpty()                      //长度为0返回true否则false
boolean containsKey(Object key)        //判断集合中是否包含指定的key
boolean containsValue(Object value)    //判断集合中是否包含指定的value
int size()                           //长度

3.1.HashMap(非线程安全)

HashMap是最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。因为键对象不可以重复,所以HashMap最多只允许一条记录的键为Null,允许多条记录的值为Null。

3.2.Hashtable(线程安全,慢)

Hashtable与HashMap类似,是HashMap的线程安全版,它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢,它继承自Dictionary类,不同的是它不允许记录的键或者值为null,同时效率较低。

3.3.TreeMap(非线程安全,顺序)

TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序),也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。不允许key值为空,非同步的。

4.Vector

  Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。

5.Stack

  Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

6.Iterator

所有的集合类,都实现了Iterator接口,这是一个用于遍历集合中元素的接口,主要包含以下三种方法:
1.hasNext()是否还有下一个元素。
2.next()返回下一个元素。
3.remove()删除当前元素。
例:不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:

Iterator it =collection.iterator(); // 获得一个迭代子

    while(it.hasNext()){

      Object obj =it.next(); // 得到下一个元素

    }


内容概要:本文详细介绍了基于滑模控制(SMC)和H∞控制相结合的方法应用于永磁直线同步电机(PMLSM)的鲁棒控制。首先阐述了PMLSM的基本数学模型及其物理意义,包括d-q坐标系下的电压方程和运动方程。随后解释了滑模控制的工作原理,重点在于如何构建滑模面并确保系统沿此面稳定运行。接着讨论了H∞控制的目标——即使在不确定条件下也能保持良好的性能表现。文中还提供了具体的Matlab代码实例,展示了如何利用Matlab控制系统工具箱进行H∞控制器的设计。最后给出了一段完整的Matlab程序框架,演示了两种控制方法的具体实现方式。 适合人群:从事电机控制领域的研究人员和技术人员,尤其是那些想要深入了解滑模控制和H∞控制理论及其在实际工程中应用的人士。 使用场景及目标:适用于需要提高永磁直线同步电机控制系统抗干扰能力和鲁棒性的场合,如工业自动化生产线、精密加工设备等。通过学习本篇文章提供的理论知识和编程技巧,读者能够掌握这两种先进控制策略的应用方法,从而提升自身解决复杂控制问题的能力。 其他说明:文中所涉及的内容不仅限于理论讲解,还包括了大量的实战经验分享,有助于读者快速上手并在实践中不断改进自己的设计方案。同时鼓励读者积极尝试不同的参数配置,以便找到最适合特定应用场景的最佳解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值