集合(Map)

Map集合:一次添加一对元素。也称为双列集合,而Collection为单列集合。

特点:

Map集合中存储的是键值对。

Map集合中必须保证key(键)的唯一性。

Map集合中key可以为null,value也可以为null。

Map集合中key和value都必须是引用数据类型。

Map存储机制:Map是基于数组和链表的数据结构进行存储数据。

常用方法:

1、添加:
V put(k key,V value)//用于存储一对 key-value。返回被替换的value值,如果不是替换就返回null。

2、删除:
void clear();//清空map集合
V remove(K key);//移除键为key的元素,返回被移除的元素。
3、判断:
boolean containsKey(K key);//判断是否有键为key的元素
boolean containsValue(V value);//判断是否有值为value的元素
boolean isEmpty();//判断集合是否为空
4、获取:
V get(K key);//通过key,获取对应的value对象,如果集合中没有此key则返回null。所以可以通过是否返回null来判断是否包含指定键。
int size();//获取键值对的个数。

 

Example:

 

运行结果为:

 

Map集合的遍历:

1、Set<K> keySet();

用于获取Map中所有的key对象,返回一个Set集合。(取出的是key值)

Example:

运行结果为:

2、Set<Entry<K,V>> entrySet();

加你key-value封装成内部类对象,返回Entry对象的Set集合。(取出的key-value键值对)

Example:

3、Collection<V> values();

将Map集合中的所有的value封装到一个Collection集合中。

但是此方法,只能取出Map集合中的value值,不能取出键key。

Map常用子类:

HashTable 和 HashMap底层都是数组+链表结构。

1、HashTable:内部结构是哈希表,是同步的,不允许null作为键,null作为值。是一个古老的类,不建议使用。线程安全。

Properties:是HashTable的子类型,不可存null值和null键,用来存储键值对型的配置文件信息,因为在文件中写的都是字符串,因此Properties的key与value都是字符串类型,可以与IO技术相结合。

Example:

 

2、HashMap:内部结构是哈希表,不是同步的。允许一个null键,多个null值。线程不安全。

LinkedHashMap:是HashMap的子类,使用双层链表来维护key-value的顺序,迭代顺序与添加顺序一致。

怎样判定HashMap中存储的元素是否有重复呢?

作为key的对象采用了hash算法计算存储的数组(散列数组,散列桶)的位置。

如果计算出来的位置没有元素,则可以添加到散列桶内,如果有元素,则会判断equals方法,

如果返回false,则存储在散列桶元素对应的单向链表中。如果返回true,就进行替换(覆盖)。

ps:使用Map集合,作为key的数据类型应该重写equals和HashCode方法

3、TreeMap:是SortedMap子接口的实现类,内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。

(1)自然排序:往TreeMap里添加的key对象,可以实现Comparable接口。重写compareTo方法

Example:

(2)定制排序:作为key对象的数据类型,可以不实现Comparable接口,需要创建一个比较器Comparator对象。实现compare方法。

Example:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的数组和集合是用来存储和操作数据的常用数据结构。数组是一种固定大小的数据结构,用于存储同一类型的元素。数组声明时需要指定元素的类型,并且大小是固定的,不能动态改变。而集合是一种动态大小的数据结构,可以根据需要动态改变大小。集合以object形式来存储元素,因此可以存储不同类型的元素。 在Java中,集合分为List、Set和Map三种主要类型。List是一种有序的集合,可以存储重复的元素。常见的List实现类有ArrayList、LinkedList和Vector。Set是一种不允许重复元素的集合,常见的Set实现类有HashSet和TreeSet。Map是一种键值对的集合,每个元素都包含一个键和一个值,键是唯一的。常见的Map实现类有HashMap、HashTable和TreeMap。 数组和集合在功能上有一些区别。数组声明时需要指定元素的类型,而集合不需要。数组的大小是固定的,而集合可以动态改变大小。此外,数组是一种可读/可写的数据结构,而集合可以提供只读版本。 总结来说,数组和集合都是用来存储和操作数据的数据结构,但数组是固定大小的,集合是动态大小的。数组声明时需要指定元素的类型,而集合不需要。数组比集合更快,但集合提供了更多的功能。在Java中,集合分为List、Set和Map三种主要类型,每种类型都有不同的实现类。 #### 引用[.reference_title] - *1* *3* [Java之数组array和集合list、set、map](https://blog.csdn.net/diaolapei9880/article/details/102382030)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Java必要准确区别之数组Array和集合list、map、set](https://blog.csdn.net/jagel_95/article/details/83112811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值