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一定相等