`
Luob.
  • 浏览: 1590078 次
  • 来自: 上海
社区版块
存档分类
最新评论

java之16天 Map集合 (一)

    博客分类:
  • Java
阅读更多
Map 集合的使用
/**
 * Map集合: 该集合存储键值对,一对一对往里存,而且要保证键的唯一性
 *   1.添加
 *   	 	  put(K key,V value)
 *       void putAll(Map<? extends K,? extends V> m) 
 *   2.删除
 *        clear()
 *        remove()
 *   3.判断
 *   	 containsKey(Object Key)
 *       containsValue(Object value) 
 *       isEmpty()
 *       
 *   4.获取
 *       get(Object key) 
 *       size()
 *       values()
 *       Set<Map.Entry<K,V>> entrySet() 
 *       Set<K> keySet()
 *       
 *  Map
 *   |--HashTable: 底层是哈希表数据结构,不可以存入null键 和 null值,该集合是线程同步JDK 1.0. 无序
 *   |--HashMap:底层是哈希表数据结构,并允许使用null键null值,该集合不同步.JDK 1.2 效率高,无序
 *   |--TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键排序.
 *   
 *  和 Set 很像 
 *     其实,Set底层就是使用Map集合.
 *
 */

public class MapDemo {
	
	public static void main(String[] args) {
		
		Map<String,String> map=new HashMap<String,String>();
		
		//添加元素,如果出现添加元素时,相同的键,那么后添加的值会覆盖原来键的对应值,并会返回被覆盖的值.
		map.put("01", "zhangsan1");
		map.put("02", "zhangsan2");
		System.out.println("put:"+map.put("03", "zhangsan3"));  //put 会返回 这个键对应的原来的值
		System.out.println("put:"+map.put("03", "zhangsan4"));
		
		System.out.println("containsKey:"+map.containsKey("022"));
		System.out.println("remove:"+map.remove("002"));//不存在的可以 就返回 null
		System.out.println("remove:"+map.remove("02")); //存在的 删除 并返回 要删除的对象
		System.out.println(map);
		System.out.println("get:"+map.get("03"));  //可以通过get方法的返回值来判断键是否存在
		
		map.put(null, "hah");  //HashMap可以使用 null键 null值 所以下面的能够取到值 HashTable就不行
		System.out.println("nullKey:"+map.get(null));
		
		
		map.put("04",null);   
		System.out.println("nullValue:"+map.get("04"));
		
		
		//获取Map集合中所有的值
		Collection<String> values=map.values();
		System.out.println(values);
		
		//获取Map集合的Key的所有值
		Set<String> keys=map.keySet();
		System.out.println(keys);
		
	}

}

Map 集合的两种取出方式

/**
 *Map 集合的两种取出方式
 * 1.Set<key> keySet: 将Map中的所有键存入的到Set集合中,因为Set具有迭代,所以可以用迭代方式取出所有的键 
 *         然后根据get方式,获取每个键对应的值
 *         
 *        Map集合的取出原理: 将Map集合   转成 Set集合  再通过迭代器 
 *        
 * 2.Set<Map.Entry<K,V>> entrySet: 将Map集合中的映射关系,存入Set集合中,
 *        而这个关系的数据类型就是Map.entry
 *        
 * Map.Entry<K,V>:其实Entry也是一个接口,他是Map接口中的一个内部接口
 * 
 * interface Map<K,V>{
 * 		public static interface Entry<K,V>{
 * 				public abstract K getKey();
 * 				public abstract V getValue();
 * 		}
 * 
 * }
 * 
 */
/*interface Map<K,V>{
	public static interface Entry<K,V>{
		public abstract K getKey();
		public abstract V getValue();
	}
}*/


public class MapDemo2 {

	public static void main(String[] args) {

		Map<String,String> map=new HashMap<String,String>();
		map.put("01", "zhangsan1");
		map.put("02", "zhangsan2");
		System.out.println("put:"+map.put("03", "zhangsan3"));  //put 会返回 这个键被覆盖的值
		System.out.println("put:"+map.put("03", "zhangsan4"));
		
		
		//1.使用 keySet
		
		//先获取Map集合的所有键的Set集合,KeySet();
		Set<String> keySet=map.keySet();
		//有了Set集合就可以获取其迭代器 
		Iterator<String> it=keySet.iterator();
		while(it.hasNext()){
			String key=it.next();
			String value=map.get(key);
			System.out.println("Key:"+key+",value:"+value);
		}
		System.out.println("==========================");
		
		//2.entrySet 将map集合中的隐射关系取出,存入到Set集合这个
		Set<Map.Entry<String, String>>  entrySet=map.entrySet();
		Iterator<Map.Entry<String, String>> it1=entrySet.iterator();
		while(it1.hasNext()){
			Map.Entry<String, String> me=it1.next();
			System.out.println("Key:"+me.getKey()+",value:"+me.getValue());
		}
		
	}

}

Map练习
/** Map练习
 *  每一个学生都有对应的归属地
 *  学生Student,地址 String
 *  学生属性 姓名 年龄
 *  注意:姓名和年龄相同视为同一个学习
 *  保证学生的唯一性.
 *  
 *  1.描述学习
 *  2.定义Map容器,将学生作为键,地址作为值,存入
 *  3.获取Map集合中的元素.
 *
 */
class Student implements Comparable<Student>{
	private String name;
	private int age;
	Student(String name,int age){
		this.name=name;
		this.age=age;
	}
	public String getName() {
		return name;
	}
	public int getAge() {
		return age;
	}
	@Override
	public String toString() {
		return name+":"+age;
	}
	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		return name.hashCode()+age*2;
	}
	@Override
	public boolean equals(Object obj) {
		if(!(obj instanceof Student))
			throw new ClassCastException("类型不匹配");
		Student s=(Student)obj;
		return this.name.equals(s.name) && this.age==s.age;
	}
	@Override
	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;
	}
	
}
class StuNameComparator implements Comparator<Student>{

	@Override
	public int compare(Student o1, Student o2) {
		int num=o1.getName().compareTo(o2.getName());
		if(num==0)
			return new Integer(o1.getAge()).compareTo(o2.getAge());
		return num;
	}
}

public class MapDemo3 {
	public static void main(String[] args) {
		method();
		System.out.println("====================");
		method1();
		
	}
	
	//需求变了 需要保存进去的学生信息按 年龄排序
	public static void method1(){
		TreeMap<Student,String> tm=new TreeMap<Student,String>(new StuNameComparator());
		
		tm.put(new Student("lisi01",21), "北京");
		tm.put(new Student("lisi01",21), "天津");
		tm.put(new Student("alisi02",22), "上海");
		tm.put(new Student("elisi03",23), "武汉");
		tm.put(new Student("clisi04",24), "南京");
		
		Set<Map.Entry<Student, String>> entrySet=tm.entrySet();
		Iterator<Map.Entry<Student, String>> it1=entrySet.iterator();
		while(it1.hasNext()){
			Map.Entry<Student, String> me=it1.next();
			System.out.println(me.getKey()+"......"+me.getValue());
		}
		
	}
	
	public static void method(){

		HashMap<Student,String> hm=new HashMap<Student,String>();
		
		hm.put(new Student("lisi01",21), "北京");
		hm.put(new Student("lisi01",21), "天津");
		hm.put(new Student("lisi02",22), "上海");
		hm.put(new Student("lisi03",23), "武汉");
		hm.put(new Student("lisi04",24), "南京");
		
		//第一种取出方式 keySet
		Set<Student> keySet=hm.keySet();
		
		Iterator<Student> it=keySet.iterator();
		while(it.hasNext()){
			Student stu=it.next();
			String addr=hm.get(stu);
			System.out.println(stu+"......"+addr);
		}
		
		System.out.println("========================");
		//第二种取出方式 
		Set<Map.Entry<Student, String>> entrySet=hm.entrySet();
		Iterator<Map.Entry<Student, String>> it1=entrySet.iterator();
		while(it1.hasNext()){
			Map.Entry<Student, String> me=it1.next();
			System.out.println(me.getKey()+"......"+me.getValue());
		}
	}
	
	

}
0
1
分享到:
评论

相关推荐

    java 15天教程下载,可供java初学者学习使用

    15 第15天Map集合.docx 16 第16天IO流.docx 17 第17天字节流.docx 18 线程.docx 19 网络编程.docx 2 拓薪教育-java基础语法.docx 3 J2SE程序的流程控制.docx 5 第5天面向对象.docx 6 static静态关键字和单例模式....

    java基础18天Typora笔记

    这是一份专为Java初学者准备的学习资源,由魔乐科技提供,旨在帮助用户在18天内建立起坚实的Java编程基础。Typora是一款简洁而高效的Markdown编辑器,使得笔记整理和阅读更加便捷。通过这份笔记,学习者将逐步了解并...

    Java 21天学通java

    7. **集合框架**:Java集合框架包括接口(如List、Set、Map)和实现类(如ArrayList、LinkedList、HashSet、HashMap等),是存储和管理对象的重要工具。 8. **输入/输出流**:Java的I/O流用于处理数据的输入和输出...

    java毕向东源代码16-25天

    这期间,学员将通过每一天的学习和编码实践,掌握从第16天到第25天的Java高级特性,如并发编程、集合框架的深入使用、IO流、网络编程、异常处理、设计模式等关键知识点。 【标签】"java-毕向东" 显示了课程的专业...

    21天学通Java.第7版-中文版-良心积分价

    《21天学通Java》是为初学者设计的一本教程,旨在帮助读者在短时间内掌握Java编程基础。这本书的第7版更新了最新的Java技术,包括Java 8及更高版本的关键特性,使得学习内容与时俱进,更适合当前的开发环境。通过21...

    21天学java源代码

    8. **集合框架**:Java集合框架包括List、Set、Queue和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类,它们提供了数据组织和操作的多种方式。 9. **多线程**:Java内置了对多线程的支持,学习者...

    达内java课程-java核心编程10天

    ### 达内Java课程——Java核心编程10天知识点详解 #### 散列表Map - **概念**: 散列表是一种非常高效的数据结构,它通过特定的哈希函数将键值映射到表的一个位置来访问记录,这使得查找操作能在平均时间复杂度为O(1...

    18天java学习之经典笔记

    "18天Java学习之经典笔记"是一份专为快速掌握Java基础知识而设计的学习资料,适用于那些希望在短时间内复习、备考或者准备面试的人员。这份笔记涵盖了Java的核心概念,通过18天的学习计划,帮助读者逐步理解并熟练...

    21天学java培训笔记和代码

    Java支持多线程编程,第15天至第16天的学习内容可能涵盖线程的创建、同步机制(如synchronized关键字、wait()、notify()等)、线程池的使用,这些都是并发编程的关键。 七、反射与注解 第17天可能涉及Java的反射...

    21 天 学通 Java

    《21天学通Java》是一本专门为初学者设计的Java编程教材,旨在帮助读者在21天的学习周期内快速掌握Java编程基础。这不仅涵盖了Java语言的核心概念,还注重实践,让学习者通过实际操作加深理解。在这个过程中,读者将...

    Java成神之路,Java基础

    12. **集合框架**:Java集合框架包括List、Set、Queue和Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。理解它们的特性和使用场景。 13. **输入/输出流**:学习如何使用InputStream、...

    Java电子教案(21天学通JAVA)

    10. **集合框架**:Java集合框架包括List、Set和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。理解它们的区别和应用场景,以及泛型的使用。 11. **多线程**:Java提供了Thread类和Runnable接口...

    2014年Java最全面试题以及答案.

    在Java集合框架中,如果要对对象进行排序,需要实现Comparable接口或者在构造时提供一个Comparator比较器。 14. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要正确处理汉字...

    java(18天)笔记,txt文件

    10. **Day17 - 集合框架**: 了解Java集合框架,包括List, Set, Queue接口及其实现类,如ArrayList, LinkedList, HashSet, TreeSet, Stack等,以及Map接口和HashMap, TreeMap等。 11. **Day18 - 多线程**: 掌握Java...

    21天学通Java-由浅入深

    第一篇 基础篇 第1章 Java简介(精彩视频:33分钟) 21 1.1 Java的平台简介 21 1.2 安装工具包 22 1.2.1 下载JDK 22 1.2.2 安装JDK 24 1.2.3 查看与设置环境变量 25 1.2.4 JDK常用命令 27 1.2.5 Java各个目录含义 28...

    Java 2编程21天自学通(2)

    15. **Java集合框架**:深入学习List、Set、Map接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等,以及它们的适用场景。 16. **Java IO/NIO**:了解传统的IO模型和非阻塞IO模型(NIO),以及Java 7...

    Java后端面试题

    28. **获取当月最后一天**:使用`Calendar`或`LocalDate`类。 29. **格式化日期**:使用`SimpleDateFormat`或`DateTimeFormatter`类。 30. **编码转换**:使用`new String(byteArray, charsetName)`方法。 31. **...

Global site tag (gtag.js) - Google Analytics