我是靠谱客的博主 迷人红酒,最近开发中收集的这篇文章主要介绍黑马程序员-集合补充(Map类),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


----------- android培训 java培训 、java学习型技术博客、期待与您交流! ------------

1.Map类

(Map集合中,以键值对的形式保存映射关系.)

1.1.分类:

按照键的保证唯一方式不同,分为两大类:
HashMap:通过键的hashCode()方法和equals()方法来保证唯一.
注意:
HashMap和Hashtable的区别在于,HashMap中任何对象,包括null都可以作为键值
而Hashtable中只有非null对象可以作为键值
TreeMap:通过键的compareTo()方法来保证唯一.
注意:
这里实现比较,达到二叉树的方法有两种,一种是在集合中元素的对象中实现compareTo()方法.
一种是在定义TreeMap时在参数列表中给定一个Comparator对象.

1.2.HashMap类




1.3.案例:统计字符串字符出现次数
我的代码
package demo;
/*
需求:获取一个字符串中出现的字母及其出现次数。
分析:字符串每位上的字符进行遍历,然后将每位上的字符添加入定义好的一个Map集合。存储动作时加上判断,如果集合中不存在该键(字符作键),添加该键值(字符,1),如果存在则值加1.
步骤:
1.键盘获取一个字符串对象.
2.定义一个Map,遍历字符串,将每一位上的字符当作键,存入Map集合。
3.存储都做加上判断,集合中没有,则值为1,存入。集合中有,则将已有值加一存入。
4.遍历Map集合并打印,达到要求格式。
*/
import java.util.Map;
import java.util.TreeMap;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
class ApearNum
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
System.out.println("请输入需要获取出现字母及其次数的字符串:");
String str = in.nextLine();
TreeMap <Character,Integer> strMap = new TreeMap<>();
for(int i=0;i<str.length();i++)
//这里,突然想到增强for,适用于集合和数组,但不论从哪方面来说,String我都觉得他足够具有特殊性。
//for(Character str.charAt(i) : str)
//所以这里,对增强for是否适用于String,进行了实验,事实证明,不行.
//for(Character charI : str)
{
//Character temp =charI;
Character temp=str.charAt(i);
if(strMap.get(temp)==null)
{
strMap.put(temp,1);
}
else
{
strMap.put(temp,strMap.get(temp)+1);
}
}
System.out.println(strMap);
//TreeSet <Character> strSet = (TreeSet)strMap.keySet();
这里,运行出现类型转换异常,可以得知,keySet()得到的键集合是与Map对应的类型.
//TreeSet <Character> strSet =(TreeSet)strMap.keySet();	为什么这里,我已经将Map改成TreeMap还是类型转换异常?
//通过查看底层源码得知:虽然键集合的确符合TreeSet或者HashSet集合的特性,但他其实是SortedSet的一个子类,并不是想当然的是HashSet或者TreeSet.
Set <Character>	strSet = strMap.keySet();
StringBuilder strSB = new StringBuilder();
for(Character key : strSet)
{
strSB.append("[").append(key+":").append(strMap.get(key)).append("] ");
}
System.out.println(strSB);
}
}

1.4.总结Map

HashMap
底层数据结构是哈希表。线程不安全,效率高。它依赖两个方法:hashCode()和equals()保证唯一性.
顺序:
首先判断hashCode()值是否相同。
同:继续走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。

不同:就添加到集合。
Hashtable

(注意,这里table为小写,因为Hashtable在早起jdk版本存在
底层数据结构是哈希表。线程安全,效率低。它依赖两个方法:hashCode()和equals())保证唯一性.
顺序:
首先判断hashCode()值是否相同。
同:继续走equals(),看返回值
如果true:就不添加到集合。
如果false:就添加到集合。
不同:就添加到集合。

TreeMap
底层数据结构是二叉树。线程不安全,效率高。根据返回是否是0保证唯一性。
自然排序(元素具备比较性):实现Comparable接口
比较器排序(集合具备比较性):实现Comparator接口



-----------android培训java培训、java学习型技术博客、期待与您交流! ------------
详情请查看:http://edu.csdn.net/

最后

以上就是迷人红酒为你收集整理的黑马程序员-集合补充(Map类)的全部内容,希望文章能够帮你解决黑马程序员-集合补充(Map类)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部