欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java中Set与List的关系与区别介绍

程序员文章站 2024-03-02 08:01:04
两个接口都是继承自collection. list (inteface) 次序是list 的最重要特点,它确保维护元素特定的顺序. --arraylist 允许对...

两个接口都是继承自collection.

list (inteface)

次序是list 的最重要特点,它确保维护元素特定的顺序.
--arraylist 允许对元素快速随机访问.
--linkedlist 对顺序访问进行优化,向list 中间插入与移除的开销并不大,具有addfrist(),addlast(),getfirst,getlast,removefirst和removelast().这些方法使得linkedlist可当作堆栈/队列/双向队列.

set (inteface)

存入set 的每个元素必须唯一,不保证维护元素的次序.加入set 的object必须定义equals()方法
--hashset 为快速查找而设计的set ,存入hashset对象必须定义hashcode().
--treeset  保护次序的set ,使用它可以从set 中提取有序序列.
--linkedhashset  具有hashset的查询速度,且内部使用链表维护元素的次序.

它们之间的存储方式不一样:

treeset采用红黑树的树据结构排序元素.
hashset采用散列函数,这是专门为快速查询而设计的.
linkedhashset内部使用散列以加快查询速度,同时使用链表维护元素的次序.

使用hashset/treeset时,必须为类定义equals();而hashcode()是针对hashset,作为一种编程风格,当覆盖equals()的时候,就应该同时覆盖hashcode().