集合的学习

集合和数组一样,都是存储数据的容器

数组定义:相同数据类型的有序集合,只能存储相同类型的数据,有序,支持索引,长度固定

数组特点:

  1. 一个数组存储相同的数据类型
  2. 有序,支持索引
  3. 内存空间连续(查询效率高,增删慢)
  4. 数组对象一旦创建,长度固定

集合定义:集合只能存储引用数据类型,存储的是引用变量的地址值(存储基本类型实际上就是存储对应的包装类类型)

特点:集合不是一个类或者一个接口,他是一个体系,每个集合底层数据结构实现不一样,特点也不一样。

集合框架分成两大类:

  1. 单列集合:Collections是单列集合的父接口,一次存储一个数据
  2. 双列集合:Map集合是双列集合的父接口,一次存储两个数据(key-value),key值唯一。

单列集合Collection接口

常用方法:

  1. 添加元素 add();
  2. 删除元素remove();
  3. 清空容器 clea();
  4. 获取元素个数 size();等
  • list接口及其实现类

list接口特点:支持索引,有序,可以存储重复的元素。

list接口实现类:

  1. Arraylist:底层采用可变长数组,内存连续,查询速率高,增删慢,线程不同步; 不能在创建new Arraylist()时直接创建出长度为10的数组,而是采用懒加载机制,在第一次add的时候创建;扩容机制,arraylist扩容是新容量是旧容量的1.5倍
  2. Linkedlist:底层采用双向链表实现,内存不连续,查询速率低,增删快,线程不同步;
  3. vector:底层采用可变长数组实现,早于Arraylist出现,线程同步,效率低;扩容机制:新容量是旧容量的2倍;
  • set接口及其实现类

set接口特点:无序,不支持索引,不能存储重复的元素。

set接口实现类:

  1. HashSet:是HashMap实现的,底层采用Hash算法,查询效率高,线程不同步;                  去重原理:首先通过比较Hashcode方法,如果哈希吗值不一样,直接存储,否则,比较equles方法,如果返回值是flase,则存储该元素,如果返回值是true,则认为容器中存在该元素,不存储;                                                                                                                      如果HashMap存储自定义类型对象,一定要重写 类的hashcade和equles方法                                                                                                               
  2. TreeSet:是TreeMap实现的,底层采用红黑树, 要求元素有序,  线程不同步;                     用法分为两种: 让元素自身具备比较性,容器存储元素所属的类 实现comparable 接口;从而实现conpareTo方法;如果返回值是 0;不存该元素 ; 也可以让容器具备比较性,创建TreeSet时指定构造器  compator类型的参数,实现其中的compare方法,指定比较规则,该方法返回值为0,不存该元素
  3. linkedlist:在HashSet集合的基础上 增加了链表支持,成为 有序的HashSet;

  双列集合Map接口

map接口特点:

  1. map集合一次存储一对数据,键值对形式存储(k-v)
  2. map中的键是唯一的,如果多次存储相同的key,那么value会被覆盖
  3. map元素无序
  • Set接口及其实现类
  1. HashMap:key和value都可以为null,jdk7及以前,底层采用数组+链表,jdk8及以后,底层采用数组+链表+红黑树,提高数据查询功能
  2. TreeMap:底层采用红黑树,key值不能为null,元素或者容器需要具备比较性;

        用法有两种:
                1)让key具备比较性。容器存储元素所属的类实现Comparable接口,从而实现compareTo方法,该方法如果返回值为0,不存该元素。
                2)让容器具备比较性。创建TreeMap时指定构造器中的Comparator类型的参数,实现其中的
                                                                                        

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值