集合:List接口Set接口Map接口

    技术2022-07-16  88

    List接口:

    1、概念: 有序的collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位 置)访问元素,并搜索列表中的元素。

    2、特点: 1、 数据有序 2、 允许存放重复元素 3、 元素都有索引

    3、迭代: 1、继承来的方法 Iterator iterator() 返回按适当顺序在列表的元素上进行迭代的迭代器。 2、List接口特有的ListIterator listIterator() 返回此列表元素的列表迭代器(按适当顺序)。 3、listIterator()和iterator() 对比:iterator() 来自父接口。 listIterator()是子接口的特有功能。 4、下标遍历: list.size() ; list.get(下标) 5、增强for foreach

    实现类ArrayList

    1、概念: 1、存在于java.util包中。 2、内部用数组存放数据,封装了数组的操作,每个对象都有下标。 3、内部数组默认初始容量是10。如果不够会以1.5倍容量增长。 4、查询快,增删数据效率会降低。

    2、特点:底层是由数组实现,方便查询 元素可重复 + 元素都有序 + 元素有索引

    1、Vector与ArrayList区别: 一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vector,避免多线程同时写而引起的不一 致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。 vector是线程(Thread)同步(Synchronized)的,所以它也是线程安全的,而Arraylist是线程异步(ASynchronized的, 是不安全的。如果不考虑到线程的安全因素,一般用Arraylist效率比较高.

    实现类LinkedList: 1、特点:List接口的实现类,拥有List接口的特点,可以重复,可以有索引,有序。 底层是一个链表的实现。不适用于查询,适用于增删业务。 LinkedList和ArrayList: LinkedList:增删改快 ArrayList:查询快(有索引的存在)

    Set接口:

    1、概念:一个不包含重复元素collection。并且最多包含一个null元素 2、特点:元素不重复、元素无序、元素没索引

    HashSet实现类 1、概念:HashSet是Set接口的实现类,可以使用Set接口的所有功能 2、特点:HashSet底层是哈希表/散列表。实际上底层维护了一个HashMap 3、创建对象:HashSet()构建一个新的Set,其实底层是HashMap实例的默认实例容量16,加载因子是 0.75。

    4、利用Set给自定义对象去重:如果想利用set集合给自定义对象去重。需要同时提供重写的hashCode() 和 equals() 例://if (p.hash == hash && ((k = p.key) == key ||(key != null && key.equals(k)))) 为了使两个对象间的hash值一致,我们需要把只要new一次就计算一个hash值这种默认实现方式改掉。这时,需要重写hashCode()让此 方法运算出来的hash值可以根据对象的属性值运算 5、HashSet去重原理:它的add()方法实际上调用的是HashMap中的put()方法,把要添加进HashSet中的元素当做key存入,而value则是一个固定值:一个 Object类对象。 先用hashCode()方法获得传入元素的哈希值,在集合中查找是否包含哈希值相同的元素,如果相同,则继续进行比较它们地址值,一般地 址值都是不相同的,所以最后会用equals()方法比较对象内的属性值。 比较结果全为false就存入,如果比较结果有true则不存. 注:再归纳一下就是hashCode是用于查找使用的,而equals是用于比较两个对象的是否相等的。

    Map接口

    1、概述:Map接口也是集合的一种形式,只不过和Collection接口没有关系。 Map接口包含两个实现类,重要学HashMap。里面存的数据都是键值对。 2、特点: Map里的数据都是K,V的格式 Map里的key不能重复,如果key重复,会把value覆盖掉 Map也是无序 Map里的value可以根据key获取

    3、HashMap实现类: 1、特点: Map里的数据都是K,V的格式 Map里的key不能重复,如果key重复,会把value覆盖掉 Map也是无序 Map里的value可以根据key获取 2、原理: HashMap底层是一个Entry数组,当存放数据时会根据hash算法计算数据的存放位置。算法:hash(key)%n,n就是数组的长度。当计算 的位置没有数据时,就直接存放,当计算的位置有数据时也就是发生hash冲突的时候/hash碰撞时,采用链表的方式来解决的,在对应的数 组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。 3、创建对象:构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。

    Processed: 0.009, SQL: 9