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接口的继承.而是从自己的用于维护键-值关联的接口层次结构入手.按定义,该接口描述了从不重复的键到值的映射. 我们可以把这个接口方法分成三组操作:改变.查询和提供可选视 ...
随机推荐
- fastjson 使用笔记
1.string转json String params={'key1':'50001','key2':10007700'}Map<String, String> a = JSON.pars ...
- HDOJ5441(图论中的并查集)
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; ; ; ...
- 问题7:如何实现用户的历史记录功能(最多n条)
实例:制作猜字游戏,添加历史记录功能,显示用户最近猜过的数字 解决方案:使用容量为n的队列存储历史记录 使用标准库colections中的deque,一个双端循环队列 程序退出前,可以使用pickle ...
- Python:生成器表达式
转于:http://www.cnblogs.com/liu-shuai/p/6098218.html 博主:刘-帅 简介: 生成器表达式并不真正的创建数字列表,而是返回一个生成器对象,此对象在每次计算 ...
- web攻击之三:SQL注入攻击的种类和防范手段
观察近来的一些安全事件及其后果,安全专家们已经得到一个结论,这些威胁主要是通过SQL注入造成的.虽然前面有许多文章讨论了SQL注入,但今天所讨论的内容也许可帮助你检查自己的服务器,并采取相应防范措施. ...
- svn、git等比较---总结
免费的版本控制系统: CVS:集中式的版本控制系统,必须联网,速度慢,CVS作为最早的开源而且免费的集中式版本控制系统,直到现在还有不少人在用.由于CVS自身设计的问题,会造成提交文件不完整,版本库莫 ...
- vs2015类中方法前的引用链接不显示的解决方案
在工具→选项,打开如下界面,寻找“文本编辑器→所有语言”中设置显示:<img data-rawheight="761" data-rawwidth="130 ...
- 1.JasperReports学习笔记1-了解JasperReports
转自:http://www.blogjava.net/vjame/archive/2013/10/12/404908.html JasperReports是一个开源的java报表制作引擎,官网地址:h ...
- redis的 key string hash list set sorted set 常用的方法
redis 安装文件: http://blog.csdn.net/tangsilai/article/details/7477961 ============================== ...
- MyBatis 学习总结(1)
MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架,几乎消除了所有的 JDBC 代码和参数的手工设置以及结果集的处理,通过XML(sqlMapConfig)或注解配置数据源和 ...