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

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值