Java集合框架:List、Set、Map的理解
1、集合与数组的区别
数组:长度固定,存储内容可以是基本数据类型,只能存储同一种类型
集合:长度可变,存储能容必须数引用类型(对象),存储类型可以不同。
2、常用集合的分类
Collection:存储单值的最大操作根接口
List接口:可重复,元素按插入顺序保存
ArrayList:List接口的实现类,数据结构由数组实现,对增删慢,查找快
LinkedList:List接口的实现类,数据结构由链表实现,对增删快,查找慢
Vector:List接口的实现类,数据结构由数组实现,对增删慢,查找快
Set接口:唯一,元素插入与取出顺序不一致
HashSet:Set接口的实现类,散列存储元素,无序存储
TreeSet:Set接口的实现类,二叉树存储元素,允许对元素排序
Map:存储多值(Key-Value键值对)的操作接口
HashMap:异步,线程不安全,效率高
HashTable:同步,线程安全,效率低
ConcurrentHashMap:采用了分段锁机制,保证线程安全,效率较高
TreeMap:对key使用红黑树排序
3、Collection
Collection:存储单值的最大操作根接口,JDK中不提供collection的直接实现,只提供继承于collection的子接口,常用的两个有:List(允许重复)、Set(不允许重复)
Collectoin接口的方法
方法描述boolean add(E e)在集合尾添加一个元素
boolean addAll(Collection extends E> c)在集合添加一组元素c
void clear()清空集合中的元素
boolean contains(Object o)判断集合中是否包含此元素
boolean contains(Collection> c)判断集合中是否包含一组元素c
boolean isEmpty()判断集合是否为空
Iterator iterator()实例化Iterator接口,返回集合元素的迭代器
boolean remove(Object o)从集合中删除一个元素
boolean removeAll(Collection> c)从集合中删除一组元素c
boolean retainAll(Collection> c)判断是否没有指定集合
int size()求集合中元素的个数
Object[] toArray()返回一个包含集合所有元素的数组
T[] toArray(T[] a)返回一个包含集合所有元素的指定泛型的数组
boolean equals(Object o)比较collection与指定对象是否相等
int hashCode()返回此collection的哈希码值
3.1、List
List:继承自Collection接口的子接口,元素存取顺序一致,元素可以重复,List有三个常用实现类:ArrayList、Vector、LinkedList。
List的对Collection的扩充方法
方法描述void add(int index, E element)在指定位置插入指定元素
void add(int index, Collection extends E> e)在指定位置插入一组元素
E get(int index)根据索引返回元素
int indexOf(Object o)根据对象查找位置,找不到返回-1
int lastIndexOf(Object o)从后向前查找位置,找不到返回-1
ListIterator listIterator()返回ListIterator接口实例
ListIterator listIterator(int index)返回从指定位置的ListIterator的接口实例
E remove(int index)删除指定位置的元素
E set(int index, E element)修改指定位置的元素
List subList(int formIndex, int toIndex)返回指定位置的子集合
3.1.1、List接口的常用实现类
ArrayList:数据结构由数组实现,对增删慢,查找快,线程不安全,效率高。最常用
LinkedList:数据结构由链表实现,对增删快,查找慢,线程不安全,效率高
扩充方法
方法描述void addFirst(E e)在首部添加一个元素
void addLast(E e)在尾部添加一个元素
E getFirst()从首部获取一个元素
E getLast()从尾部获取一个元素
E removeFirst()删除并返回第一个元素
E removeLast()删除并返回最后一个元素
Vector:数据结构由数组实现,对增删慢,查找快,线程安全,效率低
Vector与ArrayList的区别
区别点ArrayListVector出现时间JDK1.2之后JDK1.0
性能效率较高,异步处理,线程不安全效率较低,同步处理,线程安全
输入Iterator、ListIteratorIterator、ListIterator以及Enumeration
3.1.2、List输出
Iterator:遍历集合中的所有元素,用于迭代访问集合中的元素的接口
方法描述boolean hasNext()是否有下一个元素
E next()取出内容
void remove()删除当前内容
在进行迭代输出的时候如果要想删除当前元素,则只能使用 Iterator接口中的 remove()方法,而不能使用集合中的 remove()方法。
ListIterator:是Iterator的子接口,专门用于输出List中的内容。
foreach输出:可以输出数组或集合的内容
for循环
3.2、Set
Set:继承自Collection接口的子接口,元素插入与取出顺序不一致,与List接口最大的不同在于Set接口的内容不允许重复,Set接口中有两个常用实现类:HashSet、TreeSet
Set具有与Collection完全一样的接口,不具备扩充方法
3.2.1、Set接口的常用实现类
HashSet:散列存储元素,无序存储,线程不安全,效率高。
对于元素的唯一性,需要重写hashCode()和equals()方法来保证
TreeSet:二叉树存储元素,允许对元素排序
使用TreeSet存储自定义对象,需定义的类中实现Comparable接口
同样需要重写hashCode()和equals()方法
3.2.2、Set输出
Iterator:迭代输出
foreach输出
3.3 List与Set总结
List与Set都是继承自Collection的子接口
List允许重复元素。Set不允许重复元素,插入重复元素时,存入的是最新的元素
List存入与取出顺序一致,Set存取顺序不一致
List相比Set查找效率高,增删效率低,Set查找效率低,增删效率高
Set使用Iterator与foreach迭代,List出了可以使用以上两个方式外,还可以使用ListIterator与for循环迭代
4、Map
此接口与Collectoin接口没有任何关系,是第二大集合操作接口
Map:存储多值(Key-Value键值对)的操作接口,每个Key映射一个Value,其中Key不允许重复,而Value允许重复
map的常用方法
方法描述void clear()清空Map中的内容
boolean containsKey(Object key)判断Map中是否存在指定key
boolean containsValue(Object value)判断Map中是否存在指定value
Set> entrySet()将Map接口变为Set集合
V get(Object key)根据key找到对应的value
boolean isEmpty()判断Map是否为空
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)根据可以删除内容
4.1、Map接口的常用实现类
HashMap:异步,线程不安全,效率高
HashMap可以指定初始容量和负载因子
允许存入空值,但key最多只能有一个值为空
HashTable:同步,线程安全,效率低
不允许存入空值
HashMap与HashTable的区别:
区别点HashMapHashTable出现时间JDK1.2之后JDK1.0
性能异步处理,性能高同步处理,性能低
空值允许存入空值,但key最多只能有一个值为空不允许存入空值
ConcurrentHashMap:采用了分段锁机制,保证线程安全,效率较高
TreeMap:对key使用红黑树排序
使用TreeMap存储自定义对象,需定义的类中实现Comparable接口
4.2、Map输出
使用Map 接口中的 entrySet()方法将Map 接口的全部内容变为 Set 集合
使用 Set 接口中定义的 iterator()方法为 Iterator 接口进行实例化
之后使用 Iterator 接口进行迭代输出,每一次的迭代都可以取得一个Map.Entry 的实例
通过Map.Entry 进行 key 和 value 的分离
标签:Map,Set,Java,元素,List,接口,集合
来源: https://blog.csdn.net/weixin_44478698/article/details/112427641