关于java的集合

集合

为什么用集合不用数组

数组的长度是固定,集合的长度是可以动态改变的

应用场景

  • 无法预测存储数据的数量

  • 存储具有一对一关系的数据

  • 数据的增删

  • 数据重复问题,用set集合解决

注意

集合只能使用引用数据类型,虽然数字能传进去,其实是java内部的一个自动装箱的操作(如int型转成了Integer型)

体系结构

  • ArrayList底层是数组实现的,所以是连续存储,查询快

  • LinkedList底层是双向链表实现的,增加和删除快,查询快

  • HashSet是哈希表实现的,是无序的,他元素可以是null,但只能有一个null

  • TreeSet是基于二叉树实现的,可以自动排序,不允许放null

  • HashMap适用于在Map插入、删除和定位元素

  • TreeMap适用于按自然顺序对键值对进行遍历

List集合

ArrayList

无参构造是默认初始化容量10

数组实现,有序可重复

可动态增长

元素可有null

Set集合

元素无需且不可重复

只允许一个null元素

set集合在读取数据的时候不允许删除操作

set.remove(collection c)支持从set中删除c这样的子集

 //删除年龄大于5个月的并重新输出
    Set<Cat> newSet= new HashSet<Cat>();
    for (Cat c:set) {
      if (c.getMonth()>10)
        newSet.add(c);
    }
    set.removeAll(newSet);

hashCode和equals方法的作用

当添加一个数据的时候,会调用hashCode()方法,得到hash code值,通过这个值可以找到数据的存储位置(不是单个位置,是一片区域,该区域的hash code值是相等的),当能找到这个位置时,在用equals比较数据是否相等,相等就重复了,不相等就进行存储
如果两个对象相等,那么它hashCode值一定相等,反之则不一定,还需要equals比较

Map

特征

  • Map的数据是以键值对(k-v)形式存储的

  • k-v以Entry类型的对象实例存在

  • 可用通过key快速查找到value的值

  • 一个映射不能包含重复的键,k不能重复,v可以重复

  • 每个键最多只能映射到一个值

HashMap

特征

  • 基于哈希表的Map接口实现

  • 允许使用null键和null值,但null键只能有一个

  • key值不允许重复

  • HashMap的Entry对象是无序排列的

posted @ 2021-02-13 10:00  平流层  阅读(90)  评论(0)    收藏  举报