Map
Servlet
request. getParameter ( key) ; == > value
解决 List 根据 id 找对象,效率低,不方便
public Book findBook ( int id) {
for ( int i= 0 ; i< books. size ( ) ; i++ ) {
if ( b. getId ( ) == id) {
return b;
}
}
return null;
}
线程安全 和 非线程安全 的 HashMap
HashMap 实现原理
Map是一个接口(干爹)
他其中之一的实现类,HashMap
Map< Integer, Book> map = new HashMap < > ( ) ;
(主键)(值)
Map 最大特性根据 主键 找 对应值,只要一次就可以找到结果,悲观的话log^ n (100 次只要10 次)
Map是现在大数据的基础,缓存的基础
非关系型数据库的基础
Map最大挑战性就是如何 设计 主键
如何设计唯一的主键
避开循环去找某个对象
尽量避免从头到尾,除非数据在 1w 以内。
Map的使用有3个
1. put ( 主键,值)
如果主键相同,后面的覆盖前面的
Map< String, String> map = new HashMap < > ( ) ;
map. put ( "李世民" , "长孙皇后" ) ;
map. put ( "李世民" , "武则天" ) ;
map. put ( "朱元璋" , "马皇后" ) ;
map. put ( "刘彻" , "阿娇皇后" ) ;
System. out. println ( map) ;
2. get ( 主键)
如果主键不存在,返回null,利用这个特性来判断这个主键是否存在
System. out. println ( map. get ( "李世民" ) ) ;
System. out. println ( map. get ( "朱元璋" ) ) ;
System. out. println ( map. get ( "刘彻" ) ) ;
3. 遍历,因为有时候找的东西不在主键,只好去遍历
遍历用 forEach
for ( String m: map. keySet ( ) ) {
System. out. println ( m+ "==" + map. get ( m) ) ;
}
已知主键,就不要用遍历
4. 删除
remove ( "主键" ) ;
List Map的区别
练习
如何把书的对象放到HashMap
Map< Integer, Book> books = new HashMap < > ( ) ;
Book b = new Book ( 203 , "java对象" , 88.88 ) ;
books. put ( 203 , b) ;
b = new Book ( 204 , "java基础" , 109.99 ) ;
books. put ( 204 , b) ;
b = new Book ( 205 , "MySQL基础" , 89.99 ) ;
books. put ( 205 , b) ;
修改HashMap
System. out. println ( "修改" ) ;
books. get ( 204 ) . setPrice ( 844 ) ;
System. out. println ( books. get ( 204 ) ) ;
编程简单化
if ( ) {
} else if ( ) {
} else if ( ) {
}
if ( ) {
} else if ( ) {
}
if ( ) {
}
for ( ; ; ) {
}
forEach. . .