当前位置: 首页 > 后端技术 > Java

Java开发的集合框架Map

时间:2023-04-01 21:57:36 Java

01Map提供了三种集合视图:keysetvaluesetkey-valuemappingsetpublicStringgetWeek(intnum){if(num<0||num>7){thrownewNoWeekException(num+"无对应周");String[]weeks={"","Monday"....."Sunday"};返回周数[num];}}周日(Sunday)、周一(Monday)、周二(Tuesday)、周三(Wednesday)、周四(Thursday)、周五(Friday)、周六(Saturday)java.util接口Map参数:K是此映射V的键是已知此映射的值的,V>已知的实现类:AbstractMap,Attributes,AuthProvider,ConcurrentHashMap,ConcurrentSkipListMap,EnumMap,HashMap,Hashtable,IdentityHashMap,LinkedHashMap,PrinterStateReasons,Properties,Provider,RenderingHints,SimpleBindings,TabularDataSupport,TreeMap,UIDefaults,WeakHashMap实现的接口:公共接口Map映射中不能有重java训练复杂的key,每个key只能映射到一个valueMap集合中的特点:内部存储方式为键值对形式Map中的key必须是唯一的嵌套类(内部):Map方法:putVput(Ekey,Vvalue)与对应的key和value建立映射关系,并添加映射关系。如果之前有这样的映射关系,会指向给定值替换旧值参数:key-指定关联的keyvalue-指定关联的值将抛出的错误:UnsupportedOperationException:不支持Put操作ClassCastException:不允许映射关系NullPointerException:指定的key或value为null,并且此映射不允许存储IllegalArgumentException:指定的键或值不允许存储在映射中。常用的实现类:HashMapjava.util类HashMapjava.lang.Object->java.util.AbstractMap->java.util.HashMap参数:K-是对应键V-为对应值实现接口:Serializable,Cloneable,Map已知子类:LinkedHashMap,PrinterStateReasons所以:publicclassHashMapextendsAbstractMapimplementsMap,Cloneable,Serializable02Map例子:importjava.util.HashMap;publicclassMapDemo{publicstaticvoidmain(String[]args){//创建一个地图Mapmap=newHashMap();//添加元素map.put("Monday","Monday");mpa.put(...//自己添加);map.put("周日","周日");//添加元素时,如果key相同,value会覆盖map.put("Sunday","SundayDemo");//值覆盖//获取值Stringvalue=map.get("Sunday");//如果key存在,则返回value,否则返回null,为空//删除元素Strings=map.remove("Sunday");//删除对应的键值对关系,这样Map集合中就会缺少这对键值对}}如何获取所有键Mapmap=newHashMap();map.put("Monday","Monday");map.put("Sunday","Sunday");使用keySetSetkeySet=map.keySet();for(Iteratorit=keySet.iterator();it.hasNext();){Stringkey=it.next();Stringvalue=map.get(key);System.out.println(key+":"+value);}可以使用foreach循环for(Stringkey:keySet){System.out.println(key+"="+map.get(key));}entrySet>entrySet()是用于返回这个mapping中包含的映射关系Set的视图,map集合中的映射关系存储在set集合中映射关系:指key和value之间的关系,数据类型Map.Entry的类型(内部)关系Set>entrySet=map.entrySet();Iterator>it=entrySet.iterator();while(it.hasNext(K,V)){Map.Entrym=it.next();//获取密钥Stringkey=m.getKey();//获取值Stringvalue=m.getValue();System.out.println(key+":"+value);}Map.Entryjava.utilinterfaceMap.Entry接口实现类:AbstractMap.SimpleEntry,AbstractMap.SimpleImmutableEntry接口:publicstaticinterfaceMap.Entry//是一个mapitem-key-valuepairMap.Entrymethodmethod:for(Map.Entrym:map.entrySet()){字符串键=m.getKey();字符串值=m.getValue();System.out.println(key+":"+value);}interfaceMap{publicstaticinterfaceEntry();}values()返回类型为Collection,返回中包含的values的Collection视图这个mapCollectionvalues=map.values();for(Stringvalue:values){System.out.println("value:"+value);}总结:Map->entrySet()getKey()getValue()->keySet()get(key)->values()03HashmappublicclassHashMapDemo{publicstaticvoidmain(String[]args){Mapmap=newHashMap();//添加元素map.put(newStudent("da",12),"1");map.put(newStudent("shu",13),"2");map.put(newStudent("大树",14),"3");//取出数据//SetkeySet=map.keySet();//for(Studentkey:keySet){}for(Studentkey:map.keySet()){Stringvalue=map.get(key);System.out.println(key.toString()+":"+值);}}}publicclassStudentimplementsComparable{privateStringname;私人年龄;公共学生(){超级();}publicStudent(Stringname,intage){super();this.name=名称;这个。年龄=年龄;}publicStringgetName(){返回名称;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){返回年龄;}publicvoidsetAge(intage){this.age=age;}@OverridepublicStringtoString(){return"学生[姓名="+姓名+",年龄="+年龄+"]";}@OverridepublicinthasCode(){finalintprime=31;整数结果=1;结果=质数+结果+年龄;结果=素数+结果+((名称==null)?0:name.hashCode());返回结果;}@Overridepublicbooleanequals(Objectobj){if(this==obj)returntrue;如果(obj==null)返回false;如果(getClass()!=obj.getClass())返回false;其他学生=(Student)obj;如果(年龄!=other.age)返回假;if(name==null){if(other.name!=null)返回false;}elseif(!name.equals(other.name))returnfalse;returntrue;}@OverridepublicintcompareTo(Studento){inttemp=this.age-o.age;返回温度==0?this.name.compareTo(o.name):temp;}}TreeMappublicclassTreeMapDemo{publicstaticvoidmain(String[]args){Mapmap=newTreeMap(newComparatorByName());//添加元素map.put(newStudent("da",12),"1");map.put(newStudent("shu",13),"2");map.put(newStudent("dashu",14),"3");//取出数据for(Map.Entrym:map.entrySet()){Studentkey=m.getKey();Stringvalue=m.getValue();System.out.println(key+":"+value);}}}publicclassComparatorByNameimplementsComparator{@Overridepublicintcompare(Studento1,Studento2){inttemp=o1.getName().compareTo(o2.getName());returntemp==0?o1.getAge()-o2.getAge():temp;}}04示例:publicclassCollectionsDemo{publicstaticvoidmain(String[]args){Mapm=newHashMap();m.put("da","8");m.put("数数","9");m.put("数数","10");m.put("数数编码","12");System.out.println(m);}}JavaMap最常用的集合类是List和Map,List的实现类有ArrayList和Vector,它们是可变大小的列表,适用于构建、存储和操作任意类型对象元素的列表。Map比较通用,Map集合类用来存储元素对,是键值对,每个键映射到一个值。从理解上,List可以看作是数字键的Map,但两者没有任何关系。所有键值对——entrySet()所有键——keySet()值——values()IteratorkeyValues=map.entrySet().iterator();Iteratorkeys=map.keySet().iterator();迭代器值=map。values().iterator();entrySet():返回Map中包含的映射的Set视图。keySet():返回Map中包含的键的Set视图。values():返回Map中包含的值的Collection视图。