大阳台怎么2018最流行的装修风格,大阳台设计,土拨鼠2018最流行的装修风格百科

6495人阅读
java(12)
&&&&&&&&&&构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
(int&initialCapacity)
&&&&&&&&&&构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。
(int&initialCapacity, float&loadFactor)
&&&&&&&&&&构造一个带指定初始容量和加载因子的空 HashMap。
(&? extends
,? extends &&m)
&&&&&&&&&&构造一个映射关系与指定 Map 相同的 HashMap。
&&&&&&&&&&从此映射中移除所有映射关系。
&&&&&&&&&&返回此 HashMap 实例的浅表复制:并不克隆键和值本身。
&&&&&&&&&&如果此映射包含对于指定的键的映射关系,则返回 true。
&&&&&&&&&&如果此映射将一个或多个键映射到指定值,则返回 true。
&&&&&&&&&&返回此映射所包含的映射关系的 collection 视图。
&&&&&&&&&&返回指定键在此标识哈希映射中所映射的值,如果对于此键来说,映射不包含任何映射关系,则返回 null。
&&&&&&&&&&如果此映射不包含键-值映射关系,则返回 true。
&&&&&&&&&&返回此映射中所包含的键的 set 视图。
&&&&&&&&&&在此映射中关联指定值与指定键。
(&? extends
,? extends &&m)
&&&&&&&&&&将指定映射的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射的所有键的所有映射关系。
&&&&&&&&&&如果此映射中存在该键的映射关系,则将其删除。
&&&&&&&&&&返回此映射中的键-值映射关系数。
&&&&&&&&&&返回此映射所包含的值的 collection 视图。
重点介绍HashMap。首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。在下文中会有例子具体说明。
再来看看HashMap和TreeMap有什么区别。HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
import java.util.M&&&
import java.util.HashM&&&
import java.util.S&&&
import java.util.HashS&&&
import java.util.I&&&
import java.util.H&&&
import java.util.TreeM&&&
class& HashMaps&&&
public static void main(String[] args)&&&&
Map map=new HashMap();&&&&&&&&&&&&&&&
map.put(&a&, &aaa&);&&&
map.put(&b&, &bbb&);&&&
map.put(&c&, &ccc&);&&&
map.put(&d&, &ddd&);&&&
Iterator iterator = map.keySet().iterator();&&&&&&&&&&&&&&&
while (iterator.hasNext()) {&&&
Object key = iterator.next();&&&
System.out.println(&map.get(key) is :&+map.get(key));&&&
}&&&&&&&&&&
Hashtable tab=new Hashtable();&&&&&&&&&&&&&&&
tab.put(&a&, &aaa&);&&&
tab.put(&b&, &bbb&);&&&
tab.put(&c&, &ccc&);&&&
tab.put(&d&, &ddd&);&&&
Iterator iterator_1 = tab.keySet().iterator();&&&
while (iterator_1.hasNext()) {&&&
Object key = iterator_1.next();&&&
System.out.println(&tab.get(key) is :&+tab.get(key));&&&
}&&&&&&&&&&&&
TreeMap tmp=new TreeMap();&&&&&&&&&&&&&&&
tmp.put(&a&, &aaa&);&&&
tmp.put(&b&, &bbb&);&&&
tmp.put(&c&, &ccc&);&&&
tmp.put(&d&, &ddd&);&&&
Iterator iterator_2 = tmp.keySet().iterator();&&&
while (iterator_2.hasNext()) {&&&
Object key = iterator_2.next();&&&
System.out.println(&tmp.get(key) is :&+tmp.get(key));&&&
}&&&&&&&&&&&&
执行完后,果然是这样的(hashmap是没有顺序的,而treemap则是按顺序排列的哦!!)
下面就要进入本文的主题了。先举个例子说明一下怎样使用HashMap:
import java.util.*;&&&&
public class Exp1 {&&&
public static void main(String[] args){&&&
HashMap h1=new HashMap();&&&
Random r1=new Random();&&&&&&&
for(int i=0;i&1000;i++){&&&
Integer t=new Integer(r1.nextInt(20));&&&
if(h1.containsKey(t))&&&
((Ctime)h1.get(t)).count++;&&&
h1.put(t, new Ctime());&&&
System.out.println(h1);&&&
class Ctime{&&&
int count=1;&&&
public String toString(){&&&
return Integer.toString(count);&&&
在HashMap中通过get()来获取value,通过put()来插入value,ContainsKey()则用来检验对象是否已经存在。可以看出,和ArrayList的操作相比,HashMap除了通过key索引其内容之外,别的方面差异并不大。
前面介绍了,HashMap是基于HashCode的,在所有对象的超类Object中有一个HashCode()方法,但是它和equals方法一样,并不能适用于所有的情况,这样我们就需要重写自己的HashCode()方法。下面就举这样一个例子:
import java.util.*;&&&&
public class Exp2 {&&&
public static void main(String[] args){&&&
HashMap h2=new HashMap();&&&
for(int i=0;i&10;i++)&&&
h2.put(new Element(i), new Figureout());&&&
System.out.println(&h2:&);&&&
System.out.println(&Get the result for Element:&);&&&
Element test=new Element(5);&&&
if(h2.containsKey(test))&&&
System.out.println((Figureout)h2.get(test));&&&
System.out.println(&Not found&);&&&
class Element{&&&
public Element(int n){&&&
number=n;&&&
class Figureout{&&&
Random r=new Random();&&&
boolean possible=r.nextDouble()&0.5;&&&
public String toString(){&&&
if(possible)&&&
return &OK!&;&&&
return &Impossible!&;&&&
在这个例子中,Element用来索引对象Figureout,也即Element为key,Figureout为value。在Figureout中随机生成一个浮点数,如果它比0.5大,打印&OK!&,否则打印&Impossible!&。之后查看Element(5)对应的Figureout结果如何。
结果却发现,无论你运行多少次,得到的结果都是&Not found&。也就是说索引Element(5)并不在HashMap中。这怎么可能呢?
原因得慢慢来说:Element的HashCode方法继承自Object,而Object中的HashCode方法返回的HashCode对应于当前的地址,也就是说对于不同的对象,即使它们的内容完全相同,用HashCode()返回的值也会不同。这样实际上违背了我们的意图。因为我们在使用HashMap时,希望利用相同内容的对象索引得到相同的目标对象,这就需要HashCode()在此时能够返回相同的值。在上面的例子中,我们期望new Element(i) (i=5)与 Element test=new Element(5)是相同的,而实际上这是两个不同的对象,尽管它们的内容相同,但它们在内存中的地址不同。因此很自然的,上面的程序得不到我们设想的结果。下面对Element类更改如下:
class Element{&&&
public Element(int n){&&&
number=n;&&&
public int hashCode(){&&&
public boolean equals(Object o){&&&
return (o instanceof Element) && (number==((Element)o).number);&&&
}&&& 重点介绍HashMap。首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。在下文中会有例子具体说明。
再来看看HashMap和TreeMap有什么区别。HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
import java.util.M&&&
import java.util.HashM&&&
import java.util.S&&&
import java.util.HashS&&&
import java.util.I&&&
import java.util.H&&&
import java.util.TreeM&&&
class& HashMaps&&&
public static void main(String[] args)&&&&
Map map=new HashMap();&&&&&&&&&&&&&&&
map.put(&a&, &aaa&);&&&
map.put(&b&, &bbb&);&&&
map.put(&c&, &ccc&);&&&
map.put(&d&, &ddd&);&&&
Iterator iterator = map.keySet().iterator();&&&&&&&&&&&&&&&
while (iterator.hasNext()) {&&&
Object key = iterator.next();&&&
System.out.println(&map.get(key) is :&+map.get(key));&&&
}&&&&&&&&&&
Hashtable tab=new Hashtable();&&&&&&&&&&&&&&&
tab.put(&a&, &aaa&);&&&
tab.put(&b&, &bbb&);&&&
tab.put(&c&, &ccc&);&&&
tab.put(&d&, &ddd&);&&&
Iterator iterator_1 = tab.keySet().iterator();&&&
while (iterator_1.hasNext()) {&&&
Object key = iterator_1.next();&&&
System.out.println(&tab.get(key) is :&+tab.get(key));&&&
}&&&&&&&&&&&&
TreeMap tmp=new TreeMap();&&&&&&&&&&&&&&&
tmp.put(&a&, &aaa&);&&&
tmp.put(&b&, &bbb&);&&&
tmp.put(&c&, &ccc&);&&&
tmp.put(&d&, &ddd&);&&&
Iterator iterator_2 = tmp.keySet().iterator();&&&
while (iterator_2.hasNext()) {&&&
Object key = iterator_2.next();&&&
System.out.println(&tmp.get(key) is :&+tmp.get(key));&&&
}&&&&&&&&&&&&
执行完后,果然是这样的(hashmap是没有顺序的,而treemap则是按顺序排列的哦!!)
下面就要进入本文的主题了。先举个例子说明一下怎样使用HashMap:
import java.util.*;&&&&
public class Exp1 {&&&
public static void main(String[] args){&&&
HashMap h1=new HashMap();&&&
Random r1=new Random();&&&&&&&
for(int i=0;i&1000;i++){&&&
Integer t=new Integer(r1.nextInt(20));&&&
if(h1.containsKey(t))&&&
((Ctime)h1.get(t)).count++;&&&
h1.put(t, new Ctime());&&&
System.out.println(h1);&&&
class Ctime{&&&
int count=1;&&&
public String toString(){&&&
return Integer.toString(count);&&&
在HashMap中通过get()来获取value,通过put()来插入value,ContainsKey()则用来检验对象是否已经存在。可以看出,和ArrayList的操作相比,HashMap除了通过key索引其内容之外,别的方面差异并不大。
前面介绍了,HashMap是基于HashCode的,在所有对象的超类Object中有一个HashCode()方法,但是它和equals方法一样,并不能适用于所有的情况,这样我们就需要重写自己的HashCode()方法。下面就举这样一个例子:
import java.util.*;&&&&
public class Exp2 {&&&
public static void main(String[] args){&&&
HashMap h2=new HashMap();&&&
for(int i=0;i&10;i++)&&&
h2.put(new Element(i), new Figureout());&&&
System.out.println(&h2:&);&&&
System.out.println(&Get the result for Element:&);&&&
Element test=new Element(5);&&&
if(h2.containsKey(test))&&&
System.out.println((Figureout)h2.get(test));&&&
System.out.println(&Not found&);&&&
class Element{&&&
public Element(int n){&&&
number=n;&&&
class Figureout{&&&
Random r=new Random();&&&
boolean possible=r.nextDouble()&0.5;&&&
public String toString(){&&&
if(possible)&&&
return &OK!&;&&&
return &Impossible!&;&&&
在这个例子中,Element用来索引对象Figureout,也即Element为key,Figureout为value。在Figureout中随机生成一个浮点数,如果它比0.5大,打印&OK!&,否则打印&Impossible!&。之后查看Element(5)对应的Figureout结果如何。
结果却发现,无论你运行多少次,得到的结果都是&Not found&。也就是说索引Element(5)并不在HashMap中。这怎么可能呢?
原因得慢慢来说:Element的HashCode方法继承自Object,而Object中的HashCode方法返回的HashCode对应于当前的地址,也就是说对于不同的对象,即使它们的内容完全相同,用HashCode()返回的值也会不同。这样实际上违背了我们的意图。因为我们在使用HashMap时,希望利用相同内容的对象索引得到相同的目标对象,这就需要HashCode()在此时能够返回相同的值。在上面的例子中,我们期望new Element(i) (i=5)与 Element test=new Element(5)是相同的,而实际上这是两个不同的对象,尽管它们的内容相同,但它们在内存中的地址不同。因此很自然的,上面的程序得不到我们设想的结果。下面对Element类更改如下:
class Element{&&&
public Element(int n){&&&
number=n;&&&
public int hashCode(){&&&
public boolean equals(Object o){&&&
return (o instanceof Element) && (number==((Element)o).number);&&&
在这里Element覆盖了Object中的hashCode()和equals()方法。覆盖hashCode()使其以number的值作为hashcode返回,这样对于相同内容的对象来说它们的hashcode也就相同了。而覆盖equals()是为了在HashMap判断两个key是否相等时使结果有意义(有关重写equals()的内容可以参考我的另一篇文章《重新编写Object类中的方法 》)。修改后的程序运行结果如下:
Get the result for Element:
Impossible!
请记住:如果你想有效的使用HashMap,你就必须重写在其的HashCode()。还有两条重写HashCode()的原则:
不必对每个不同的对象都产生一个唯一的hashcode,只要你的HashCode方法使get()能够得到put()放进去的内容就可以了。即&不为一原则&。 生成hashcode的算法尽量使hashcode的值分散一些,不要很多hashcode都集中在一个范围内,这样有利于提高HashMap的性能。即&分散原则&。
在这里Element覆盖了Object中的hashCode()和equals()方法。覆盖hashCode()使其以number的值作为hashcode返回,这样对于相同内容的对象来说它们的hashcode也就相同了。而覆盖equals()是为了在HashMap判断两个key是否相等时使结果有意义(有关重写equals()的内容可以参考我的另一篇文章《重新编写Object类中的方法 》)。修改后的程序运行结果如下:
Get the result for Element:
Impossible!
请记住:如果你想有效的使用HashMap,你就必须重写在其的HashCode()。还有两条重写HashCode()的原则:
不必对每个不同的对象都产生一个唯一的hashcode,只要你的HashCode方法使get()能够得到put()放进去的内容就可以了。即&不为一原则&。 生成hashcode的算法尽量使hashcode的值分散一些,不要很多hashcode都集中在一个范围内,这样有利于提高HashMap的性能。即&分散原则&。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:810185次
积分:6276
积分:6276
排名:第3628名
原创:30篇
转载:161篇
评论:40条
(4)(1)(1)(1)(5)(2)(2)(1)(5)(2)(2)(8)(10)(4)(5)(4)(18)(9)(13)(14)(19)(33)(5)(1)(5)(7)(1)(2)(1)(2)(2)(5)(2)(2)多次tostring后得到的字符串是一样的么,同一个hashmap_电脑数码_品学百科网
多次tostring后得到的字符串是一样的么,同一个hashmap
&&&来源:用户发布&&&发布时间:&&&查看次数:24
帮帮我了办!多次tostring后得到的字符串是一样的么,同一个hashmap?谢谢哇。
该问题暂无回答。
电脑数码相关
更多相关内容
本站内容来自网友发布,本站无法保证其部分内容的正确性,请用户一定仔细辨别。
[] &&[联系QQ:885&971&98] &
沪ICP备号&}

我要回帖

更多关于 2018最流行的装修风格 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信