Map 接口

学习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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值