java数据结构

Collection

存放的是单一的值,

List

ArrayList

1、可以存放不同类型的数据,而数组只能存放固定类型的数据
2、当使用arraylist子类实现的时候,初始化的长度是10,当长度不够的时候会自动进行扩容操作

LinkedList

1.底层使用链表的格式存储

Vector

1、Vector也是List接口的一个子类实现
2、Vector跟ArrayList一样,底层都是使用数组进行实现的
3、ArrayList是线程不安全的,效率高,Vector是线程安全的效率低
4、ArrayList在进行扩容的时候,是扩容1.5倍,Vector扩容的时候扩容原来的2倍

Set

HashSet

1、set中存放的是无序,唯一的数据
2、set不可以通过下标获取对应位置的元素的值,因为无序的特点
3.设置元素的时候,如果是自定义对象,会查找对象中的equals和hashcode的方法,如果没有,比较的是地址

LinkedHashSet

TreeSet

1、treeset底层的实现是treemap,利用红黑树来进行实现
2.树中的元素是要默认进行排序操作的,如果是基本数据类型,自动比较,如果是引用类型的话,需要自定义比较器
	比较器分类:
    内部比较器
         定义在元素的类中,通过实现comparable接口来进行实现
    外部比较器
        定义在当前类中,通过实现comparator接口来实现,但是要将该比较器传递到集合中
    注意:外部比较器可以定义成一个工具类,此时所有需要比较的规则如果一致的话,可以复用,而
          内部比较器只有在存储当前对象的时候才可以使用
          如果两者同时存在,使用外部比较器
          当使用比较器的时候,不会调用equals方法

Queue

LinkedBlockingQueue

Map

 map存储的是k-v键值对映射的数据
   实现子类:
       HashMap:数据+链表(1.7) 数组+链表+红黑树(1.8)
       LinkedHashMap:链表
       TreeMap:红黑树
  Map.entry:表示的是K-V组合的一组映射关系,key和value成组出现

  hashmap跟hashtable的区别:
   1、hashmap线程不安全,效率比较高,hashtable线程安全,效率低
   2、hashmap中key和value都可以为空,hashtable不允许为空


   hashmap初始值为2的N次幂,
       1、方便进行&操作,提高效率,&要比取模运算效率要高
          hash & (initCapacity-1)
       2、在扩容之后涉及到元素的迁移过程,迁移的时候只需要判断二进制的前一位是0或者是1即可
           如果是0,表示新数组和就数组的下标位置不变,如果是1,只需要将索引位置加上旧的数组的长度值即为新数组的下标
   1.7源码知识点:  数组+链表
       1、默认初始容量
       2、加载因子
       3、put操作
          1、设置值,计算hash
           2、扩容操作
          3、数据迁移的过程
   1.8源码知识点:   数组+链表+红黑树

HashMap

HashTable

LinkedHashMap

TreeMap

ConcurrentHashMap

其它相关 Iterable,Iterator

所有的集合类都默认实现了Iterable的接口,实现此接口意味着具备了增强for循环的能力,也就是for-each
  增强for循环本质上使用的也是iterator的功能
  方法:
           iterator()
           foreach()
  在iterator的方法中,要求返回一个Iterator的接口子类实例对象
   此接口中包含了
           hasNext()
           next()

  在使用iterator进行迭代的过程中如果删除其中的某个元素会报错,并发操作异常,因此
   		如果遍历的同时需要修改元素,建议使用listIterator(),
   ListIterator迭代器提供了向前和向后两种遍历的方式
   		始终是通过cursor和lastret的指针来获取元素值及向下的遍历索引
 	  当使用向前遍历的时候必须要保证指针在迭代器的结果,否则无法获取结果值

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值