Java数据结构

ArrayList

基于 array,在内存中占有连续空间,所以get(index)时候,根据数组首地址+偏移量就可以取到值

LinkList

基于link,在内存中不连续,每个元素只知道下一个元素,所以get时候,只能从首元素开始一个一个去找,效率相对较慢

增加删除

ArrayList 需要变动数组,将一个数组的东西变化到另外一个数组

Linklist 只需要改变某个元素的引用就可以,所以效率更高


Set 

元素不相同,比较基础 equals不相等

类 默认equals比较的是地址(==效果相同),是否指向同一个堆内存里对象

HashSet

由于Set必须保证不相等,那么元素多的时候,插入一个新元素就会导致比较很多次

为了提高效率,采用hashcode先做比较,hashcode采用一个散列函数,比较效率较快

当之前没有该hashcode则,直接放入Set

如果有相同hashcode,则再调用比较equals方法

相同则不放入,不同再放入,同时将

相同hashcode的元素做一个集合存储(hash桶),方便后面使用

对象的默认hashcode是基于内存地址来做,可以唯一


TreeSet

集合中的元素有序,且唯一,但元素必须实现Comparable,或者构造 TreeSet时候构建Compartor


HashMap

Key-Value

Key是基于HashSet来做

如果一个类可以作为Key,如果他的equals方法被重写,那么同时一定要去重写hashcode

能保证equals true时,hashcode一定相等


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值