java:集合知识点整理

图1

图2

Collection接口:

collection是最基本的集合接口,一个Collection代表一组object,集Collection的元素,java不提供直接继承自Collection的类,指提供继承与的子接口(如list和set)collection接口存贮一组不唯一,无序的对象。

List接口:(有序、可重复)

(1)ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,可以存储重复元素。

(2)Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,可以存储重复元素。

(3)LinkedList:底层数据结构是链表,查询慢,增删快,线程不安全,效率高,可以存储重复元素。

Set接口:(无序、不能重复)

(1)HashSet:底层数据结构是哈希表,元素无序且唯一,线程不安全,效率高,可以存储null元素,元素的唯一性是靠所存储元素类型是否重写hashCode()和equals()方法来保证的,如果没有重写这两个方法,则无法保证元素的唯一性。

(2)LinkedHashSet:底层数据结构是哈希表和链表,链表保证了元素的顺序与存储顺序一致,哈希表保证了元素的唯一性。线程不安全,效率高。

(3)TreeSet:底层数据结构式红黑树元素唯一且已经排好序;唯一性同样需要重写hashCode和equals()方法,二叉树结构保证了元素的有序性。根据构造方法不同,分为自然排序(无参构造)和比较器排序(有参构造),自然排序要求元素必须实现Compareable接口,并重写里面的compareTo()方法,元素通过比较返回的int值来判断排序序列,返回0说明两个对象相同,不需要存储;比较器排需要在TreeSet初始化是时候传入一个实现Comparator接口的比较器对象,或者采用匿名内部类的方式new一个Comparator对象,重写里面的compare()方法。

Set和List的区别:

1.Set不允许重复的对象,List可以允许重复的对象。

2.Set指允许一个Null元素,可以插入多个Null元素

3.Set是一个无序容器,List是一个有序容器

HashSet和TreeSet的区别:

1.HashSet是用一个哈希表实现的,TreeSet是用红黑树实现的

2.HashSet的元素是无序的,TreeSet是有序的

3.HashSet的增删时间复杂度为O(1),TreeSet为O(logn)

Map接口:

map接口存储一组键值对象,提供key到value的映射,它们都可以使用任何引用类型的数据。key不能重复,所以通过指定的key就可以取出对应的value。(键值对,键唯一,值不唯一)

(1)HashMap:最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度,遍历时,取得数据的顺序是完全随机的。因为键对象不可以重复,所以HashMap最多只允许一条记录的键为Null,允许多条记录的值为Null,是非同步的

  • JDK8 之前,HashMap 由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。
  • JDK8 以后,在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8 )时,将链表转化为红黑树,以减少搜索时间。

(2)HashTable:它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢,它继承自Dictionary类,不同的是它不允许记录的键或者值为null,同时效率较低。

(3)LInkedHashMap:LinkedHashMap保存了记录的插入顺序,在用Iteraor遍历LinkedHashMap时,先得到的记录肯定是先插入的,在遍历的时候会比HashMap慢,有HashMap的全部特性。

(4)TreeMap:TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序),也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。不允许key值为空,非同步的;

HashMap和Hashtable的区别:

1.Hashtable是线性安全的,HashMap是线性不安全的,后者效率更高

2.Hashtable不允许使用null作为key和value,而HashMap可以

3.HashMap和HashTable底层都是哈希表

4.HashTable中数组默认大小是11,扩容方法是 old * 2 + 1,HashMap默认大小是16,扩容每次为 2 的指数大小。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值