博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Map 接口
阅读量:6774 次
发布时间:2019-06-26

本文共 3519 字,大约阅读时间需要 11 分钟。

学习map集合的目的?

当有需求要通过某一个信息来查找对应的信息,如:通过姓名查找性别,身份信息,或通过ID查找用户名,注册信息等,这种情况下,就需要用到Map集合。

Map集合提供了集合之间一种映射关系,让集合和集合之间产生关联。

Map集合的特点:

1、可以存储唯一的列的数据(唯一,不可重复性)——Set

2、可以存储重复的数据(可重复性)—— List

3、值的顺序取决于键的顺序,以键查找值,一一对应。

4、键和值都可以存储“null”元素。

注意:

Map集合中,一个映射不能包含重复的键,每个键最多只能映射到一个值。

常用功能:

1.添加功能

V put(K key, V value)

void putAll(Map<? extends K,? extends V> m)

2.删除功能

V remove(Object key)

void clear()

3.遍历功能

Set keySet()

Collection values()

Set<Map.Entry<K,V>> entrySet()

4.获取功能

V get(Object key)

5.判断功能

boolean containsKey(Object key)

boolean containsValue(Object value)

boolean isEmpty()

6.修改功能

V put(K key, V value)

void putAll(Map<? extends K,? extends V> m)

7.长度功能

int size()

HashMap

基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。

HashMap不保证映射的顺序,并且不保证该顺序恒久不变。

特点:

1、键无序,唯一,类似于Set集合;

2、值有序,可重复,类似于List;

3、底层数据结构是哈希表,保证键唯一;

4、允许键为null,值为null。

应用案例:

public static void main(String[] args) {

Map<String, Integer> map = new HashMap<>();

map.put("金南俊", 25);

map.put("金硕珍", 27);

map.put("闵玧其", 26);

map.put("郑号锡", 25);

map.put("朴智旻", 24);

map.put("金泰亨", 23);

map.put("田柾国", 22);

System.out.println(map);

//将泰泰年龄增加1岁

map.put("金泰亨", 24);

System.out.println(map);

//防弹全体成员年龄加1岁

for(String key : map.keySet()) {

map.put(key, map.get(key) + 1);

}

System.out.println(map);

//遍历防弹成员姓名

Set keys = map.keySet();

for (String key : keys) {

System.out.print(key + " ");

}

System.out.println();//换行

//遍历防弹成员年龄

Collection values = map.values();

for (Integer value : values) {

System.out.print(value + " ");

}

System.out.println();//换行

//遍历防弹成员姓名和年龄

Set<Entry<String, Integer>> kv = map.entrySet();

for (Entry<String, Integer> entry : kv) {

System.out.print(entry.getKey() + ":" + entry.getValue() + " ");

}

}

LinkedHashMap

Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。

特点:

1、键有序,且唯一;

2、值有序,可重复,类似于List;

3、底层数据结构是哈希表和链表,哈希表保证键的唯一性,链表保证键的有序性。

public static void main(String[] args) {

LinkedHashMap<Integer, String> lhm = new LinkedHashMap<Integer, String>();

lhm.put(01, "金泰亨1");

lhm.put(02, "金泰亨2");

lhm.put(03, "金泰亨3");

lhm.put(04, "金泰亨4");

lhm.put(05, "金泰亨5");

Set keys = lhm.keySet();

for (Integer key : keys) {

System.out.println(key + "|" + lhm.get(key));

}

}

TreeMap

基于红黑树(Red-Black tree)的 NavigableMap 实现。

该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

特点:

1、键可排序,且唯一;

2、值有序,可重复,类似于List;

3、底层数据结构是自平衡的二叉树,可排序;

4、排序方式类似于TreeSet,分为自然排序和比较器排序,具体取决于使用的构造方法。

public static void main(String[] args) {

TreeMap<Integer, String> tm = new TreeMap<Integer, String>();

tm.put(26, "金南俊");

tm.put(28, "金硕珍");

tm.put(27, "闵玧其");

tm.put(26, "郑号锡");

tm.put(25, "朴智旻");

tm.put(25, "金泰亨");

tm.put(23, "田柾国");

tm.put(23, "田柾国");

tm.put(25, "金泰亨");

Set keys = tm.keySet();

for (Integer key : keys) {

String value = tm.get(key);

System.out.println(key + "|" + value);

}

}

hashtable

此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。

特点:

1、不允许null键和null值;

2、线程安全,效率低;

HashMap和Hashtable的区别:

1、HashMap是不安全的不同步的效率高的 允许null键和null值

2、Hashtable是安全的同步的效率低的 不允许null键和null值

3、两者底层都是哈希表结构;

public static void main(String[] args) {

Hashtable<String, String> hashtable = new Hashtable<String, String>();

hashtable.put("金南俊", "rap");

hashtable.put("金硕珍", "vocal");

hashtable.put("闵玧其", "rap");

hashtable.put("郑号锡", "rap");

hashtable.put("朴智旻", "vocal");

hashtable.put("金泰亨", "vocal");

hashtable.put("田柾国", "vocal");

System.out.println(hashtable);

Enumeration keys = hashtable.keys();

while (keys.hasMoreElements()) {

String key = keys.nextElement();

String value = hashtable.get(key);

System.out.println(key + "|" + value);

}

}

}

转载于:https://juejin.im/post/5cc7f31af265da037d4fb8de

你可能感兴趣的文章
自动化测试用例编写原则
查看>>
crontab定时任务以及其中中文乱码问题
查看>>
CSAPP buffer lab记录——IA32版本
查看>>
Hyperledger fabric多机的环境部署
查看>>
关于sqlserver2008 bcp根据数据表导出xml格式文件的小记
查看>>
总结:栈和队列的学习
查看>>
线段树(可能还会有树状数组吧)
查看>>
Gnome 3.2 发布计划及新功能
查看>>
利用bobo-browse 实现lucene的分组统计功能
查看>>
/MT、/MD编译选项,以及可能引起在不同堆中申请、释放内存的问题
查看>>
ubuntu server 使用parted分区
查看>>
solr实现满足指定距离范围条件的搜索
查看>>
[转载]Web前端研发工程师编程能力飞升之路
查看>>
Redis
查看>>
XINS 3.0 正式版发布,远程 API 调用规范
查看>>
(转)Oracle中For和while及一些应用
查看>>
jQuery基础及选择器
查看>>
DragonFly BSD 3.2 发布
查看>>
C#中为什么需要装箱拆箱操作?
查看>>
PHP类中一般方法与静态方法的疑问
查看>>