一:基础公共方法(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. Pytorch中的squeeze()和unsqueeze()函数

    在numpy库中,经常会出现“秩为1的一维数组”(come from 吴恩达的深度学习,目前还没有搞清楚numpy中如此设计的意图).比如: 注意这里的a的shape是[3] ,既不是 [1,3] 也 ...

  2. P3806 【模板】点分治1(CDQ分治)

    题目链接:https://www.luogu.org/problemnew/show/P3806 题目大意:中文题目 具体思路:直接dfs好像会超时,然后我们就开始想优化的方法,然后就是一个CDQ入门 ...

  3. vue2.0环境安装

    参考网站http://www.open-open.com/lib/view/open1476240930270.html (以上博客vue init webpack-simple 工程名字<工程 ...

  4. Java中eclipse与命令行向main函数传递参数

    我们知道main函数是java程序的入口,main函数的参数类型是String[]. 1.Eclipse中向main方法传递参数 例如: public class Mytest { public st ...

  5. java 多线程三

    java 多线程一 java 多线程二 java 多线程三 java 多线程四 注意到 java 多线程一 中 MyThread2 运行结果出现0.-1,那是因为在操作共享数据时没有加锁导致. 加锁的 ...

  6. kdevelop 添加对 C++11的支持

    工程--打开配置--显示高级--显示高级变量(打钩) CMAKE_CXX_FLAGS   项添加   -std=c++0x

  7. MCS-51单片机存储地址空间划分

    1.前言 MCS-51的存储器有片内RAM.片外RAM 和 ROM 三个空间. MCS-51单片机在物理结构上有四个存储空间 1.片内程序存储器(片内ROM)2.片外程序存储器(片外ROM)3.片内数 ...

  8. nodejs xpath

    var fs = require('fs');var xpath = require('xpath');var dom = require('xmldom').DOMParser; // Read t ...

  9. oracle删除表字段和oracle表增加字段

    这篇文章主要介绍了oracle表增加字段.删除表字段修改表字段的使用方法,大家参考使用吧   添加字段的语法:alter table tablename add (column datatype [d ...

  10. 【转】使用SevenZipSharp压缩、解压文件

    引用 下载之后引用“SevenZipSharp.dll”至项目中,然后将“7z.dll”放到bin目录下,或者这样引用:SevenZipCompressor.SetLibraryPath(" ...