一:基础公共方法(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.运行结果

  

  

最新文章

  1. PHP变量和数据类型
  2. iOS蓝牙开发CoreBluetooth快速入门
  3. 利用Microsoft.Office.Interop.Excel 将web页面转成PDF
  4. 简单Bat文件编写
  5. session_start保存的客户端cookie的值什么时候改变
  6. hdu 1003(详解) java
  7. poj 1013(uva 608) Counterfeit Dollar
  8. 如何在linux下检测内存泄漏
  9. Java学习笔记13(面向对象六:super)
  10. 抽象业务mapper
  11. Windows Azure 部署 Windows 8 虚拟机
  12. React-理解Redux
  13. ui-router 1.0 003 lazyloading
  14. JVisual 相关help参数
  15. KMP(2)
  16. 使用switchPage.js插件jQuery全屏滚动翻页
  17. 【Java并发编程】之十二:线程间通信中notifyAll造成的早期通知问题
  18. ueditor图片上传配置
  19. java基础语法this关键字
  20. HDU 1043 Eight(反向BFS+打表+康托展开)

热门文章

  1. MySQL中查询行数最多的表并且排序
  2. mysql 原理 ~ checkpoint
  3. Django学习手册 - ORM choice字段 如何在页面上显示值
  4. SpringMVC参数绑定(四)
  5. CentOS 6.8 部署django项目二
  6. 『转载』Matlab中fmincon函数获取乘子
  7. insmod 时报错“Unknown symbol”问题的解决
  8. zabbix系列(四)Zabbix3.0.4添加对Nginx服务的监控
  9. TCP端口转发(centos7)
  10. 13-JS中的面向对象