1、前言
Java是面向对象的语言,我们在编程的时候需要存储对象的容器,数组可以满足这个需求,但是数组初始化时长度是固定的,但是我们往往需要一个长度可变化的容器,因此,集合出现了。
1.1集合与数组的区别
(1)长度区别:集合长度可变,数组长度不可变
(2)内容区别:集合可存储不同类型元素,数组存储只可单一类型元素
(3)元素区别:集合只能存储引用类型元素,数组可存储引用、基本类型
1.2集合概述
Java集合框架图如下图所示:
可见所有集合实现类的最顶层接口为Iterable和Collection接口,再向下Collection和Map,Collection分为了三种不同的形式,分别是Lise,Queue和Set接口,然后是对应不同的实现类。
2、Collection接口(单列集合)
Collection集合概述
o 是**单列集合**的最顶层接口,这些对象也称为Collection的元素
Collection集合基本使用
Collection集合的常用方法
接口作用int size();长度boolean add(E e);添加元素boolean isEmpty();是否为空boolean contains(Objoect o);是否包含某元素boolean remove(Objoect o);删除void clear();清楚所有元素Iterator <E>iterator();iterator接口Object[ ]toArray();转换为数组<T>T[ ]toArray(T[ ]arr);2.1List接口
List集合的概述
o 有序(也称为序列),List的行为和数组几乎完全相同:内部按照放入元素的先后顺序存放,每个元素都可以通过索引确定自己的位置,索引和数组一样,都是从
0
开始
List集合的特点
o ①有索引值 ②可以存储重复元素(元素可重复,通过.equals()比较是否重复) ③元素存取有序
List集合的特有方法
o 利用索引(index)定义
方法名描述void add(int inde,E e);给指定索引位置添加元素E get(int inde);获取索引值位置的元素E set(int inde,E e);修改指定索引处的元素,返回被修改的元素E romove(int inde);删除指定索引处的元素,返回被删除的元素
2.1.1 ArrayList实现类
ArrayList数据结构
o 底层是数组
ArrayList特点
o 查询快,增删慢,主要用于查询遍历数据,为最常用集合之一
ArrayList底层分析
o数组结构是有序的元素序列,在内存中开辟一段连续的空间,在空间中存放元素,每个空间都有编号,通过编号可以快速找到相应元素,因此查询快;数组初始化时长度时固定的,想要增删元素,必须创建一个新数组,把源数组的元素复制进来,随后源数组销毁,耗时长,因此增删慢。
2.1.2 LinkedList实现类
LinkedList数据结构
o 底层是双向链表
LinkedList特点
o 查询慢,增删快
LinkedList底层分析
o链表分为单向链表和双向链表,也就是一条链子和两条链子的区别:①多出的那条链子记录了元素顺序,因此单向链表时无序的,双向链表是有序的;②链表没有索引,因此查询慢;③链表的增删只需在原有的基础上连上链子或切断链子,因此增删快。
LinkedList<E>特有方法
成员方法描述void addFirst(E e);将指定元素插入此列表的开头void addLast(E e);将指定元素添加此列表的结尾String removeFirst();
删除并返回第一个元素
String removeLast
() ;
删除并返回最后一个元素
String getFirst();获取第一个元素String getLast();获取最后一个元素
2.1.3 Vector实现类(较少使用)
Vector数据结构
o 底层是数组
Vector特点
o 查询快,增删慢
Vector底层分析
o 和ArrayList一样,都是数组实现,因此具有相似的特性。
它们之间的区别在于:Vector是线程安全,效率低;ArrayList是线程不安全,效率高
2.2Set接口
Set集合的特点
o ①没有索引值 ②不能存储重复元素 ③元素存取无序
如果说List对集合加了有序性的化,那么Set就是对集合加上了唯一性。
2.2.1哈希值
哈希值简介
o 是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
如何获取哈希值
o Object类中的public int hashCode():返回对象的哈希码值
哈希值的特点
①同一个对象多次调用hashCode()方法返回的哈希值是相同的 ② 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
** 2.2.2HashSet实现类**
HashSet数据结构
o (JDK8)底层是哈希表
HashSet特点
o 查询快,元素无序,元素不可重复,没有索引(所以不能使用普通for循环遍历)
2.2.3LinkedHashSet实现类
LinkedHashSet数据结构
o 底层是链表+哈希表
LinkedHashSet特点
o 查询快,元素有序,元素不可重复,没有索引
LinkedHashSet底层分析
o 作为HashSet的子类,比它多了一条链表,这条链表用来记录元素顺序,所以LinkedHashSet中的元素有序
2.2.4TreeSet实现类
TreeSet数据结构
o 底层是红黑树
TreeSet特点
o 查询快,元素有序,元素不可重复,没有索引
TreeSet底层分析
o 作为HashSet的子类,比它多了一条链表,这条链表用来记录元素顺序,所以LinkedHashSet中的元素有序
TreeSet注意事项
o TreeSet新增元素的时候,元素的类型必须是Comparable类型,如果新增的元素不是Comparable类型,则需要:创建一个Comparable类型的对象传入到TreeSet的构造方法中
3、Map接口(双列集合)
Map概述
o Map接口本身就是一个顶层接口,由一堆Map自身接口方法和一个Entry接口组成,Entry接口定义了主要是关于Key-Value自身的一些操作,Map接口定义的是一些属性和关于属性查找修改的一些接口方法 o interface Map<k,v> k:键的类型;V:值的类型
Map特点
** ** ①键值对映射关系
②一个键对应一个值
③键不能重复,值可以重复
④元素存取无序
- Map基本使用
- Map通用方法
方法名说明
V put(K key,V value);
如果K存在,则新的V替换旧的V,返回被替代的V。如果K不存在则返回null
V remove(Object key);
根据键删除键值对元素
void clear();
移除所有的键值对元素
boolean containsKey(Object key);
判断集合是否包含指定的键
boolean containsValue(Object value);
判断集合是否包含指定的值
boolean isEmpty();
判断集合是否为空
int size();
获取集合中元素的个数
Map集合的获取功能
方法名说明V get(Object key);根据key获取V,如果key不存在返回nullSet keySet();获取所有键值Collection values();获取所有值Set<Map.Entry<K,V>>entrySet获取所有键值对象Map集合的遍历
o 遍历思路 我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合 ①把所有的丈夫给集中起来 ②遍历丈夫的集合,获取到每一个丈夫 ③根据丈夫去找对应的妻子 o 步骤分析 ①获取所有键的集合,用keySet()方法实现 ②遍历键的集合,获取到每一个键,用增强for实现 ③根据键去找值。用get(Object key)方法实现
代码实现
3.1HashMap实现类
HashMap数据结构JDK.8
o 底层是哈希表(数组+单向链表+红黑树)
HashMap特点
o 查询快,元素无序,key不允许重复但可以为null,value可以重复
HashMap底层分析
o 和HashSet底层相类似
3.2LinkedHashMap实现类
LinkedHashMap数据结构JDK.8
o 底层是链表+哈希表
LinkedHashMap特点
o 查询快,元素有序,key不允许重复并且不能为null,value可以重复
3.3HashTable实现类(基本不用)
HashTable数据结构JDK.8
o 底层是哈希表
HashTable特点
o 查询快,元素无序,key不允许重复并且不能为null,value可以重复
3.4TreeMap实现类
TreeMap数据结构JDK.8
o 底层是红黑树
TreeMap特点
o 查询快,元素有序,key不允许重复并且不能为null,value可以重复
4、Collections集合工具类
4.1 Collections概述和使用
Collections类的作用
o 是针对集合操作的工具类
Collections类常用方法
方法名说明
static <T extends Comparable<T>> void sort (List<T>list);
将指定的列表按升序排序
static void reverse(List<?> list);
反转指定列表中元素的顺序
static void shuffle(List<?> list);
使用
默认的随机源随机排列指定的列表
版权归原作者 F_549329652 所有, 如有侵权,请联系我们删除。