热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

黑马程序员java基础毕向东面向对象集合框架MapHashTableHashMapTreeMap

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!-------黑马程序员java基础毕向东面向对象集合框架MapHashTableHashMa
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 黑马程序员 java 基础 毕向东 面向对象 集合框架 Map HashTable  HashMap TreeMap

1集合框架中Map 概述
package day16Map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class MapDemo {
/*
* Map 集合
* 该集合存储键值对
* 一对一对的往里存
* 而且要保证键 的唯一性
*
* 1:添加
* put(K key, V value)
* putAll(Map m)
* 2:删除
* clear
* remove(Object key)

* 3:判断
* containsKey(Object key)
* containsValue(Object key)
* isEmpty()
* 4:获取元素
* get(Object key)
* Collection values()
*
* entrySet()
* keySet
* Map
* |--HashTable:
* 相同:底层是Hash表,不可以存入null;
* 不同:线程同步的
* 此类实现一个哈希表
* 该哈希表将键映射到相应的值
* 任何非 null 对象都可以用作键或值。
* |--HastMap:底层是Hash表
* 相同:基于哈希表的 Map 接口的实现
* 不同:并允许使用 null 值和 null 键
* 除了非同步和允许使用 null 之外
* HashMap 类与 Hashtable 大致相同
* |--TreeMap:
* 底层是二叉树
* 线程不同步
* 对键 进行排序
* 和Set很像
* 其实:Set底层就是使用了Map集合
* */
public static void main(String[] args) {
Map m=new HashMap();
//添加元素
System.out.println(m.put("01", "zs1"));
System.out.println(m.put("01", "qqqzss1"));
//put方法当存入相同的键时,会替换原来键对应的值,put还将该值返回
m.put("02", "zs2");
m.put("03", "zs3");
m.put(null, "zs3");//可以通过
System.out.println("containsKey:"+m.containsKey("01"));
//System.out.println("containsKey:"+m.remove("01"));
System.out.println("m:"+m);
//System.out.println("get:"+m.get(null));//可以应用
Collection c=m.values();
System.out.println("collection:"+c);
}

}
2Map取出元素的方法keySet 、entrySet
package day16Map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapDemo2 {

/*Map集合的取出方式;;两种
* 1:keySet()将Map中的所有键存入Set集合,
* 因为Set具备迭代器。可以通过迭代方式取出键
* 然后是get方法获取值
* Map集合的取出原理:
* 将Map---》set---》迭代器
* 2:Set>entrySet
* 将Map集合中的映射关系存入到Set集合中,
* 而这个关系的数据类型就Map.entry
*
* Mao.Entry 其实Entry也是一个接口
* 他是Map接口中的内部接口
*
* interface Map{
* public static interface Entry{
* public abstract Object getKey();
* public abstract Object getValue();
* }
* }
*
* class HashMaop implement Map{
* class Haha implement Map.entry{
*
* public Object getKey(){
* }
* public Object getValue(){
*
* }
* }
* }
* */
public static void main(String[] args) {
Map m=new HashMap();
System.out.println(m.put("01", "zs1"));
System.out.println(m.put("01", "qqqzss1"));
m.put("02", "zs2");
m.put("03", "zs3");

//先或Map集合 的所有键 存在的集合
Set s=m.keySet();
for (Iterator iterator = s.iterator(); iterator.hasNext();) {
String string = iterator.next();
System.out.print("key:"+string);
System.out.println("-->value:"+m.get(string));

}
//将Map集合的映射关系取出。放在Set集合中
Set> sm=m.entrySet();
for (Iterator> iterator = sm.iterator(); iterator.hasNext();) {
Map.Entry entry = iterator.next();
String key=entry.getKey();
String value=entry.getValue();
System.out.println("key:"+key+"==value:"+value);

}

}

}

3将自定义对象存入Map值,用地址作为键。相同姓名年龄视为同一元素
package day16Map;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

