java判单map是数组,Java集合框架:List、Set、Map的理解

Java集合框架:List、Set、Map的理解

0ed5bdd98e145a9782d8085a99f56632.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值