Java常用集合总结笔记

集合

一、Collection(单列集合)

1.List(有序(存储与取出的顺序一致),可重复)

1.1. ArrayList

底层数组实现,查询快,增删慢,线程不安全,效率高。

1.2.Vector

底层数据结构是数组实现,查询快,增删慢,线程安全,效率低。

1.3. LinkedList

底层数据结构是链表实现,查询慢,增删快,线程不安全,效率高。

2.Set(无序(存储与取出的顺序不一致),唯一)

2.1. HashSet

底层数据结构由哈希表(实际上是一个 HashMap 实例)实现,它不保证 set 的迭代顺序。允许使用 null 元素,

                                依赖 hashCode()和equals()方法来区分存入的元素是否相同,来保证存储元素唯一性。

这两个方法(可自动生成)的执行顺序:

首先判断元素的hashCode()值是否相同

否:直接存储到集合

是:继续执行equals(),看其返回值

true:说明元素相同,就不存储

false:说明元素不同,就存储到集合

2.1.1. LinkedHashSet

底层数据结构由哈希表和链表组成。

哈希表保证元素的唯一性,链表保证元素有序(存储和取出一致)。

2.2. TreeSet

底层数据结构是红黑树。(是一种自平衡的二叉树结构)

元素的唯一性:

依靠元素比较的返回值是否为0来决定

元素的有序性:

1.自然排序(元素具备比较性)

无参构造(new TreeSet<T>())使用的是自然排序,让元素所属的类实现自然排序接口,

                                                底层用CompareTo()方法(Comparable接口)来做数据校验

2.比较器排序(集合具备比较性)

构造方法(new TreeSet<T>(Comparator comparator))接收一个比较器接口(其实是该接口的子类对象),

底层使用Compare()方法来做数据校验

二、Map(双列集合)

A:Map集合的数据结构仅仅针对键有效,和值无关。

B:存储的是键值对元素,键是唯一的,值可重复

1. HashMap

底层数据结构由哈希表实现,它不保证 set 的迭代顺序。允许使用 null 元素,

                        依赖hashCode()和equals()方法来区分存入的元素是否相同,来保证存储元素唯一性。

这两个方法(可自动生成)的执行顺序:

首先判断元素的hashCode()值是否相同

否:直接存储到集合

是:继续执行equals(),看其返回值

true:说明元素相同,就不存储

false:说明元素不同,就存储到集合

1.1. LInkedHashMap

底层数据结构由哈希表和链表组成。

哈希表保证元素的唯一性,链表保证元素有序(存储和取出一致)。

2. Hashtable

Hashtable与HashMap的区别

Hashtable:线程安全,效率低,不允许null键和null值

HashMap:线程不安全,效率高,允许null键和null值

3. TreeMap

底层数据结构是红黑树。(是一种自平衡的二叉树结构)

元素的唯一性:

依靠元素比较的返回值是否为0来决定

元素的有序性:

1.自然排序(元素具备比较性)

无参构造(new TreeSet<T>())使用的是自然排序,让元素所属的类实现自然排序接口,

                                        底层用CompareTo()方法(Comparable接口)来做数据校验

2.比较器排序(集合具备比较性)

构造方法(new TreeSet<T>(Comparator comparator))接收一个比较器接口(其实是该接口的子类对象),

底层使用Compare()方法来做数据校验

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值