java基础(2)复习之集合及其数据结构

Collection

List

特点:里面的元素时有序的,且可重复,因为体系里有索引,用户可通过索引来访问元素。

特有方法:add(index,element),addAll(index,collection),remove(index),set(index,element)

ArrayList

底层采用的数组结构,初始化大小为10,插入新元素的时候,会判断是否需要扩容,扩容的步长是0.5倍原容量,扩容方式是利用数组的复制,这就降低了增加的效率。ArrayList想要在指定位置插入或删除元素时,主要耗时的是System.arraycopy动作,会移动index后面所有的元素。但查找时直接根据索引进行查找就可以了。

LinkedList

底层采用了链表数据结构,在增加或删除时只需改变指针的指向,速度很快,但查询时,node()函数遍历链表,虽然使用二分法,但效率还是低于ArraryList

总结

ArraryList采用数组数据结构,查询快,增删慢,因为查询时调用get()方法,获取索引,增删时要改变数组的大小,只要是System.arryCopy,移动index后面的所有值。而LinkList采用链表数据结构,增删时只需改变指针指向,查询慢,因为要遍历整个链表。

Set

元素是无序的,且不可重复

HashSet

实现Set接口,底层是hashcode数据结构,存入的是对象,且是无序不重复的,通过hashcode和equals方法来判断元素是否相同

TreeSet

底层是红黑树数据结构,有序不重复的。当元素自身具有比较性时,继承comparable接口覆盖compareTo方法进行比较,当不具有比较性时,自定义比较器comparator,覆盖compare方法

Map

HashMap

1.底层数据结构

JDK 1.8对HashMap进行了优化,改成了数组、链表和红黑树(在链表长度大于8的时候进行转换)

2.工作原理

HashMap根据put()和get()来存储和获取对象,存储时,先计算key的hash值,然后用indexFor()方法找到数组Entry的下标值,然后判断hashcode是否相同以及key是否是同一个key,否的话插入,相同则覆盖value。取出时也是根据key的hashcode确定数组的下标取出,通过equals方法找到正确的键值对,取出

3.hashmap的key value可以为空值
4.hashMap的扩容机制

HashMap全总结

https://blog.csdn.net/mbshqqb/article/details/79799009?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161191627816780265472145%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161191627816780265472145&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-4-79799009.first_rank_v2_pc_rank_v29_10&utm_term=hash%E5%8E%9F%E7%90%86&spm=1018.2226.3001.4187

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值