java中集合框架的使用场景

集合的使用场景

List集合:

关注的是索引 list集合中的元素是有序 存放的。例如一个学生的成绩,成绩可以重复,就可以使用list集合来存取 。

list是一个有序,可重复的集合,有序是指集合里面存储的元素有放入顺序(即集合里面的元素可以通过下标来取出,支持使用for循环遍历),并且可以有重复元素,可以存入多个null元素。

list接口所有实现类中常用的有 ArrayList ,linkedlist。

ArrayList(底层是数组结构,元素是按照存储顺序给,0,1,2,3,4,5····下标,查询快,但是当在元素中删除或增加元素时,下标也会随之改变 例如当2元素被删除是,后面的元素会顶替上来元素3下标变为2,以此类推,牵一发二动全身,故而增删慢)。线程不安全,效率高。

linkedlist为双向链表结构,也可当作堆栈、队列、双端队列,更倾向于集合的增加和删除元素,元素的增删不会引起元素索引的改变,索引固定,故而更利于元素的增删。线程不安全,效率高。

Set集合:

关注的是唯一性,它的值不允许重复。例如每个班级的学生的学号,都不能重复,所以就使用Set集合来存取。

set是一个无序的,不可重复的集合。无序是指集合里所存储的元素不按存储顺序,而是以元素所对应的hashcode决定的,其位置是固定的。无法使用for循环遍历,可以使用迭代器(Iterator),增强for循环遍历。无重复元素,只能有一个null元素。

set接口的实现类中常用的有hashset linkedhashset 和 treeset。

hashset其底层其实是包装了一个HashMap去实现的。HashSet采用HashCode算法来存取集合中的元素,因此具有比较好的读取和查找性能。

不仅不能保证元素插入的顺序,而且在元素在以后的顺序中也可能变化(这是由于HashSet是按HashCode存储对象(元素)决定的,对象变化则可能导致HashCode变化)
LinkedHashSet是HashSet的一个子类,LinkedHashSet也根据HashCode的值来决定元素的存储位置,但同时它还用一个链表来维护元素的插入顺序,插入的时候即要计算hashCode又要维护链表,而遍历的时候只需要按链表来访问元素。

TreeSet实现了SortedSet接口,顾名思义这是一种排序的Set集合,查看jdk源码发现底层是用TreeMap实现的,本质上是一个红黑树原理。 正因为它是排序了的,所以相对HashSet来说,TreeSet提供了一些额外的按排序位置访问元素的方法,例如first(), last(), lower(), higher(), subSet(), headSet(), tailSet()。存储的类型必须一致,不能一下int ,一下又存String。

TreeSet的排序分两种类型,一种是自然排序(按照a,b,c,···;0,1,2,3···这样的排序),另一种是定制排序。

Map集合:

关注的是标识符(key)它将唯一的键映射到某个元素。例如每个班级的学生学号与姓名映射,每个学号对应一个学生,学号不能重复, 但学生的姓名有可能重复。

map集合提供了一种(key,value)映射的存储形式,每一个key对应一个value,key是唯一的,value可以重复。
主要实现类有hashmap ,linkedhashmap ,treemap。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值