关于java的集合

集合

为何用集合不用数组

数组的长度是固定,集合的长度是能够动态改变的java

应用场景

  • 没法预测存储数据的数量数组

  • 存储具备一对一关系的数据code

  • 数据的增删对象

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

注意

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

体系结构

  • ArrayList底层是数组实现的,因此是连续存储,查询快接口

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

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

  • TreeSet是基于二叉树实现的,能够自动排序,不容许放nullhash

  • 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对象是无序排列的

相关文章
相关标签/搜索