java集合类

作者: 彭 升军 分类: Java 发布时间: 2020-05-25 06:09

集合概念

  • 为什么出现集合类?
    • 在面向对象的编程思想中,都是以对象的形式对事物进行描述的,为了保证对象的生命周期,我们需要持有对象。
    • 在很多情况下,我们不知道在程序中需要创建多少个对象,这时就不能依靠定义引用对象的变量来持有每一个对象。
    • 存储对象的容器就能帮我们解决这样的问题,而集合便是这样的容器。
    • 简单的讲:集合就是储存对象的容器。
  • 数组和集合类的区别
    • 数组和集合类都是容器,都能存储对象
    • 集合类的优势就在于长度可变
  • 集合类的特点
    • 集合类可用于存储对象
    • 集合类的长度可变
    • 一个集合可以存储多种类型的对象

集合接口

  • Collection接口
    • 一个独立的元素的序列,这些元素服从一条或多条规则
    • Collection接口下主要分为List集合和Set集合
    • List集合的特点是元素有存储序、允许有重复元素
    • Set集合的特点是元素无存储顺序、不允许有重复元素
  • Map接口
    • 一组成对的”键值对”对象,允许根据键来查找值
    • Map集合的键不允许有重复,所以Map的所有键构成了一个Set集合
    • 主要学习HashMap、HashTable、TreeMap
  • Iterable接口
    • JDK1.5新定义的接口作为Collection的父接口
    • 主要为了实现增强for循环
List
  • List特点
    • 元素有序,可重复。
    • 我们主要学习三种:ArrayList、Vector、LinkedList
    • 这三种都是List接口的实现类,使用上完全一样,只是实现原理不同,效率不同。
  • ArrayList
    • 底层数组实现
    • 查找快,增删慢
    • 线程不安全
  • LinkedList
    • 底层链表实现
    • 增删块,查找慢
  • Vector
    • 与ArrayList基本一样
    • 线程安全(线程同步),效率低
  • 存取元素
    • List集合元素存取方法一致
    • 使用add()方法增加元素
    • 由于List集合有序,可以使用get()方法获取元素
    • 元素的迭代(Iterator)
  • 通过集合对象的iterator()方法获得迭代器Iterator
  • 通过Iterator迭代器的hasNext()方法判断是否存在下一个元素
  • 通过Iterator迭代器的next()方法获取下一个元素
  • 元素的迭代(Enumeration)
  • 迭代Vector集合中的元素可以使用Enumeration
  • 通过Enumeration的hasMoreElements()方法判断是否还有元素
  • 通过Enumeration的nextElement()方法返回下一个元素

Set

  • Set集合不允许有重复元素,无序(无存储顺序)
    • Set集合通过存入对象的equals方法来保证集合中没有重复元素
  • HashSet
    • HashSet是Set的子类,因此也没有重复元素
    • 底层使用哈希算法保证没有重复元素
    • 存储对象时,先调用对象的hashCode()方法计算一个哈希值,在集合中查找是否有哈希值相同的对象。
    • 如果没有哈希值相同的对象,直接存入。
    • 如果有哈希值相同的对象,则和哈希值相同的对象进行equals()方法比较。
    • equals()方法比较结果相同则不存,不同就存入。
    • 往HashSet集合里存储的对象必须正确重写hashCode和equals方法
    • HashSet存储元素效率非常高
  • TreeSet
    • TreeSet集合通过二叉树算法保证无重复元素,并对元素进行排序
    • 在使用TreeSet时必须指定比较的算法,指定的方式有两种:
    • 自然顺序:将要存储的类实现Comparable接口,重写compareTo方法,在方法中指定算法
    • 比较器顺序:在创建TreeSet时,传入一个比较器Comparator,在比较器的compare方法中指定算法

Map

  • Map集合的特点
    • Map存储了一系列键值的映射关系
    • Map集合需要保证键的唯一性
    • 可以通过键获得值,反之则不能
    • Map集合存储元素使用put(key,value)方法
  • Map集合的两种遍历方式
    • 通过keySet方法返回由键组成的集合,迭代该集合的元素就拿到了所有的键,再调用get方法根据键拿到值
    • 通过entrySet方法返回键值映射关系组成的集合,迭代该集合就拿到了一个个的键值映射关系,通过getKey方法拿到键,通过getValue方法拿到值。
  • HashMap
    • 线程不安全,存取速度快,允许存放null键,null值。
    • 通过HashSet原理保证键唯一性
  • Hashtable
    • 线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
  • TreeMap
    • 通过二叉树算法保证键唯一性
    • 对键进行排序,排序原理与TreeSet相同。
  • Properties(了解)
    • Hashtable的子类,所以也是线程安全的
    • 用于读写配置文件的,一般配置项等号两边都是String,所以该集合中的两列保存的都是String类型的数据
    • 这个集合中只能存String,所以不需要定义泛型。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

标签云