public class MapTest {
/*
* 每一个学生都有对应的归属地。
* 学生Student,地址String。
* 学生属性:姓名,年龄。
* 注意:姓名和年龄相同的视为同一个学生。
* 保证学生的唯一性。
* 1:定义学生类
* 2:定义Map 学生为键,地址为值 存入Map
* 3;获取Map中的元素
*/
public static void main(String[] args) {
System.out.println("------------------Map HashMap----------");
Map m=new HashMap();
sop(m.put( new Student("a",4, "山东"),"山东"));
sop(m.put( new Student("b",2, "北京"),"北京"));
sop(m.put( new Student("c",3, "上海"),"上海" ));
sop(m.put( new Student("d",3, "上海"),"上海" ));
sop(m.put( new Student("c",3, "上海"),"上海"));

//第一种 Map keySet方法

Set s=m.keySet();
for (Iterator iterator = s.iterator(); iterator.hasNext();) {
Student student = iterator.next();
System.out.println(student.toString());

}

//第 2 种 Map entrySet方法
System.out.println("----------- Map entrySet-------------");
Set> sme=m.entrySet();
for (Iterator> iterator = sme.iterator(); iterator.hasNext();) {
Map.Entry entry =iterator.next();
System.out.print("getKey:"+entry.getKey());
System.out.println("->getValue:"+entry.getValue());
}


System.out.println("------------------Set TreeSet----------");
Set set=new TreeSet();
sop(set.add( new Student("a",4, "山东") ));
sop(set.add( new Student("b",2, "北京") ));
sop(set.add( new Student("c",3, "上海") ));
sop(set.add( new Student("d",3, "上海") ));
sop(set.add( new Student("c",3, "上海") ));
for (Iterator iterator =set.iterator(); iterator.hasNext();) {
Student student = iterator.next();
System.out.println(student);

}
}
static void sop(Object o){
System.out.println(o);
}

}
class Student implements Comparable{
private String name;
private int age;
private String address;
public Student( String name,int age,String address) {
this.name=name;
this.age=age;
this.address=address;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getAddress() {
return address;
}
public boolean equals(Object obj){
if(!(obj instanceof Student)){
throw new RuntimeException("不是Student");
}
Student s=(Student) obj;
return (this.name.equals(s.getName())&&this.age==s.getAge());


}
public int hashCode(){
return name.hashCode()+address.hashCode()+age;
}
public String toString(){
return ("name:"+name+"; age"+age+"; address"+address);
}
public int compareTo(Student o) {
int num=new Integer(this.age).compareTo(new Integer(o.age));
if(num==0)
return this.name.compareTo(o.name);
return num;
}
}
4对学生对的年龄进行升序排序:创建比较器
package day16Map;

import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

public class MapTest2 {
/*
* 需求:对学生对的年龄进行升序排序
*
* 以为数据时以键值对的形式存在的
* 所以要使用可以排序的Map 集合 :TreeMap*/
public static void main(String[] args) {
TreeMap m=new TreeMap(new ComSutentByName());
sop(m.put( new Student("a",4, "山东"),"山东"));
sop(m.put( new Student("b",2, "北京"),"北京"));
sop(m.put( new Student("c",3, "上海"),"上海" ));
sop(m.put( new Student("d",3, "上海"),"上海" ));
sop(m.put( new Student("c",3, "上海"),"上海"));

Set> s=m.entrySet();
for (Iterator> iterator = s.iterator(); iterator.hasNext();) {
Map.Entry entry = iterator.next();
System.out.print("getKey:"+entry.getKey());
System.out.println("getValue:"+entry.getValue());
}
}
static void sop(Object o){
System.out.println(o);
}
}
class ComSutentByName implements Comparator{
public int compare(Student o1, Student o2) {
return o1.getName().compareTo(o2.getName());
}

}


5获取该字符串中字母出现的次数
package day16Map;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapTest3 {
/*
* "sagfhgfhgfccyt"
* 获取该字符串中字母出现的次数
* 希望打印
* a(1) c(2)*/
public static void main(String[] args) {
String testStr="121sagfhgfhgfccyt";
Map m=new HashMap();
for (int i = 0; i Character key=testStr.charAt(i);
if(m.containsKey(key)){
m.put(key, m.get(key)+1);
}else{
m.put(key, 1);
}
}
Set s=m.keySet();
for (Iterator iterator = s.iterator(); iterator.hasNext();) {
Character character = iterator.next();
System.out.print(character+"("+m.get(character)+")");

}
}

}
6HashMap>   or HashMap>
package day16Map;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class MapDemo3 {
/*
* Map 扩展知识
* map集合被使用时因为具有映射关系
*
* "yureban" Student("01" "zhangsan");
* "yureban" Student("02" "lisi");
* "jiuyeban" "01" "wangwu";
* "jiuyeban" "02" "zhaoliu";
* */
public static void main(String[] args) {
HashMap hmyr=new HashMap();
hmyr.put("01", "zhangsan");
hmyr.put("02", "lisi");

HashMap hmjy=new HashMap();
hmjy.put("01", "zhaoliu");
hmjy.put("02", "wangwu");

HashMap> chuanzhi=new HashMap>();
chuanzhi.put("yure", hmyr);
chuanzhi.put("jiuye", hmjy);

Set s=chuanzhi.keySet();
for (Iterator iterator = s.iterator(); iterator.hasNext();) {
String type = iterator.next();
HashMap h=chuanzhi.get(type);
getBan(h);


}
System.out.println("------------demo-------------");
demo(hmjy);
}
static void getBan(HashMap h){
Set banSet=h.keySet();
for (Iterator iterator2 = banSet.iterator(); iterator2.hasNext();) {
String string = iterator2.next();
System.out.println("id:"+string+"name:"+h.get(string));

}
}
static void demo(HashMap h){
HashMap> chuanzhi=new HashMap>();
List yureList=new ArrayList();
List jiuyeList=new ArrayList();
yureList.add(new Student("a",1,"beijing"));
yureList.add(new Student("b",2,"beijing"));
jiuyeList.add(new Student("c",3,"beijing"));
jiuyeList.add(new Student("c",3,"beijing"));

getBanList(yureList);
getBanList(jiuyeList);

}
static void getBanList(List h){
for (Iterator iterator2 = h.iterator(); iterator2.hasNext();) {
Student string = iterator2.next();
System.out.println("name:"+string.getName()+"age:"+string.getAge());

}
}
}

《黑马程序员 java 基础 毕向东 面向对象 集合框架 Map HashTable HashMap TreeMap》

结束了集合框架中的 Map接口以及常用了类HashMap、TreeMap、HashTable ,主要体现的Map 键值对的特性

推荐阅读
  • 缓存这个东西就是为了提高运行速度的,由于缓存是在寸土寸金的内存里面,不是在硬盘里面,所以容量是很有限的。LRU这个算法就是把最近一次使用时间离现在时间最远的数据删除掉。先说说List:每 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文介绍了Java集合库的使用方法,包括如何方便地重复使用集合以及下溯造型的应用。通过使用集合库,可以方便地取用各种集合,并将其插入到自己的程序中。为了使集合能够重复使用,Java提供了一种通用类型,即Object类型。通过添加指向集合的对象句柄,可以实现对集合的重复使用。然而,由于集合只能容纳Object类型,当向集合中添加对象句柄时,会丢失其身份或标识信息。为了恢复其本来面貌,可以使用下溯造型。本文还介绍了Java 1.2集合库的特点和优势。 ... [详细]
  • HashTable与ConcurrentHashMap均可实现HashMap的功能,对外提供了键值对存储的数据结构。但是在内部结构及实现上有何区别,性能上的差异到底在哪里又是如何导致的 ... [详细]
  • 转载自:http:www.blogjava.netCarpenterLeearchive20160427430268.html总体介绍之所以把HashSet和HashMa ... [详细]
  • 本篇文章给大家分享的是有关Java中怎么对HashMap按键值排序,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话 ... [详细]
author-avatar
helen女孩12_667
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有