概述
- Java集合就像一种容器,可以动态的把多个对象的引用放入容器中
- Java集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组
Java集合可分为 Collection 和 Map 两种体系
- Collection接口:单列数据,定义了存取一组对象的方法的集合
List 接口:元素有序、可重复的集合
Set 接口:元素无序、不可重复的集合 - Map接口:双列数据,保存具有映射关系“key-value”的集合
Collection接口:单列数据,定义了存取一组对象的方法的集合
Collection接口中的常用方法:
- boolean add(e):将元素 e 添加到集合中
- int size():获取元素的个数
- boolean addAll(Collection coll):将coll集合中的元素添加到当前的集合中
- boolean isEmpty():判断当前集合中是否有元素
- boolean clear():清空集合元素
- boolean contains(Object obj):判断当前集合中是否包含obj,通过调用obj对象所在类的equals()
- boolean containsAll(Collection coll):判断形参coll中的所有元素是否都存在于当前集合中
- boolean remove(Object obj):从当前集合中移除obj元素
- boolean removeAll(Collection coll):从当前集合中移除coll中的所有元素
- boolean retainAll(Collection coll):交集:获取当前集合和coll集合的交集,并返回给当前集合
- boolean equals(Object obj):当前集合和形参集合的元素都相同时返回true
- int hashCode():返回当前对象的哈希值
- Object[] toArray():集合向数组的转换
- iterator():返回Iterator接口的实例,用于遍历集合元素
迭代器接口 Iterator 的使用:
boolean hasNext()
next():指针下移,将下移以后集合位置上的元素返回
remove():可以在遍历的时候删除集合中的元素,不同于集合直接调用remove()
List 接口:元素有序、可重复的集合
主要方法:
- void add(int index, Object ele):在 index 位置插入 ele 元素
- boolean addAll(int index, Collection eles):从 index 位置开始将 eles 中的所有元素添加进来
- Object get(int index):获取指定 index 位置的元素
- int indexOf(Object obj):返回 obj 在集合中首次出现的位置
- int lastIndexOf(Object obj):返回 obj 在当前集合中末次出现的位置
- Object remove(int index):移除指定 index 位置的元素,并返回此元素
- Object set(int index ,Object ele):设置指定 index 位置的元素为 ele
- List subList(int fromIndex ,int toIndex):返回从fromIndex到toIndex位置的子集合
具体为三个实现类:
- ArrayList: 作为List接口的主要实现类:线程不安全的,效率高,底层使用Object[ ] 存储
- LinkedList: 对于频繁的插入、删除操作,使用此类比使用ArrayList效率高:底层使用双向链表存储
- Vector 作为List接口的古老实现类:线程安全的,效率低,底层使用Object[] 存储
Set接口:元素无序、不可重复的集合
以HashSet为例说明:
- 无序性: 不等于随机性。存储的数据在底层数组中并非按照数组索引的顺序添加的,而是根据数据的哈希值决定的。
- 不可重复性: 保证添加的元素按照equals()判断时,不能返回true。即相同的元素只能添加一个。
- 添加元素过程: 首先调用需插入元素所在类的hashCode()方法,计算元素的哈希值,此哈希值接着通过某种算法计算出在HashSet底层数组中的存储位置(即索引位置),判断数组此位置上是否已有元素,如果此位置没有其他元素,则添加成功。
如果此位置上有其他元素,则比较两元素的哈希值,如果哈希值不同,则通过链表方式添加成功
如果哈希值相同,进而通过调用equals()方法,如果equals()方法返回值为false,则通过链表方式添加成功。
如果equals()方法返回值为true,则添加失败。 - 向Set中添加的数据,其所在类一定要重写hashCode()和equals()方法
重写的hashCode()和equals()方法尽可能的保持一致性。以实现对象相等规则,即相等的对象必须具有相等的散列码
具体为三个实现类:
- HashSet: 作为Set接口的主要实现类:线程不安全的:可以存储null值
- LinkedHashSet: 作为HashSet的子类:遍历其内部数据时,可以按照添加的顺序遍历,其每个元素还通过链表连接。
对于频繁的遍历操作,LinkedHashSet效率高于HashSet。 - TreeSet: 可以按照添加对象的指定属性,进行排序。
向TreeSet中添加的数据,要求是相同类的对象。
自然排序(实现Comparable接口)中,比较两个对象是否相同的标准为:compareTo()返回0,不再是equals()。
定制排序(实现Comparator接口)中,比较两个对象是否相同的标准为:compareTo()返回0,不再是equals()。
Map接口:双列数据,保存具有映射关系“key-value”的集合
Map结构的理解:
- Map中的key:无序的、不可重复的,使用Set存储所有的key -->key所在的类要重写equals()和hashCode()
- Map中的value:无序的、可重复的,使用Collection存储所有的value -->value所在的类要重写equals()
- 一个键值对:key-value构成了一个Entry对象
- Map中的Entry:无序的、不可重复的,使用Set存储所有的entry
主要方法
- Object put(Object key ,Object value):将指定的key-value添加到(或修改)当前map对象中
- void putAll(Map m):将m中的所有key-value对存放到当前map中
- Object remove(Object key):移除指定key的key-value对,并返回value
- void clear():清空当前map中的所有数据
- Object get(Object key):获取指定key对应的value
- boolean containsKey(Object key):是否包含指定的key
- boolean containsValue(Object value):是否包含指定的value
- int size():返回map中key-value对的个数
- boolean isEmpty():判断当前map是否为空
- boolean equals(Object obj):判断当前map和参数对象obj是否相等
- Set keySet():返回所有key构成的Set集合
- Collection values():返回所有value构成的Collection集合
- Set entrySet():返回所有key-value对构成的Set集合
具体实现类:
- HashMap: 作为Map的主要实现类:线程不安全的,效率高:可存储null的key和value
- LinkedHashMap: 作为HashMap的子类。保证可以按照添加的顺序实现遍历,其每个元素还通过链表连接。
- TreeMap: 保证按照添加的key-value对进行排序,实现遍历排序。
- Hashtable: 作为Map的古老实现类:线程安全的,效率低:不能存储null的key和value,
- Properties: 作为Hashtable的子类:常用来处理配置文件。key和value都是String类型。
Collections工具类
Collections是一个操作Set、List、Map等集合的工具类
Collections中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法
排序操作:(均为static方法)
- reverse(List):反转List中元素的顺序
- shuffle(List):对Lise集合元素进行随机排序
- sort(List):根据元素的自然顺序对指定List集合元素按升序排序
- sort(List,Comparator):根据指定的Comparator产生的顺序对List集合元素进行排序
- swap(List,int,int):将指定List集合中的i处元素和j处元素进行交换
查找、替换:
- Object max(Collection):根据元素的自然顺序,返回给定集合中的最大元素
- Object max(Collection ,Comparator):根据Comparator指定的顺序,返回给定集合中的最大元素
- Object min(Collection):
- Object min(Collection ,Comparator):
- int frequency(Collection ,Object):返回指定集合中指定元素的出现次数
- void copy(List dest ,List src):将src中的内容复制到dest中
- boolean replaceAll(List list ,Object oldVal ,Object newVal):使用新值替换List对象的所有旧值