|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
先说优点,首先和C,C++这些语言比起来,java很简单,去掉指针的java,非常好理解,自动垃圾回收机制也很好,自从JDK1.5推出以后,性能上又有了很大提高。
Map(接口)保持“键-值”对应干系(对),以便经由过程一个键查找响应的值
HashMap*基于一个散列表完成(用它取代Hashtable)。针对“键-值”对的拔出和检索,这类情势具有最不乱的功能。可经由过程构建器对这一功能举行调剂,以便设置散列表的“才能”和“装载因子”
ArrayMap由一个ArrayList后推失掉的Map。对重复的按次供应了准确的把持。面向十分小的Map计划,出格是那些必要常常创立和删除的。关于十分小的Map,创立和重复所支付的价值要比HashMap低很多。但在Map变年夜今后,功能也会响应地年夜幅度下降
TreeMap在一个“红-黑”树的基本上完成。检察键大概“键-值”对时,它们会按流动的按次分列(取决于Comparable或Comparator,稍后即会讲到)。TreeMap最年夜的优点就是我们失掉的是已排好序的了局。TreeMap是含有subMap()办法的独一一种Map,使用它能够前往树的一部分。
Map(interface)
Maintainskey-valueassociations(pairs),soyoucanlookupavalueusingakey.
HashMap*
Implementationbasedonahashtable.(UsethisinsteadofHashtable.)Providesconstant-timeperformanceforinsertingandlocatingpairs.Performancecanbeadjustedviaconstructorsthatallowyoutosetthecapacityandloadfactorofthehashtable.
TreeMap
Implementationbasedonared-blacktree.Whenyouviewthekeysorthepairs,theywillbeinsortedorder(determinedbyComparableorComparator,discussedlater).ThepointofaTreeMapisthatyougettheresultsinsortedorder.TreeMapistheonlyMapwiththesubMap()method,whichallowsyoutoreturnaportionofthetree.
下例包括了两套测试数据和一个fill()办法,使用该办法能够用任何两维数组(由Object组成)添补任何Map。这些工具也会在其他Map例子顶用到。
- //:Map1.java
- //ThingsyoucandowithMaps
- packagec08.newcollections;
- importjava.util.*;
- publicclassMap1{
- publicfinalstaticString[][]testData1={
- {"Happy","Cheerfuldisposition"},
- {"Sleepy","Prefersdark,quietplaces"},
- {"Grumpy","Needstoworkonattitude"},
- {"Doc","Fantasizesaboutadvanceddegree"},
- {"Dopey","Aforeffort"},
- {"Sneezy","Struggleswithallergies"},
- {"Bashful","Needsself-esteemworkshop"},
- };
- publicfinalstaticString[][]testData2={
- {"Belligerent","Disruptiveinfluence"},
- {"Lazy","Motivationalproblems"},
- {"Comatose","Excellentbehavior"}
- };
- publicstaticMapfill(Mapm,Object[][]o){
- for(inti=0;i<o.length;i++)
- m.put(o[i][0],o[i][1]);
- returnm;
- }
- //ProducingaSetofthekeys:
- publicstaticvoidprintKeys(Mapm){
- System.out.print("Size="+m.size()+",");
- System.out.print("Keys:");
- Collection1.print(m.keySet());
- }
- //ProducingaCollectionofthevalues:
- publicstaticvoidprintValues(Mapm){
- System.out.print("Values:");
- Collection1.print(m.values());
- }
- //IteratingthroughMap.Entryobjects(pairs):
- publicstaticvoidprint(Mapm){
- Collectionentries=m.entries();
- Iteratorit=entries.iterator();
- while(it.hasNext()){
- Map.Entrye=(Map.Entry)it.next();
- System.out.println("Key="+e.getKey()+
- ",Value="+e.getValue());
- }
- }
- publicstaticvoidtest(Mapm){
- fill(m,testData1);
- //MaphasSetbehaviorforkeys:
- fill(m,testData1);
- printKeys(m);
- printValues(m);
- print(m);
- Stringkey=testData1[4][0];
- Stringvalue=testData1[4][1];
- System.out.println("m.containsKey(""+key+
- ""):"+m.containsKey(key));
- System.out.println("m.get(""+key+""):"
- +m.get(key));
- System.out.println("m.containsValue(""
- +value+""):"+
- m.containsValue(value));
- Mapm2=fill(newTreeMap(),testData2);
- m.putAll(m2);
- printKeys(m);
- m.remove(testData2[0][0]);
- printKeys(m);
- m.clear();
- System.out.println("m.isEmpty():"
- +m.isEmpty());
- fill(m,testData1);
- //OperationsontheSetchangetheMap:
- m.keySet().removeAll(m.keySet());
- System.out.println("m.isEmpty():"
- +m.isEmpty());
- }
- publicstaticvoidmain(Stringargs[]){
- System.out.println("TestingHashMap");
- test(newHashMap());
- System.out.println("TestingTreeMap");
- test(newTreeMap());
- }
- }///:~
复制代码
printKeys(),printValues()和print()办法其实不只是有效的工具,它们也分明地展现了一个Map的Collection“情形”的发生历程。keySet()办法会发生一个Set,它由Map中的键后推得来。在这儿,它只被看成一个Collection看待。values()也失掉了相似的看待,它的感化是发生一个List,个中包括了Map中的一切值(注重键必需是举世无双的,而值能够有反复)。因为这些Collection是由Map后推失掉的,以是一个Collection中的任何改动城市在响应的Map中反应出来。
print()办法的感化是搜集由entries发生的Iterator(重复器),并用它同时打印出每一个“键-值”对的键和值。程序残剩的部分供应了每种Map操纵的复杂示例,并对每品种型的Map举行了测试。
当创立本人的类,将其作为Map中的一个键利用时,必需注重到和之前的Set不异的成绩。
Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。 |
|