《Java集合》

首先,小编给你们看一张思维导图认识一下集合框架的构成体系,便于记忆和理解
在这里插入图片描述

下面整理下集合中的问题:❃✪❃❦❃❃✪❃❦❃❃✪❃❦❃❃✪❃❦❃❃✪❃❦❃❃✪❃❦❃❃✪❃❦❃

1. ArrayList 和 LinkedList的区别:

ArrayListLinkedList
数组结构链表结构
ArrayList查询快LinkedList增删快

**通过代码测试区别:

public class Test {
    public static void main(String[] args) {
        //比校添加方面
        ArrayList arrayList = new ArrayList() ;
        LinkedList linkedList = new LinkedList();
        //給毎个集合中添加50000条数据,比狡时间
        for(int i=0;i<50000; i++){
            Object o=new Object() ;
            //arrayList. add(0, o);//耗吋多
            linkedList. add(0,o);//耗吋外少
        }
        long start=System. currentTimeMillis();
        //比较拿数据方面
        for (int i = 0;i < linkedList.size(); i++) {
//            arrayList.get(i);//耗吋少
             linkedList. get(i);//耗时多
        }
        long end=System. currentTimeMillis();
        System. out. println("耗肘: " + (end-start));
    }
}

2. 怎么将一个数组转集合list?怎么将一个List集合转数组?

> ✪ 数组转集合:Arrays.asList();
> ✪ 集合转数组:list.toArray();

3. Array 和 ArrayList的区别:

ArrayArrayList
Java中的数组动态数组(集合)
Array长度固定ArrayList长度可变
Array只能存储同类型数据ArrayList可以存储不同类型 数据

4. HashSet,TreeSet和 LinkedHashSet 的区别:

> ✪ HashSet :速度快
> ✪ TreeSet :有排序功能的集合
> ✪ LinkedHashSet  :按照插入的顺序的集合

5. HashMap,TreeMap和 LinkedHashMap 的区别:

> ✪ HashMap:插入,删除和定位元素,速度快
> ✪ TreeMap:有排序功能的集合
> ✪ LinkedHashMap :按照插入的顺序存储集合

6. HashMap和 HashSet的区别:

HashMapHashSet
实现map接口实现set接口
键值对存储存储对象
调用put()方法添加元素调用add()方法添加元素
用key计算hashcode用成员变量计算hashcode
取值较快,用唯一键获取对象较慢

7. List,Set 和 Map的区别:

> ✪ List:允许重复元素   ****  可插入多个null元素  ****  有序容器
> ✪ Set :不允许重复元素   ****  只能插入一个null元素  ****  无序容器
> ✪ Map:键值对存储,键唯一,值可重复 ****  键只能插入一个null元素,值可插入多个null  ****  无序容器

8. HashMap的实现原理:

> ❃❃ 使用put(key,value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()  
      方法传递键和值时,我们先对键调用 hashCode()方法,返回的hashCode用于找到bucket位置
      来储存Entry对象。
         
> ❃❃  如果两个键的hashcode相同后会进行扩容,默认的负载因子大小为0.75,也就是说,当一个map
   	   填满了75%的bucket时候,和其它集合类(如ArrayList等)一样,将会创建原来HashMap大小的两倍
   	   的bucket数组,来重新调整map的大小,并将原来的对象放入新的bucket数组中。这个过程叫作
   	   rehashing,因为它调用hash方法找到新的bucket位置。

9. Collection接口的remove()方法,和 Iterator接口的remove()方法的区别:

①性能方面:
  > Collection接口的remove()方法:查询效率较低,属于单链表结构,需要从集合中一个一个的遍历找
  出删除的项才能删除。
  > Iterator接口的remove()方法:结合next()方法使用,在集合中是隔一项删除一项的方式,效率高。
  
①容错方面:
  > Collection接口的remove()方法:使用Iterator遍历时会报异常,因为Iterator内部对象个数会改变集合
    中的个数。个数不一致会报异常
  > Iterator接口的remove()方法:使用Iterator遍历时不会报异常,因为Iterator内部对象个数和集合中个
    数会保持一致。

//通过代码测试区别:

public class Test {
  public static void main(String[] args) {
          List list = new ArrayList();
          for (int i = 0; i<10; i++){
              list.add(i);
          }
          Iterator iterator = list.iterator();
          while (iterator.hasNext()){
              Object o = iterator.next();

          iterator.remove();//不会出现异常
//                list.remove(o);//会出现异常
      }
  }
}

ღ 好了ღ. 集合中的问题小编就分享到这里 _

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值