java遍历list与set哪个快
1个回答
展开全部
List和Set的区别很多,但是归根结底是由于它们的底层实现不一样所导致的。List的实现方式主要有:ArrayList和LinkedList,Set的实现方式主要有:HashSet、LinkedHashSet、TreeSet。
ArrayList的底层实现是数组,当向其中添加一个元素时,会先检查数组容量,不足时会对数组进行扩容。由于扩容是比较消耗效率的,因此使用ArrayList时,应予以规避。
同样的可以分析HashSet、LinkedHashSet和TreeSet。HashSet的底层实现是散列表,LinkedHashSet的底层实现是散列表加双向链表,TreeSet的底层实现的红黑树。它们元素位置取决于元素的hash值。因此采用Set进行存取的时候求取hash值是比较消耗资源的。有些便于快速获取hash值的方法是值得借鉴的,比如基本类型的包装器,当第一次运行hashCode方法,便会用一个静态变量将hash值存储起来,以后再次获取时便不需要重新计算。
因此,List适合经常追加数据,插入,删除数据,但随机取数效率比较低。Set适合经常地随机储存,插入,删除,但是在遍历时效率比较低。
ArrayList的底层实现是数组,当向其中添加一个元素时,会先检查数组容量,不足时会对数组进行扩容。由于扩容是比较消耗效率的,因此使用ArrayList时,应予以规避。
同样的可以分析HashSet、LinkedHashSet和TreeSet。HashSet的底层实现是散列表,LinkedHashSet的底层实现是散列表加双向链表,TreeSet的底层实现的红黑树。它们元素位置取决于元素的hash值。因此采用Set进行存取的时候求取hash值是比较消耗资源的。有些便于快速获取hash值的方法是值得借鉴的,比如基本类型的包装器,当第一次运行hashCode方法,便会用一个静态变量将hash值存储起来,以后再次获取时便不需要重新计算。
因此,List适合经常追加数据,插入,删除数据,但随机取数效率比较低。Set适合经常地随机储存,插入,删除,但是在遍历时效率比较低。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询