java从入门到入土---基础篇06----集合
集合
概述
英文名称Collection,是用来存放对象的数据结构。其中长度可变,而且集合中可以存放不同类型的对象。并提供了一组操作成批对象的方法。
目前程序中,如果出现了多个数据需要存储.解决方案就是数组.但是数组有缺点.
--长度固定,数组一旦创建长度不可改变
--数组里元素的类型太单调,都是统一的
--数组的遍历方式太单一,用下标遍历
--如果有大量的数据需要存储,可以使用集合.
--集合工具类,都在java.util.*包里
Collection接口
概述
Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些collection 是有序的,而另一些则是无序的。
常用方法
boolean add(E e):添加元素。
boolean addAll(Collection c):把小集合添加到大集合中
boolean contains(Object o) : 如果此 collection 包含指定的元素,则返回 true。
boolean isEmpty() :如果此 collection 没有元素,则返回 true。
Iterator<E> iterator():返回在此 collection 的元素上进行迭代的迭代器。
boolean remove(Object o) :从此 collection 中移除指定元素的单个实例
int size() :返回此 collection 中的元素数。
Objec[] toArray():返回对象数组
Collections工具类
概述
提供了大量的针对collection 集合的静态方法
常用方法
static <T> boolean addAll(Collection<? super T> c, T... elements)
将所有指定元素添加到指定 collection 中。
static T max(Collection<? extends T> coll)
根据元素的自然顺序,返回给定 collection 的最大元素。
static T min(Collection<? extends T> coll)
根据元素的自然顺序 返回给定 collection 的最小元素。
static void reverse(List<?> list)
反转指定列表中元素的顺序。
static void sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。
static void swap(List<?> list, int i, int j)
在指定列表的指定位置处交换元素。
Map接口
概述
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。 映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类
特点
存的数据是键值对的格式
其中键不能重复
每个键对应一个值
HashMap是无序的,TreeMap是有序的
创建对象
接口无法创建对象,只能创建实现类对象
常用方法
void clear()
从此映射中移除所有映射关系(可选操作)。
boolean containsKey(Object key)
如果此映射包含指定键的映射关系,则返回 true。
boolean containsValue(Object value)
如果此映射将一个或多个键映射到指定值,则返回 true。
Set<Map.Entry<K,V>> entrySet()
返回此映射中包含的映射关系的 Set 视图。
boolean equals(Object o)
比较指定的对象与此映射是否相等。
V get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
int hashCode()
返回此映射的哈希码值。
boolean isEmpty()
如果此映射未包含键-值映射关系,则返回 true。
Set<K> keySet()
返回此映射中包含的键的 Set 视图。
V put(K key, V value)
将指定的值与此映射中的指定键关联(可选操作)。
void putAll(Map<? extends K,? extends V> m)
从指定映射中将所有映射关系复制到此映射中(可选操作)。
V remove(Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
int size()
返回此映射中的键-值映射关系数。
Collection<V> values()
返回此映射中包含的值的 Collection 视图。
List
概述
有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。列表本身允许 null 元素,通常它们允许多个 null 元素
特点
元素有序
元素有下标
允许重复元素
可以存null元素
特有常用方法
void add(int index, E element)
在列表的指定位置插入指定元素(可选操作)
boolean addAll(int index, Collection<? extends E> c)
将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。
E get(int index)
返回列表中指定位置的元素
int indexOf(Object o)
返回此列表中第一次出现的指定元素的索引;
int lastIndexOf(Object o)
返回此列表中最后出现的指定元素的索引
ListIterator<E> listIterator()
返回此列表元素的列表迭代器(按适当顺序)。
E remove(int index)
移除列表中指定位置的元素(可选操作)
E set(int index, E element)
用指定元素替换列表中指定位置的元素(可选操作)
List<E> subList(int fromIndex, int toIndex)
返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分
set接口
概述
一个不包含重复元素的 collection,最多包含一个 null 元素
特点
元素不能重复
元素没有下标
元素无序
方法
全都是 继承自Collection接口的方法
HashSet
概述
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的 迭代顺序.通过hashCode()计算出元素的存储位置,并将这些元素正确地分布在桶中。对此 set 进行迭代所需的时间与HashSet 实例的大小(元素的数量)和底层 HashMap实例(桶的数量)的“容量”的和成比例。因此,如果迭代性能很重要,则不要将初始容量设置得太高(或将加载因子设置得太低).
特点
底层是哈希表/散列表
元素无序
元素不能重复
元素没有下标
创建对象
HashSet()
构造一个新的空 set,其底层 HashMap 实例的默认初始容量是 16,加载因子是 0.75
HashMap
特点/原理
为了提高查询效率,底层会维护一个数组,把数据存入数组中
底层根据hashCode()计算得到存储位置/哈希值
如果该位置没有存过数据,直接放在该位置,也就是放在了数组节点上
如果该位置存过数据(hash冲突/hash碰撞),会形成链表结构
把新的数据作为链表的头节点
如果形成了链表结构,会大大降低查询效率
jdk1.8优化了链表中多个节点的查询效率,如果链表上节点数>8,会形成红黑
创建对象
HashMap()
构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap
LinkedList实现类
概述
是List接口的链接列表实现
特点
底层是链表结构
元素有序
元素可重复
元素有下标
创建对象
LinkedList()
构造一个空列表
特有常用方法
void addFirst(E e)
将指定元素插入此列表的开头
void addLast(E e)
将指定元素添加到此列表的结尾
E getFirst()
返回此列表的第一个元素
E getLast()
返回此列表的最后一个元素
E removeFirst()
移除并返回此列表的第一个元素
E removeLast()
移除并返回此列表的最后一个元素
boolean offer(E e)
将指定元素添加到此列表的末尾(最后一个元素)
boolean offerFirst(E e)
在此列表的开头插入指定的元素
boolean offerLast(E e)
在此列表末尾插入指定的元素
E peek()
获取但不移除此列表的头(第一个元素)
E peekFirst()
获取但不移除此列表的第一个元素;如果此列表为空,则返回 null
E poll()
获取并移除此列表的头(第一个元素)
E pollFirst()
获取并移除此列表的第一个元素;如果此列表为空,则返回 null
E pollLast()
获取并移除此列表的最后一个元素;如果此列表为空,则返回 null
ArrayList实现类
概述
List 接口的大小可变数组的实现。每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。
特点
元素有下标
元素可重复
元素有序
底层是一个数组.方便查询
创建对象
ArrayList()
构造一个初始容量为 10 的空列表。