Java容器

Collection

Collection有两实现类,List、Set和Queue。List是有序集合,元素可重复;Set是无序集合,元素不可重复;Queue是队列。

List

ArrayList:基于数组。使用无惨构造函数时是在第一次添加元素时初始化容量为 10 的。ArrayList有查询快、增删慢的特点;

LinkedList:基于双向链表来存储数据。分配的内存不必是连续的,每个元素存储本身内存地址的同时,还会存储下一个元素的地址。LinkedList有查询慢、增删块的特点;

Vector:同ArrayList也是基于数组。Vector和ArrayList用法上几乎相同,但Vector比较古老,一般不用;Vector是线程同步的,效率低。

set

       HashSet,内部通过HashMap实现。HashSet存储元素无序、不可重复,底层是哈希表。HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值也相等。 能快速定位一个元素,但是你放到HashSet中的对象需要实现hashCode()方法,它使用了哈希码的算法。

      LinkedHashSet:HashSet的子类,LinkedHashSet集合也是根据元素hashCode值来决定元素存储位置,但它同时使用链表维护元素的次序。LinkedHashSet需要维护元素的插入顺序,因此性能略低于HashSet的性能,但在迭代访问Set里的全部元素时将有很好的性能,因为他以链表来维护内部顺序。

      TreeSet:底层数据结构是红黑树(一种自平衡的二叉树),排序效率高。

      TreeSet集合两种排序方式:1.自然排序(使用的是无参构造,默认是自然排序。元素所在的类要实现comparable接口,并且要重写compareTo()方法)2.比较器排序(有参构造,集合的构造方法接收comparator的实现类对象,实现类需要重写compare()方

map

      HashMap:基于哈希表实现(数组+单向链表)默认长度16。非线程安全,高效(查询效率比较高),保存元素时先进后出、无序,支持null。key-value均可以为null,但最多只能为一个null;不支持线程同步,即可以有多个线程同时写HashMap,可能导致数据不一致,如果需要同步可以使用Collection的synchronizedMap方法使其同步。

      LinkedHashMap:是HashMap的一个子类,保存了元素的插入顺序(双向链表)。Iterator遍历元素时按照插入的顺序排列,支持线程同步。

      HashTable:基于链表实现,默认长度11。Hashtable是一个线程安全的Map实现,HashMap是线程不安全的实现。所以HashMap比Hashtable的性能高一点。Hashtable不允许使用null作为key和value

TreeMap:Map接口和set接口一样,也派生出一个SortedMap子接口,TreeMap是SortedMap接口的实现类。与TreeSet类似,TreeMap也是基于红黑树对TreeMap中所有key进行排序,从而保证TreeMap中所有键值对处于有序状态。

注:HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiha_zhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值