Java集合——集合框架Map接口
1.Map接口
public interface Map<K,V>
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

2.HashMap、Hashtable、TreeMap
public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
public class MapDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
hashMap();
}
/**
* 是二叉树数据结构的实现(红黑树--平衡二叉树)
*/
public static void treeMap(){
TreeMap<String,String> map=new TreeMap<String,String>();
map.put("1", "hah");
}
/**
* 线程安全,同步的,效率低,与HashMap相似,初始容量为11,每次扩充2倍+1
*/
public static void hashtable(){
Hashtable<String, String> table=new Hashtable<String,String>();
}
/**
* 使用哈希表(数组+链表)实现,键不能重复,如果相同就会覆盖原来的对象
* 默认创建一个长度为16的数组,加载因子为0.75(当数组满75%的容量后,表示需要重新扩充,又叫哈希表重新散列)
* 哈希表保存对象时,会根据key对象的hashcode值对HashMap的容量求余,决定该对象要存在数组的哪个位置,
* 如果该位置有对象那么这些对象以链表的结构存储
* 线程不安全,效率高
* 每次扩充2倍
*/
public static void hashMap(){
Map<String,String> map=new HashMap<String,String>();
map.put("1","小明");
System.out.println("1".hashCode()%16);
map.put("2","小花");
System.out.println("2".hashCode()%16);
map.put("3","小刚");
System.out.println("3".hashCode()%16);
System.out.println("----------");
System.out.println(map.size());
//取值
System.out.println(map.get("1"));
System.out.println(map.get("2"));
System.out.println(map.containsKey(1));
}
}
3.Map集合的输出
在Collection接口中,可以使用iterator()方法为Iterator接口实例化,并且进行输出操作,但是在Map接口中并没有此方法的定义,所以Map接口本身是不能直接使用iterator进行输出的。
hashcode深入分析:两个hashcode值不同,则两个对象一定不同;两个对象不同,hashcode值可能相同;程序员要做的是任何情况下输出同一个对象的hashcode值都应该相同

public class MapIterator {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
iterator();
stack();
queue();
}
public static void iterator(){
HashMap<String,Student> map=new HashMap<String,Student>();
map.put("jack", new Student("jack",2));
map.put("tom", new Student("tom",3));
map.put("honey", new Student("honey",4));
//遍历
Set<String> keys=map.keySet();
Iterator<String> i=keys.iterator();
while(i.hasNext()){
String key=i.next();
Student s=map.get(key);
System.out.println(key+"-->"+s);
}
}
/**
* 堆栈
*/
public static void stack(){
Stack<String> s=new Stack<String>();
s.push("xiaoming");//压栈,入栈
s.push("xiaohua");
String str=s.pop();//出栈
System.out.println(str);
}
/**
* 队列
*/
public static void queue(){
Queue<String> q=new LinkedList<String>();
q.add("xiaogang");
q.add("xiaobin");
//移除队列的头
String str=q.poll();
System.out.println(str);
}
}
4.对象一对多关系可以使用HashSet实现
public class Person {
private String name;
private Set<Book> books=new HashSet<Book>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Book> getBooks() {
return books;
}
public void setBooks(Set<Book> books) {
this.books = books;
}
}
public class Book {
private String name;
private Person person;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person getPerson() {
return person;
}
public void setPerson(Person person) {
this.person = person;
}
}
Java集合——集合框架Map接口的更多相关文章
- Java集合框架Map接口
集合框架Map接口 Map接口: 键值对存储一组对象 key不能重复(唯一),value可以重复 常用具体实现类:HashMap.LinkedHashMap.TreeMap.Hashtable Has ...
- Java中的集合(十三) 实现Map接口的Hashtable
Java中的集合(十三) 实现Map接口的Hashtable 一.Hashtable简介 和HashMap一样,Hashtable采用“拉链法”实现一个哈希表,它存储的内容是键值对(key-value ...
- Java中的集合(十一) 实现Map接口的TreeMap
Java中的集合(十一) 实现Map接口的TreeMap 一.TreeMap简介(基于JDK1.8) TreeMap是基于红黑树数据结构,是一个key-value的有序集合,该映射根据其键的自然顺序进 ...
- Java集合框架——Map接口
第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...
- JAVA集合框架 - Map接口
Map 接口大致说明(jdk11): 整体介绍: 一个将键映射到值的(key-value)对象, 键值(key)不能重复, 每个键值只能影射一个对象(一一对应). 这个接口取代了Dictionary类 ...
- Java集合中的Map接口怎么使用?
Map(双列集合框架) 1.Map接口及实现类概述 Map 接口提供三种collection 视图,允许以键集.值集或键-值映射关系集的形式查看某个映射的内容.映射顺序 定义为迭代器在映射的 coll ...
- Java集合中的Map接口
jdk1.8.0_144 Map是Java三种集合中的一种位于java.util包中,Map作为一个接口存在定义了这种数据结构的一些基础操作,它的最终实现类有很多:HashMap.TreeMap.So ...
- Java类集框架——List接口
学习目标 掌握List接口与Collection接口的关系. 掌握List接口的常用子类:ArrayList.Vector. 掌握ArrayList与Vector类的区别. Collection ...
- Java的集合类之 map 接口用法
Map接口不是Collection接口的继承.而是从自己的用于维护键-值关联的接口层次结构入手.按定义,该接口描述了从不重复的键到值的映射. 我们可以把这个接口方法分成三组操作:改变.查询和提供可选视 ...
随机推荐
- jquery给select赋值
项目中用到通过ajax请求数据然后给select赋值,由于经常遇到类似的代码,在这里把整个过程记录一下. 首选发出ajax请求如下: <script type="text/javasc ...
- Linux编程里getopt_long_only函数用法详解
在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子.下面介绍使用getopt_long_only和getopt_long(两者用法差不多)解析命令行选项. 程序中主 ...
- BIOS MCSDK 2.0 User Guide - Acronyms and Definitions
BIOS MCSDK 2.0 User Guide - Texas Instruments Wiki Acronyms and Definitions The following acronyms a ...
- VMware里Ubuntu-16.04-desktop的VMware Tools安装图文详解
不多说,直接上干货! 总的来说,根据分为三个步骤. 步骤一: 点击 :虚拟机—–>安装VM tools 然后发现桌面会跳出如下问题: 客户机操作系统已将 CD-ROM 门锁定,并且可能正在使用 ...
- SAP 销售订单中采购标识无法修改
VA03中的销售订单第四个物料没有ZA选项, 错误提示:计划行类别ZA未定义 原因: MM03中的 MRP2---采购类型未被定义
- java数据结构读书笔记--引论
1 递归简论 需求:求出f(x)=2f(x-1)+x²的值.满足f(0)=0 public class Recursion { // 需求: 求出f(x)=2f(x-1)+x²的值.满足f(0)=0 ...
- 树莓派 Learning 002 装机后必要的操作 --- 10 实现本地电脑与远程桌面之间复制粘贴(传输)文件
树莓派 装机后必要的操作 - 实现本地电脑与远程桌面之间复制粘贴(传输)文件 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 PC端系统:w ...
- eclipse 远程操作HIVE
首先启动HiveServer hive --service hiveserver 10000 & 创建工程 引入包: 代码(简单的查询): package com.hive.jdbc; imp ...
- 31、NGS 常用分析软件
转载:http://www.zilhua.com/2081.html 参考资料:http://bioinfo.mc.vanderbilt.edu/NGS/software.htm 1. Mapping ...
- tensorflow第一个例子
import tensorflow as tf import numpy as np # create data x_data = np.random.rand(100).astype(np.floa ...