一:基础公共方法(map不再是简单的加索引,可以直接命名key,通过key进行遍历)

1.常见的map子类

  HashTable:底层是哈希表结构。不允许null键和null值,线程同步

  HashMap:底层是哈希表结构,可以允许null键和null值,线程不同步

  TreeMap:底层是二叉树结构,线程不同步,可以给map的键排序

2.map程序--公共的方法

 import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map; public class Test60 { public static void main(String[] args) {
Map<Integer,String> hashMap=new HashMap<>();
//增
hashMap.put(1, "java1");
hashMap.put(2, "java2");
hashMap.put(3, "java3");
//判断
System.out.println(hashMap.containsKey(2));
System.out.println(hashMap.containsValue("java2"));
System.out.println(hashMap.isEmpty());
//删除
System.out.println(hashMap.remove(3));
//获取1
System.out.println(hashMap);
System.out.println(hashMap.get(2));
//获取2
Collection<String> col=hashMap.values();//values方法返回的是Collection,这时候可以使用迭代器迭代出成员。
Iterator it=col.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
} }

3.运行结果

  

二:map遍历的两个重要方法

1.keyset的使用

  把map转换成Set类型,就是将所有的键存入到Set<K>中。

  再使用get(K)来获得对应的value值。

 import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Test61 {
public static void main(String[] args) {
Map<Integer,String> hashMap=new HashMap<>();
hashMap.put(1, "java1");
hashMap.put(2, "java2");
hashMap.put(3, "java3");
Set<Integer> keySet=hashMap.keySet();
Iterator<Integer> it=keySet.iterator();
while(it.hasNext()){
Integer key=it.next();
String value=hashMap.get(key);
System.out.println(key+":"+value);
}
}
}

2.运行结果

  

3.entrySet的使用

  返回包含键值关系的Set视图,返回值放入Set中,类型是Map.Entry<K,V>。

  得到映射关系后,可以选择的方法是getKey与getValue分别取出key与value。

 public static void main(String[] args) {
Map<Integer,String> hashMap=new HashMap<>();
hashMap.put(1, "java1");
hashMap.put(2, "java2");
hashMap.put(3, "java3");
Set<Map.Entry<Integer,String>> set=hashMap.entrySet();
Iterator<Map.Entry<Integer, String>> itr=set.iterator();
while(itr.hasNext()){
Map.Entry<Integer, String> mapentry= itr.next();
Integer key=mapentry.getKey();
String value=mapentry.getValue();
System.out.println(key+"::"+value);
}
}

4.运行结果

  

三:map扩展

1.HashMap

  保证学生对象的唯一性。

  对学生对象的id进行排序。

 import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class Test63 {
public static void main(String[] args) {
TreeMap<Student,String> tm=new TreeMap<>();
tm.put(new Student(1,"zhangsan"),"beijing");
tm.put(new Student(2,"lisi"),"shanghai");
tm.put(new Student(4,"zhaoliu"),"hangzhou");
tm.put(new Student(3,"wangwu"),"shenzhen");
tm.put(new Student(2,"lisi"),"shanghai");
Set<Map.Entry<Student,String>> set=tm.entrySet();
Iterator<Map.Entry<Student,String>> itr=set.iterator();
while(itr.hasNext()){
Map.Entry<Student, String> me=itr.next();
Student stu=me.getKey();
String str=me.getValue();
System.out.println(stu+"::"+str);
}
}
}
class Student implements Comparable<Student>{
private int id;
private String name;
Student(int id,String name){
this.id=id;
this.name=name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int compareTo(Student s){
int num=new Integer(this.id).compareTo(new Integer(s.id));
if(num==0){
return name.compareTo(s.name);
}
return num;
}
public int hashCode(){
return name.hashCode()+id*19;
}
public boolean equals(Object obj){
if(!(obj instanceof Student)){
return false;
}
Student s = (Student) obj;
return this.name.equals(s.name)&&this.id==s.id;
}
@Override
public String toString() {
return "id=" + id + ", name=" + name;
} }

2.运行结果

  可以进行排序,学生具备了自然排序的功能(comparable接口),并且对于重复的记录只会保存一条

  

3.TreeMap

  对学生对象的name进行排序,同时保持id具备自身的比较性。

  student对象仍然是上面例子中的对象,不再改动。

 import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap; public class Test64 {
public static void main(String[] args) {
TreeMap<Student,String> tm=new TreeMap<>(new StunameComparator());
tm.put(new Student(1,"zhangsan"),"beijing");
tm.put(new Student(2,"lisi"),"shanghai");
tm.put(new Student(4,"zhaoliu"),"hangzhou");
tm.put(new Student(3,"wangwu"),"shenzhen");
tm.put(new Student(2,"lisi"),"shanghai");
Set<Map.Entry<Student,String>> set=tm.entrySet();
Iterator<Map.Entry<Student,String>> itr=set.iterator();
while(itr.hasNext()){
Map.Entry<Student, String> me=itr.next();
Student stu=me.getKey();
String str=me.getValue();
System.out.println(stu+"::"+str);
}
}
}
class StunameComparator implements Comparator<Student>{ @Override
public int compare(Student s1, Student s2) {
int num=s1.getName().compareTo(s2.getName());
if(num==0){
return new Integer(s1.getId()).compareTo(s2.getId());
}
return num;
} }

4.运行结果

  

5.小练习(统计字符串中出现的字符次数)

