java提高篇 集合大家族

集合基本概念

一 ,集合介绍
集合是java提供的一种容器,容器就是用来存储数据的。

集合与数组都是容器,他们的不同之处是
1,数组的长度是固定的,集合的长度是可变的
2,数组用来存放基本类型的数据,集合用来存放数据的引用

二,常见的集合
常用的集合有List集合,Set集合和Map集合,其中List与Set继承了collection接口,各接口还实现了不同的实现类

三,集合类的继承关系
java提高篇 集合大家族_第1张图片

Collection(收集)接口

Collection接口是层次结构中的根接口,构成Collection的单位称为元素。Collection接口通常不能直接使用,但该接口提供了添加元素,删除元素,管理数据的方法,由于List接口和Set接口都继承了Collection接口,所以这些方法对List和Set集合通用。
java提高篇 集合大家族_第2张图片

Collection接口常用方法

方法 功能描述
add(E e) 将指定的对象添加到该集合中
remove(Object o) 将指定的对象从该集合移除
isEmpty() 返回boolean值,用于判断当前对象是否为空
iterator() 返回在此collection的元素上进行迭代的迭代器。用于遍历集合中的对象
size() 返回int型值,获取该集合中元素的个数

遍历集合中的元素,都是通过迭代器来实现。Collection接口中的Iterator()方法可以返回在此Collection进行迭代的迭代器

package collection;

import java.util.ArrayList;
import java.util.Collection;

public class Iterator {
	 public static void main(String[] args) {
		 Collection list=new ArrayList<>();
		 list.add("a");
		 list.add("b");
		 list.add("c");
		 java.util.Iterator it=list.iterator();//创建迭代器
		 while(it.hasNext()) {
			 String str=(String)it.next();
			 System.out.println(str);
			 
		 }
	 }
}

List集合

List集合包括List接口和List接口的所有实现类。List集合中的元素允许重复,各元素的顺序就是对象插入的顺序,用户可通过使用索引来访问集合中的元素

List接口
List接口继承了Collection接口,因此包含Collection中的所有方法。此外,List接口还定义了以下两个非常重要的方法
get(int index):获得指定索引位置的元素
set(int index,Object obj):将集合中指定索引位置的对象修改为指定的对象

List接口的实现类
List接口常用的实现类有ArrayList与LinkedList
ArrayList类实现了可变的数组,允许保存所有元素,包括null,并可以根据索引的位置进行快速的随机访问:缺点是向指定的索引位置插入对象或删除对象的速度较慢。
LinkedList类采用链表结构保存对象,这种结构的优点是便于向集合中插入和删除对象,需要向集合中插入,删除对象时,使用Linkedlist类实现的List集合的效率较高,但对于随机访问集合中的对象,使用LinkedList实现List集合的效率较低

Set集合

Set集合中对象不按特定的方式排序,只是简单地把对象加入集合中,但set集合不能包含重复对象。set集合由set接口和set接口的实现类组成。set接口继承了Collection接口,因此包含Collection接口的所有方法。

Set接口

Hashset类实现set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null元素。
TreeSet类不仅实现了set接口,还实现了java.unti.sortedSet接口,因此,TreeSet类实现的set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,即可通过比较器对TreeSet类实现的Set集合中的对象进行排序。

方法 功能描述
first 返回set中当前第一个(最低)元素
last() 返回此set中最后一个(最高)元素
comparator() 返回对此set中的元素进行排序的比较器。如果此set使用自然顺序,则返回null
headSet(E toElement) 返回一个新的set集合,新集合是toElement(不包括)之前的对象

Map集合

Map集合没有继承Collection接口,其提供的key到value的映射。Map中不能包含相同的key每个key只能映射一个value。key还决定了存储对象在映射中的存储位置,但不是由key对象本身决定的,而是通过一种散列技术行处理,产生一个散列吗的整数值。散列吗通常作一个偏移量,该偏析量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置Map集合包括Map接口以及Map集合的所有实现类

Map接口

Map接口提供了将key映射到值的对象。一个映射不能包含重复的key每个key最多只能映射到一个值。map接口中同样提供了集合的常用方法

方法 功能描述
put(K key,V value) 向集合中添加指定的key与value的映射关系
containsKey(Object key) 如果此映射包括指定key的映射关系,则返回true
contains Value 如果此映射将一个或多个key映射到指定值,则返回true
get(Object key) 如果存在指定key对象,则返回该对象对应的值,否则返回null
keySet() 返回该集合中所有key对象形成的Set集合
values() 返回该集合中所有制对象形成的Collection集合

Map接口的实现类

HashMap类是基于哈希表达Map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。HashMap通过哈希表对其内部的映射关系进行快速查找。此类不保证映射的顺序,特别是他不保证顺序不变
TreeMap类不仅实现了Map接口,还实现了Java.util.SortMap接口,英雌,集合中的映射关系具有一定的顺序。但在添加删除和定位映射关系是,TreeMap类比HashMap类性能较差,由于TreeMap类实现的Map集合中的映射关系是根据对象按照一定顺序排列的,因此不允许键对象是null

集合的选择

对 List 的选择
1、对于随机查询与迭代遍历操作,数组比所有的容器都要快。所以在随机访问中一般使用 ArrayList
2、LinkedList 使用双向链表对元素的增加和删除提供了非常好的支持,而 ArrayList 执行增加和删除元素需要
进行元素位移。
3、对于 Vector 而已,我们一般都是避免使用。
4、将 ArrayList 当做首选,毕竟对于集合元素而已我们都是进行遍历,只有当程序的性能因为 List 的频繁插入
和删除而降低时,再考虑 LinkedList。
对 Set 的选择
1、HashSet 由于使用 HashCode 实现,所以在某种程度上来说它的性能永远比 TreeSet 要好,尤其是进行增
加和查找操作。
3、虽然 TreeSet 没有 HashSet 性能好,但是由于它可以维持元素的排序,所以它还是存在用武之地的。
对 Map 的选择
1、HashMap 与 HashSet 同样,支持快速查询。虽然 HashTable 速度的速度也不慢,但是在 HashMap 面前
还是稍微慢了些,所以 HashMap 在查询方面可以取代 HashTable。
2、由于 TreeMap 需要维持内部元素的顺序,所以它通常要比 HashMap 和 HashTable 慢。

你可能感兴趣的:(java提高篇 集合大家族)