`

Java学习系列(八)Java面向对象之集合框架详解(下)

 
阅读更多

今天接着上次的来讲,主要谈谈Map。下面先看一张图:

Map里面存的东西是:每个数据项都是key-value对组成。假如我们把value当成是key的“附属物”,Map存储key-value对时,只要考虑key的存储即可,key存储之后,value跟着key即可。再进一步:如果只管Map里面的key,并把所有的key收集起来 ----- 就变成了Set。所以Map与Set是一一对应的。通过查看源码我们可以发现,HashSet底层是由HashMap实现的。HashMap会根据key的hashCode()方法的返回值来计算key的存、取位置。

HashMap怎样才算两个key重复?
a)通过equals方法比较返回tue;
b)两个key的hashCode()返回值相等。
要求自定义类的hashCode()和equals()方法是一致的(即方法中所用到的关键属性要一致)。

TreeMap要求key必须是可比较大小的。
a)自然排序:要求所有的key实现Comparable接口;
b)定制排序:要求创建TreeMap时提供一个Comparator接口。

TreeMap怎样才算两个key重复?
a)通过compareTo()比较大小时返回0,就表明两个元素相等。

Hashtable与HashMap的区别:
a.Hashtable从JDK1.0就有的,尽量少用。
b.Hashtable不允许使用null作为key、value,但HashMap允许。
c.Hashtable是线程安全的。--线程不安全的性能好。

举例说明1(HashMap的使用):

 

class Apple {
	private String color;
	private double weight;

	public Apple(String color, double weight) {
		this.color = color;
		this.weight = weight;
	}

	@Override
	public String toString() {
		return "Apple[" + color + "," + weight + "]";
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj != null && obj.getClass() == Apple.class) {
			Apple apple = (Apple) obj;
			return this.weight == apple.weight
					&& this.color.equals(apple.color);
		}
		return false;
	}

	@Override
	public int hashCode() {
		return color.hashCode() + 13 * (int) weight;
	}
}

public class Test {

	public static void main(String[] args) {
		HashMap<Apple, Double> apples = new HashMap<Apple, Double>();
		apples.put(new Apple("红色", 3.5), 3.4);
		apples.put(new Apple("红色", 4.5), 3.4);
		apples.put(new Apple("黄色", 3.5), 3.4);
		apples.put(new Apple("红色", 3.5), 6.8);//覆盖掉了第一个key
		System.out.println(apples);
	}
}


举例说明2(TreeMap的使用):

 

 

public class Test {

	public static void main(String[] args) {
		TreeMap<String, Double> score = new TreeMap<String, Double>(
				new Comparator<String>() {
					@Override
					public int compare(String o1, String o2) {
						return o1.length() > o2.length() ? 1 : o1.length() < o2
								.length() ? -1 : 0;
					}
				});
		score.put("abd", 89.0);
		score.put("aaaa", 78.0);
		score.put("aa", 90.0);
		score.put("ds", 78.0);
		System.out.println(score.size());
		System.out.println(score);
	}
}


结束语

 

通过上一篇的学习,我们可以发现其实Set和Map用法几乎是一样的,把Map看成是Collection子接口Set的一个分支即可。

今天就讲到这里,明天开始学习Java的异常处理进制。

 

分享到:
评论

相关推荐

    Java基础知识点总结.docx

    八、 多态(面向对象特征之一)★★★★ 30 九、 java.lang.Object 31 十、 异常★★★★ 34 十一、 包(package) 37 十二、 多线程★★★★ 39 为什么要使用多线程 39 创建线程和启动 39 线程的生命周期 44 线程...

    免费超全面的Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结

    Java基础类型,容器,并发,IO流,面向对象,Web编程等代码总结。 2、分类文档 JVM虚拟机 JVM特点,结构与执行周期 JVM类加载机制 JVM运行时区数据 JVM执行引擎和垃圾回收 基础语法 理解Java中对象基础Object类 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    java基础案例与开发详解案例源码全

    11.1 Java集合框架概述264 11.2 Collection接口264 11.2 Set接口实现类266 11.2.1 实现类HashSet267 11.2.2 实现类LinkHashSet270 11.2.3 实现类TreeSet272 11.3 List接口实现类277 11.3.1 实现类ArrayList277 ...

    Java 基础核心总结 +经典算法大全.rar

    continue 语句面向对象 类也是-种对象对象的创建 属性和方法 构造方法 方法重载 方法的重写 初始化 类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...

    46道java基础知识面试题详解含答案(值得珍藏)

    例如,对于面向对象编程的概念、异常处理机制、集合框架的使用等方面的知识,如果求职者能够清晰地解释并给出相应的示例代码,就能够让面试官了解到其扎实的技术基础和良好的编程习惯。 其次,熟练掌握Java基础知识...

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    本书为中南大学精品教材立项项目,分为上下两篇共21章,涵盖了面向对象技术中Java开发环境配置、程序设计基础、面向对象原理以及UML的知识。本书使用的开发环境是JDK 1.6+Eclipse 3.3+Rational Rose 2003,逐步引领...

    Java基础最全笔记文档

    7. 面向对象基础 8. 常用API 9. 综合项目实战 Java加强篇包括: 1. static、单例设计、继承 2. 权限修饰符、常量、枚举、抽象类 3. 多态、内部类、常用API 4. 日期与时间、日期类、包装类、正则表达式、Arrays 类、...

    Java基础详解(入门级)

    第三章:面向对象程序开収 31-74 第四章:异常机制 74-89 第五章:多线程技术 89-122 第六章:常用类 API 122-139 第七章:集合框架(容器)+其他类对象使用 139-199 第八章:IO 流 199-280 第九章:GUI 编程 ...

    Week02学习源码(配合博文笔记使用)

    面向对象,继承多态,接口....api文档使用,集合 1.static关键字、继承 2.封装以及抽象类 3.内部类(了解) 4.常用类库 5.常用类库(Date Calender SimpleDateFormat) 6.集合框架 7.自写工具类:Date &lt;-&gt; ...

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    Java开发技术大全 电子版

    第2篇Java面向对象编程 第3章对象和类98 3.1面向对象的基本概念98 3.1.1对象98 3.1.2类99 3.1.3消息101 3.1.4面向对象的4个基本特征101 3.2类与对象104 3.2.1类的基本结构104 3.2.2类的声明104 3.2.3创建...

    asp.net知识库

    与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象结合的自定义数据对象设计 (一) 数据对象与DataRow ASP.NET中大结果集的分页[翻译] .net 2.0 访问Oracle --与Sql Server的...

    低清版 大型门户网站是这样炼成的.pdf

    1.4 ssh 2组合框架—门户网站开发之首选 28 1.4.1 mvc混血宠儿struts 2 28 1.4.2 幕后的财政部长spring 2.5 30 1.4.3 orm中间件香馍馍hibernate 3.2 31 1.5 小结 32 第2章 mvc混血宠儿struts 2 33 2.1 初识mvc...

    《电动力学(第二版)》(郭硕鸿) 习题答案doc

    Visual C++面向对象与可视化程序设计.ppt 本周上传用户排名 108个mirage1982 100个wkkys 87个gouyue 86个samsho2 61个ynsky 55个zhong_jianyu 49个lei_zhimin 45个lukarl592 43个fosoyo 39个MobilityFans 28个...

    Scala程序设计(第2版)

    8.8 调用父类构造器(与良好的面向对象设计) 226 8.9 嵌套类型 230 8.10 本章回顾与下一章提要 232 第9章 特征 233 9.1 Java 8中的接口 233 9.2 混入trait 234 9.3 可堆叠的特征 238 9.4 ...

    深入浅出ES6 简体中文

    整个系列的翻译历时150余天,坚持专栏翻译的日子艰苦也快乐,编辑徐川细心地帮我审校每一篇文章,编辑丁晓昀赠予钱歌川先生详解翻译之著作让我大开眼界,与李松峰老师的交流也让我深刻理解了“阅读、转换、表达”的...

Global site tag (gtag.js) - Google Analytics