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

- 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,所以不需要定义泛型。
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!