Java基础学习之集合笔记整理
一、集合简述
Java是面向对象的语言,当我们对多个对象进行存储操作时,数组长度不可变,这就满足不了我们的需求,所以Java为我们提供了集合。
集合的基本特点
-
集合的长度可变
-
集合只能存储对象
-
集合可以存储多种类型的对象
二、 集合的体系
集合作为存储容器,可以存储多个元素,但是根据底层数据结构的不同,Java提供了不同种类的集合。而且Java把共性的功能进行提取,形成了一个集合体系。
Java集合体系的关系图如下:
三、Collection接口
Collection是一个单值列集合,是最基本的集合接口,包含有两个子类接口List和Set.该接口定义在java.util包中。
List和Set的一些区别
Collection常用方法
方法名称 | 方法描述 |
---|---|
public boolean add( E e) | 向集合中插入一个元素 |
public boolean addAll(Collection<? extends E> c) | 向集合中插入一组元素 |
public void clear() | 清除集合中的所有元素 |
public boolean remove(Object o) | 从集合中删除一个指定的对象 |
public boolean removeAll(Collection<?> c); | 从集合中删除指定的一组对象元素 |
public boolean isEmpty() | 判断集合是否为空 |
public boolean contains(Object o) | 查找一个元素是否在集合存在 |
public boolean containsAll(Collection<?> c) | 查找一组元素是否在集合中存在 |
public Iterator iterator() | 用来获取集合中的每一个元素(为Iterator接口实例化) |
public int size() | 获取集合中元素的个数 |
boolean retainAll(Collection<?> c) | 判断两个集合中是否有相同的元素(求两个元素的交集) |
public Object[] toArray() | 将对象转换为对象数组 |
T[] toArray(T[] a) | 将指定类型的对象转换为指定类型的数组 |
public boolean equals(Object o) | 比较指定的对象是否同(从Object中覆写过来) |
public int hashCode() | 返回对象的32位的十六进制的哈希值(从Object中覆写过来) |
List接口
List接口下元素的存储有序(存储和取出的顺序),元素可以重复。
List接口的常用方法
方法名称 | 方法描述 |
---|---|
public void add(int index,E element) | 在指定位置添加元素 |
boolean addAll(int index,Collection<? extends E> c) | 在指定位置处添加一组元素 |
public E get(int index) | 根据索引位置取出元素 |
public int indexOf(Object o) | 返回元素在在集合中第一次出现的索引位置,不存在则返回-1 |
public int lastIndexOf(Object o) | 返回元素在在集合中最后一次出现的索引位置,不存在则返回-1 |
public ListIterator listIterator() | 遍历列表的迭代器:(返回ListIterator的接口实例) |
public ListIterator listIterator(int index) | 返回指定位置的ListIterator的接口实例 |
public E remove(int index) | 删除指定位置的元素 |
public E set(int index,E element) | 修改指定位置的元素 |
List subList(int fromIndex,int toIndex) | 截取集合(返回集合的子集合) |
Set接口
Set接口下存储的元素是无序(存储和取出的元素)无重复的。
HashSet
HashSet的底层是哈希表结构,非线程安全的,效率较高
保证元素唯一性的方法 hashCode()和equals()
顺序:
先判断hashCode()值是否相同
相同:
继续走equals()方法,看比较结果
如果返回true:就不添加到集合
如果返回false:添加到集合
不相同:就添加到集合
TreeSet
TreeSet底层是二叉树结构,是非线程安全的,效率比较高。
保证元素唯一性的方法是根据返回值为0
保证排序的两种方法:
自然排序:实现comparable接口
比较器排序:实现comparator接口
四、Map接口
map是一个键值对列的集合,以key-value的形式存储,键不可以重复,值可以重复。
map的接口的定义如下:
public interface Map<K,V>
Map的常用方法如下
方法名称 | 方法描述 |
---|---|
void clear() | 清空Map集合中的所有内容 |
boolean containsKey(Object key) | 判断集合中是否存在指定的key |
boolean containsValue(Object value) | 判断集合中是否存在指定的value |
Set<Map.Entry<K,V>> entrySet() | 将Map接口变为Set集合 |
V get(Object key) | 根据给定的key获取对应的1值 |
Set keySet() | 将全部的key变为Set集合 |
Collection values() | 将全部的value变为Collection集合 |
V put(K key,V value) | 向集合中添加元素 |
void putAll(Map<? extends K,? extends V> m) | 向集合中添加一组元素 |
V remove(Object key) | 根据key删除内容 |
Map 本身是一个接口,所以一般会使用以下的几个子类:HashMap、TreeMap、Hashtabl
HashMap
HashMap是Map的子类,此类的定义如下:
public class HashMap<K,V> extendsAbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
此类继承了 AbstractMap 类,同时可以被克隆,可以被序列化下来
HashSet
Hashtable 是一个最早的 key->value 的操作类,本身是在 JDK 1.0 的时候推出的。其基本操作与 HashMap 是类似的
操作的时候,可以发现与 HashMap 基本上没有什么区别,而且本身都是以 Map 为操作标准的,所以操作的结果形式都一样。但是 Hashtable 中是不能向集合中插入 null 值的。
HashMap和HashTable的区别
区别点 | HashMap | HashTable |
---|---|---|
推出时间 | JDK 1.2 之后推出的,新的操作类 | JDK 1.0 时推出的,旧的操作类 |
性能 | 非线程安全,效率较高 | 线程安全,效率低 |
null | 允许设置为 null | 不允许设置,否则将出现空指向异常 |