java 集合(Map3)
Map接口下的实现类:
HashMap
1.存储原理:
向HashMap中添加元素时,首先会调用hashCode(),算的哈希值,然后
算出该元素在哈希表中的存储位置。
情况1
情况2(java 集合(Map2)写过了)
2.有必要时要重写 hashCode(), equals()
import java.util.*;
public class ex12 {
public static void main(String[] args) {
HashMap map = new HashMap();
map.put(new Person(110, "Tom"), 001);
map.put(new Person(220, "Jack"), 002);
map.put(new Person(330, "TNT"), 003);
map.put(new Person(110, "Bat"), 004);// 如果出现了相同的键,那么后添加的会取代原来的,可以观察运行结果 Tom 没有被输出
System.out.println(map);
}
}
class Person{
int id;
String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "[ id = " + this.id + ", name = " + this.name + " ]";
}
@Override
public int hashCode() {
return this.id = id;
}
@Override
public boolean equals(Object obj) {
Person p = (Person)obj;
return this.id == p.id;
}
}
{[ id = 330, name = TNT ]=3, [ id = 220, name = Jack ]=2, [ id = 110, name = Tom ]=4}
Process finished with exit code 0
TreeMap(注意下面代码中的泛型使用)
存储原理:基于红黑树的(二叉数)对键进行自然排序。
注意事项:1)向TreeMap添加元素时,如果元素的键具有自然顺序时,会按照自然顺序排序。
2)-----------------------,-----------------不具有自然顺序,要实现Compareable接口。
3)-----------------------,--------------------------------,没有实现-----------------,必须在创建TreeMap时,传入比较器。
import java.util.*;
public class ex12 {
public static void main(String[] args) {
TreeMap<Emp, Integer> map1 = new TreeMap<Emp, Integer>();
map1.put(new Emp("Tom", 200), 100);
map1.put(new Emp("Tom", 20), 200);
map1.put(new Emp("Tom", 190), 300);
map1.put(new Emp("Tom", 200), 400);
System.out.println(map1);
}
}
class Emp implements Comparable<Emp>{
String name;
int salary;
public Emp(String name, int salary) {
this.name = name;
this.salary = salary;
}
@Override
public int compareTo(Emp o) {
return this.salary - o.salary;
}
@Override
public String toString() {
return "[ name = " + this.name + ", salary = " + this.salary + " ]";
}
}
{[ name = Tom, salary = 20 ]=200, [ name = Tom, salary = 190 ]=300, [ name = Tom, salary = 200 ]=400}
Process finished with exit code 0
java 集合(Map3)的更多相关文章
- 032.[转] Java集合框架
Java集合框架和各实现类性能测试 pphh发布于2017年11月17日 Java语言集合框架提供一系列集合接口类 (collection interface)和实现类,满足对集合中元素对象的各种集合 ...
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...
- Scala集合和Java集合对应转换关系
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 用Scala编码的时候,经常会遇到scala集合和Java集合互相转换的case,特意mark一 ...
- java集合你了解多少?
用了java集合这么久,还没有系统的研究过java的集合结构,今天亲自画了下类图,总算有所收获. 一.所有集合都实现了Iterable接口. Iterable接口中包含一个抽象方法:Iterator& ...
- 深入java集合学习1-集合框架浅析
前言 集合是一种数据结构,在编程中是非常重要的.好的程序就是好的数据结构+好的算法.java中为我们实现了曾经在大学学过的数据结构与算法中提到的一些数据结构.如顺序表,链表,栈和堆等.Java 集合框 ...
- Java集合框架List,Map,Set等全面介绍
Java集合框架的基本接口/类层次结构: java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +- ...
- Java集合框架练习-计算表达式的值
最近在看<算法>这本书,正好看到一个计算表达式的问题,于是就打算写一下,也正好熟悉一下Java集合框架的使用,大致测试了一下,没啥问题. import java.util.*; /* * ...
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- Java 集合框架
Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...
随机推荐
- Ecplise软件Devices看到两个相同设备问题
Ecplise软件Devices看到两个相同设备问题 在使用过程中,连接一台设备,在Ecplise软件的Devices界面下突然看到2个设备,如下图: 图1 解决方案:先 kill-server, 再 ...
- 【leetcode❤python】 257. Binary Tree Paths
深度优先搜索 # Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# se ...
- tesseract-ocr了解
安装文件下载地址 http://tesseract-ocr.googlecode.com/files/tesseract-ocr-setup-3.01-1.exe README For the lat ...
- servlet&jsp高级:第二部分
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- [JAVA设计模式]第三部分:结构模式
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- [资源] Resources on Self-Driving Car
Talk NVIDIA at CES 2016 - Self Driving Cars and Deep Learning GPUs Projects Autoware Open-source sof ...
- 没有Path的Binding
当Binding源本身就是数据且不需要Path来指明时,可以设置Path的值为".",或直接省略Path.XAML中这个"."可以省略不写,但在C#代码中是不能 ...
- 读jQuery源码有感3
这次的主题是,具体的库和抽象的思路. 当看到Deferred这个区块时,觉得jQuery代码设计挺复杂,得用许多脑力才能看明白. 可是把这个峰回路转十八回的代码看懂又如何,是为了使用过程中出现bug后 ...
- jQuery里面的普通绑定事件和on委托事件
以click事件为例: 普通绑定事件:$('.btn1').click(function(){}绑定 on绑定事件:$(document).on('click','.btn2',function(){ ...
- Servlet学习
编写Servlet应该注意的一些细节: 1: 由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web ...