java 集合及分类

java 集合

数组,集合都是对多个数据进行存储(内存层面)操作的,简称为容器。在了解集合之前首先看一下数组的一些特点

  • 数组一旦指定了长度,那么长度就被确定了,不可以更改。
    int[] arr = new int[6];
  • 数组一旦声明了类型以后,数组中只能存放这个类型的数据。数组中只能存放同一种类型的数据。
    int[] arr,String[] s,double[] d…

也因此数组有以下缺点:

  1. 数组一旦指定了长度,那么长度就被确定了,不可以更改。

  2. 删除、增加元素 效率低。

  3. 数组中实际元素的数量是没有办法获取的,没有提供对应的方法或者属性来获取

  4. 数组存储:有序,可重复 。对于无序的,不可重复的数组不能满足要求。

正因为上面的缺点,引入了一个新的存储数据的结构集合

当需要将相同结构的个体整合到一起的时候,需要集合。

前后端交互时,后端从数据库返回的记录存储到集合中,再有前端遍历显示。常见应用场景:逛淘宝,逛外卖

集合分类

因为不同集合底层数据结构不一样。集合不一样,特点也不一样

简要的集合结构如下

[

集合 Collection Map List Set ArrayList LinkedList HashSet TreeSet HashMap TreeMap 子接口extends接口 实现类implements子接口 实现类implements接口
  • 集合可依照存储的数据形式分为一一存储的Collection和一对一的Map。

    • public interface Collection<E> extends Iterable<E>
      
    • public interface Map<K,V>
      

Collection

List

  • List接口有索引,特点有序、不唯一。
  • ArrayList底层为紧密结构的数组,LinkedList底层为链式结构的链表(双向链表)
  • ArrayList与Vector:底层都是数组的扩容。ArrayList扩容是长度为原数组1.5倍,线程不安全,效率高;Vector扩容是长度为原数组2倍,线程安全,效率低(淘汰);
  • List接口的拓展方法中包含大量索引相关

Set

  • Set接口无索引,遍历可使用迭代器或增强for循环,特点无序(相对LIst接口来说,无序不等于随机)、唯一。

  • HashSet实现类底层原理:哈希表

  • TreeSet实现类底层原原理:实现内部比较器或外部比较器,因而放入数据时,自定义的类必须实现比较器接口。

Map

HashMap

  • 特点:无序,唯一,是按照key进衍总结的,因为底层key遵照哈希表的结构(数组+链表)

  • 哈希表原理:比如放入这个集合的数据对应的那个类:必须重写hashCode方法和equals方

  • HashMap 与Hashtable :HashMap JDK1.2效率高,线程不安全,key可以存入null值,并且key的null值也遵循唯一的特点;Hashtable JDK1.0效率低,线程安全,key不可以存入null值

  • LihkedHashMap实现类特点:唯一,有序(按照输入顺序进行输出)

TreeMap

  • 特点:唯一,有序(按照升序或者降序)
  • 原理:二叉树,key遵照二叉树的特点
  • 放入集合的key的数据对应的类型内部一定要实现比较器((内部比较器,外部比较器)

猜你喜欢

转载自blog.csdn.net/m0_46530662/article/details/119734049