 import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap; public class Test65 {
public static void main(String[] args) {
String s=charCount("aaabdd");
System.out.println(s);
}
private static String charCount(String str) {
char[] arr=str.toCharArray();
TreeMap<Character,Integer> tm=new TreeMap<>();
int count=0;
for(int i=0;i<arr.length;i++){
if(!(arr[i]>='a'&&arr[i]<='z'||arr[i]>='A'&&arr[i]<='Z'))
continue;
Integer value=tm.get(arr[i]);
System.out.println("-----"+value);
if(value!=null)
count=value;
count++;
tm.put(arr[i], count);
count=0;
}
StringBuffer sb=new StringBuffer();
Set<Map.Entry<Character,Integer>> entry=tm.entrySet();
Iterator<Map.Entry<Character, Integer>> itr=entry.iterator();
while(itr.hasNext()){
Map.Entry<Character, Integer> me=itr.next();
Character ch=me.getKey();
Integer value=me.getValue();
sb.append(ch+"("+value+")");
}
return sb.toString();
}
}

6.运行结果

  

  

Map的知识点梳理(不包含collections工具类)的更多相关文章

  1. Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

    1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:          * 将键映射到值的对象          * 一个映射不能包含重复的键          * 每个键最多 ...

  2. Collections工具类、Map集合、HashMap、Hashtable(十八)

    1.Map集合概述和特点 * A:Map接口概述 * 去重复, * 查看API可以知道, * 将键映射到值的对象, * 一个映射不能包含重复的键, * 每个键最多只能映射到一个值.* B:Map接口和 ...

  3. day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)

    Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类  实现了  set接口       唯一 ...

  4. [19/03/27-星期三] 容器_Iterator(迭代器)之遍历容器元素(List/Set/Map)&Collections工具类

    一.概念 迭代器为我们提供了统一的遍历容器的方式 /* *迭代器遍历 * */ package cn.sxt.collection; import java.security.KeyStore.Ent ...

  5. Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable

    Java容器类Collection,List,Set,Map.,Iterator,Collections工具类,Arrays工具类,Comparable接口,泛型 Collection,List,Se ...

  6. (Set, Map, Collections工具类)JAVA集合框架二

    Java集合框架部分细节总结二 Set 实现类:HashSet,TreeSet HashSet 基于HashCode计算元素存放位置,当计算得出哈希码相同时,会调用equals判断是否相同,相同则拒绝 ...

  7. java 集合Collections 工具类:排序,查找替换。Set、List、Map 的of方法创建不可变集合

    Collections 工具类 Java 提供1个操作 Set List Map 等集合的工具类 Collections ,该工具类里提供了大量方法对集合元素进行排序.查询和修改等操作,还提供了将集合 ...

  8. LinkedHashSet、Map、Map接口HashMap、Hashtable,TreeSet、TreeMap、如何选择使用集合实现类,Collections工具类

    一.Set接口实现类LinkedHashSet 实现继承图: 1.LinkedHashSet的全面说明 1) LinkedHashSet是 HashSet的子类 2) LinkedHashSet底层是 ...

  9. 双列集合Map接口 & Collections工具类

    HashMap 常用方法 遍历方式 iterator迭代器  ITIT HashTable 继承字典 Hashtable--Properties 文件读写 总结 Collections工具类

随机推荐

  1. 无线路由器的web漏洞

    1.XSS漏洞 2.CSRF漏洞 这样的攻击方式具体可以由多种形式实现,除了建立欺诈服务器外,还可以使用超链接陷阱.所谓的超链接陷阱,就是指伪造一个可信的链接或者地址,但其实际地址中包含了修改无线路由 ...

  2. [C++]Linux之Ubuntu下编译C程序出现错误:“ stray ‘\302'或者'\240' in program”的解决方案

    参考文献:[error: stray ‘\240’ in program或 error: stray ‘\302’ in program](http://blog.csdn.net/u01299585 ...

  3. R 的农场 chebnear (二分答案+最近平面点对)

    题面 \(solution:\) 这道题想到二分答案应该是不难的,因为题目是求平均工资的最小值,这个显然具备单调性: 我们设平均工资的最小值为ans,如果我们现在的平均工资x小于ans那么将x带入题目 ...

  4. mysql 架构 ~异地容灾

    一 简介 我们来探讨下多机房下的mysql架构二 目的:    首先要清楚你的目的     1 实现异地机房的容灾备份      2 实现异地机房的双活 三 叙说     1 实现异地机房的容灾备份  ...

  5. linux bash的重定向

    cnblogs原创 下面几种bash重定向各表示什么意思? find / -name passwd > /dev/null >& > /dev/null find / -na ...

  6. Java读取Txt封装到对象中——(三)

    JavaBean package bean; public class Question { private String timu; //题干 private String leixing; //类 ...

  7. JS window对象的top、parent、opener含义介绍

    1.top该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. 2.openeropener用于在window.open的页面引用执行该window ...

  8. C++读写TXT文件中的string或者int型数据以及string流的用法

    对文件的读写操作是我们在做项目时经常用到的,在网上看了很多博客,结合自身的项目经验总结了一下,因此写了这篇博客,有些地方可能直接从别的博客中复制过来,但是都会注明出处. 一.文件的输入输出 fstre ...

  9. 【Python】Python-基础语法学习

    基础语法学习 果然学完 C++ 后再看其他语言的确有很多的共性,只需要熟悉一下python的独特语法和 C++ 中的差异就可以写出一些小的程序,而写得过程中也再次体会出python代码的精简和灵活: ...

  10. C/C++杂记:深入虚表结构

    1. 虚表与“虚函数表” 在“C/C++杂记:虚函数的实现的基本原理”一文中曾提到“虚函数表”的概念,只是为了便于理解,事实是:虚函数表并不真的独立存在,它只是虚表(virtual table)中的一 ...