面试之java集合那点事

 写在前面:


  这里重点说一下,以前对于说List有序而Set无序挺矛盾的,为什么这么说呢?主要是对于说List有序,然而他的
 子类并没有关于排序的内容;对于Set说无序吧,但是他的子类还是有排序的,主要是归因于Set内部有自己的排序
 算法,如TreeSet。所以说,我们明面上说的List有序Set无序指的是,元素存入对应集合的时候是有序的,如List
 中元素是怎么放进去的就怎么取出来,而Set却不是的,所以说Set是无序的。不知道这对你们有没有帮助?
 
 Collection
    List : 有序可重复的(因为有索引),这里有序指的是怎么进的怎么出,并没有对其排序

  1.   ArrayList :底层是数组,线程不同步,查询快增删慢
  2.  Vector :底层是数组,线程同步(方法被synchronized所修饰),查询快增删慢,效率低,现在基本不怎么用
  3.   LinkedList :底层是链表,线程不同步,查询慢增删快
  4.   Stack: Stack继承了Vector,实现了LIFO的数据结构,是后进先出的堆栈。

   Set:无序的不可重复

  1. HashSet :是由HashMap支持的,在HashSet的构造器中,首先是new一个HashMap的对象,源码中可见。所以说,HashSet是建立在HashMap之上的,他存储唯一空值元素,不保持插入顺序,线程不安全的。 HashSet保持元素的唯一性:主要是因为,对象存入HashSet时,对象的hashcode值会判断一个元素是否在该集合中,但是具有相同hashcode值的对象可能不相等,我们需要使用equals()方法来比较对象
  2. Treeset :有序的集合,基于TreeMap实现的,支持两种排序方法:自然排序和根据实现Comparable接口,覆盖compareTo(Object obj)方法或者实现Comparator接口,覆盖compare(Object o1,Object o2)方法
  3. LinkedHashSet :继承了HashSet,输出LinkedHashSet集合中的元素时,元素的顺序总是和添加顺序一致。

 Map:

  1.  HashMap :是最常用的Map,根据键的HashCode值存储数据,根据键来获取数据,访问速度快允许最多一条记录的键为null,允许多条记录的值为null;不支持线程同步的,如果需要同步的,可以用Collections的synchronizedMap方法使用HashMap具有同步的功能。
  2. TreeMap :不仅可以保持顺序(默认升序),而且可以用于排序,实现Comparator接口
  3.  HashTable :线程同步的,里边的方法都是有synchronize修饰的,不允许存NULL值null键
  4.  LinkedHashMap :继承HashMap,内部维持一个双向链表,有序的怎么添加进去的怎么取出来
  5.  ConcurrentHashMap :加入了lock机制,并发性能好,比较HashTable更好,键值对都不允许为null
  6.  WeakHashMap:和HashMap一样,是一个散列表,存储内容也是键值对,键和值都可以为null,但他含有弱键,弱键就是在WeakHashMap不在正常使用时,会被移除。 

  我们可以通过Collections.newSetFromMap(Map<E,Boolean> map)方法可以将任何 Map包装成一个Set

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值