当前位置: 首页 > news >正文

济南网站建设推荐q479185700上快甘肃高端建设网站

济南网站建设推荐q479185700上快,甘肃高端建设网站,wordpress主题开发班,如何快速推广一个appMap接口 JDK8 Map接口实现子类的特点 Map和Collection是并列关系#xff0c;Map用于保存具有映射关系的数据#xff1a;Key-ValueMap中的key和value可以是任何引用类型的数据#xff0c;会封装到HashMap$Node对象中Map中的key不允许重复#xff0c;原因和HashSet一样Map…Map接口 JDK8 Map接口实现子类的特点 Map和Collection是并列关系Map用于保存具有映射关系的数据Key-ValueMap中的key和value可以是任何引用类型的数据会封装到HashMap$Node对象中Map中的key不允许重复原因和HashSet一样Map中的value可以重复Map的key可以为nullvalue也可以为null但是key只能有一个nullvalue可以有多个null只要key不同就行常用String类为Map的keykey和value之间存在单向一对一关系即通过key找到对应的value。可以理解为key相当于身份证号value是对应的人人可以重复名字样貌等但是身份证不能重复。当加入一个重复的key和不重复的value时相当于替换 测试 public class test1 {public static void main(String[] args) {Map map new HashMap();map.put(nbo1,张三);map.put(nbo2,李四);map.put(nbo3,王五);map.put(nbo1,李向);System.out.println(map);} }运行结果 {nbo2李四, nbo1李向, nbo3王五} 在之前Collection接口实现集合类都是使用key来直接保存存储的数据。而Map接口实现集合类会使用key和value两个相互映射来保存数据key可以看作是一个序号或者身份证号value才是真正保存的数据 理解Map存放的key-value是放在一个Node中的又因为Node实现了Entry接口所以也说一对k-v也是一个Entry** 我们知道当使用Map实现集合类存放了一个元素时会有key和value也就是键和值键key可以看作是一个序号值valuie可以看作是内容一个序号对应一个内容而这两个东西是存放在一个Node节点中的。但是因为Map不是Collection接口Map没有实现iterator接口所以要遍历不是很方便。因此在添加元素时除了会保存到table数组时还会做一件事情就是保存到一个EntrySet集合中EntrySet集合中的保存类型不是Node类型而是Entry类型。 但是这里的意思不是说把table中的数组都复制一份到EntrySet集合中而是单纯的引用也就是把EntrySet中的一个个Entry指向的还是table中的一个个Node。而为什么要做这么一件事呢这是因为在EntrySet集合中保存的key是Set接口类型的value是Collection接口类型的当然实际运行类型还是Node只不过这样就可以使用迭代器了。 public class test1 {public static void main(String[] args) {Map map new HashMap();map.put(nbo1,张三);map.put(nbo2,李四);map.put(nbo3,王五);map.put(nbo1,李向);Set set map.entrySet();for (Object obj:set) {Map.Entry entry (Map.Entry) obj;System.out.println(entry.getClass());System.out.println(entry.getKey()-entry.getValue());}} }运行结果 class java.util.HashMapNodenbo2−李四classjava.util.HashMapNode nbo2-李四 class java.util.HashMapNodenbo2−李四classjava.util.HashMapNode nbo1-李向 class java.util.HashMap$Node nbo3-王五 Map接口实现类的常用方法 口语说法key键 ———— value值 put(key,value);添加当再次添加同一个键但是值不同时会对值进行替换removekey)根据键删除这对键和值get(key);根据键获取值size()获取当前集合的元素个数isEmpty():判断当前集合元素个数是否为0containsKey(key)查找传入的键是否存在clear:清除集合所有元素归0 使用演示 public class test2 {public static void main(String[] args) {Map map new HashMap();// 1. put(key,value);添加当再次添加同一个键但是值不同时会对值进行替换map.put(no1,李青);map.put(no2,绿意);map.put(no1,李青);System.out.println(map); // 2. removekey)根据键删除这对键和值map.remove(no1);System.out.println(map); // 3. get(key);根据键获取值System.out.println(map.get(no2)); // 4. size()获取当前集合的元素个数System.out.println(map.size()); // 5. isEmpty():判断当前集合元素个数是否为0System.out.println(map.isEmpty()); // 6. containsKey(key)查找传入的键是否存在System.out.println(map.containsKey(no2)); // 7. clear:清除集合所有元素归0map.clear();System.out.println(map);} }运行结果 {no2绿意, no1李青} {no2绿意} 绿意 1 false true {} Map接口实现类的六大遍历方式 上面了解到了map存入的数据还会有一个EntrySet集合指向table数组中的数据所以遍历也是围绕这个来操作 Map实现接口可以分为三大类每类有两种方式 1.获取键key再通过键来获取值value 2.直接获取值value但是无法通过值value获取key所以只能输出value 3.通过EntrySet同时获取到键和值 遍历用到的方法 KeySet获取所有键entrySet获取所有键和值k-vvalues获取所有值 演示 public class test3 {public static void main(String[] args) {Map map new HashMap();map.put(no1,淘宝);map.put(no2,天猫);map.put(no3,京东);//第一类:获取所有键再通过get方法获取值。//第一种方式:获取键后使用增强forSystem.out.println(第一种);Set set map.keySet();for (Object key:set) {System.out.println(key-map.get(key));}System.out.println(第二种);//第二种方式:获取键后使用迭代器Iterator iterator set.iterator();while (iterator.hasNext()) {Object next iterator.next();System.out.println(next-map.get(next));}//第二类:获取所有值//第三种方式:增强for直接输出valueSystem.out.println(第三种);Collection value map.values();for (Object o: value) {System.out.println(o);}//第四种:使用迭代器直接输出System.out.println(第四种);Iterator iterator2 value.iterator();while (iterator2.hasNext()) {Object next iterator2.next();System.out.println(next);}//第三类:获取所有键和值再向下转型成Entry使用它的getKey和getValue方法//第五种获取所有键和值增强for操作System.out.println(第五种);Set entrySet map.entrySet();for (Object e:entrySet) {Map.Entry entry (Map.Entry) e;System.out.println(entry.getKey()-entry.getValue());}//第六种:迭代器操作System.out.println(第六种);Iterator iterator1 entrySet.iterator();while (iterator1.hasNext()) {Object next iterator1.next();Map.Entry entry (Map.Entry) next;System.out.println(entry.getKey()-entry.getValue());}} }运行结果 第一种 no2-天猫 no1-淘宝 no3-京东 第二种 no2-天猫 no1-淘宝 no3-京东 第三种 天猫 淘宝 京东 第四种 天猫 淘宝 京东 第五种 no2-天猫 no1-淘宝 no3-京东 第六种 no2-天猫 no1-淘宝 no3-京东 Map小练习 使用HashMap添加三个员工对象要求 键员工id 值员工对象 且遍历显示工资18000的员工至少使用两种遍历方式 员工类姓名工资员工id public class test4 {SuppressWarnings({all})public static void main(String[] args) {HashMap map new HashMap();staff s1 new staff(01,李四,16000);staff s2 new staff(02,王五,23000);staff s3 new staff(03,赵三,12000);staff s4 new staff(04,李明,19000);map.put(s1.id,s1);map.put(s2.id,s2);map.put(s3.id,s3);map.put(s4.id,s4);//第一种获取直接获取所有值判断运行类型是否是staff如果是就向下转型再判断薪水决定是否输出Collection c map.values();for (Object value:c) {if (value instanceof staff){staff s (staff) value;if (s.sal18000){System.out.println(s);}}}//第二种直接获取所有键和值Set entrySet map.entrySet();for (Object entry:entrySet) {Map.Entry entry1 (Map.Entry) entry;staff s (staff) entry1.getValue();if (s.sal18000){System.out.println(s);}}} } class staff{String name;int id;double sal;public staff(int id,String name,double sal) {this.name name;this.id id;this.sal sal;}Overridepublic String toString() {return staff{ name name \ , id id , sal sal };} }HashMap小结 Map接口的常用实现类HashMapHashtablePropertiesThreeMapHashMap是Map接口使用频率最高的实现类HashMap是以key-value对的方式来存储数据的key不能重复但是值可以重复运行使用null作为存入的数据如果添加相同的key则会覆盖原来的key-value等同于替换与HashSet一样HashMap不保证映射的顺序因为底层是以hash表的方式来存储的jdk8的hashMap底层数组链表红黑树HashMap没有实现同步因此是线程不安全的方法没有做同步互斥的操作没有synchronized HashMap底层机制及源码刨析 扩容机制 HashMap底层维护了Node类型的数组table默认为null当创建对象时将加载因子loadfactor初始化为0.75.也就是当table数组存放的元素数到达整体数组大小的75%时就会进行扩容当添加k-y时会先通过key的哈希值得到在table的索引然后判断该索引是否有元素如果没有则直接添加如果有元素就判断该位置的元素key和准备添加的key是否相等如果相等则直接替换value如果不相等则判断是树结构还是链表结构如果是链表结构就直接与下一个元素判断。第一次添加需要扩容table数组容量为16扩容临界值(threshold)为1216*0.75非第一次扩容就是扩容table容量为原来的2倍临界值也为原来的2倍以此类推在java8中如果一条链表的元素超过了8个且table的大小64就会进行树化如果链表元素超过8个但是table数组的大小还未超过64那么就会先进行数组扩容直到数组大小到达64才会进行树化 Hashtable Hashtable也是Map接口的实现类与HashMap是同级关系 Hashtable基本介绍 存放的元素也是键和值key-valueHashtable的k-v都不能存放null负责会抛出异常Hashtable的使用方法基本上和HashMap一致Hashtable是线程安全的HashMap是线程不安全的 Hashtable底层介绍 初始 底层由数组Hashtable$Entry[]初始化大小为11初始临界值threeshold 8 11*0.75所以也是到75%就扩容Hashtable除了第一次初始化大小后面扩容机制为 *21. Hashtable和HashMap的选择 实现类出现版本线程安全效率是否可以存nullHashMap1.2不安全高允许Hashtable1.0安全较低不允许 Properties Properties基本介绍 Properties类继承于Hahstable类同样实现了Map接口也是一种键key-值value的形式保存数据Properties的使用特点和Hashtable类似Properties还可以用于从xxx.properties文件中加载数据到Properties类对象进行读取和修改(在IO流说明) Properties的增删改查 public class test5 {public static void main(String[] args) {Properties properties new Properties();//增加properties.put(no1,100);properties.put(no2,200);//删除根据key删除key-valueproperties.remove(no1);System.out.println(properties);//改替换properties.put(no2,90);System.out.println(properties);//查根据key获取valueSystem.out.println(properties.get(no2));} }
http://www.hkea.cn/news/14430220/

相关文章:

  • 前端网站开发心得体会seo工程师招聘
  • 网站建设和梅州建站
  • 阳泉哪里做网站网站和公众号的区别是什么
  • 免费的ppt网站泰州企业建站系统
  • 网站建站网站626969自己做一个购物网站
  • 英文网站报价wordpress 月光博客
  • 毕业设计网站源码石家庄建站工具
  • 张掖市作风建设年活动网站旅游网站设计模板
  • 深圳网站维护优化杭州网站开发后端招
  • 做网站要自己租服务器网站建设理论基础
  • 网站都需要什么类别上海十大营销策划公司排名
  • 百度如何把网站做链接深圳市建设工程交易服务
  • 国外科技类网站邢台网站制作哪里有
  • 泸州住房和城乡建设厅网站首页网络营销从网站建设开始
  • 网站开发+自动生成缩略图手机网站怎么做推广
  • 可以自己做课程的网站百度站长平台提交网站
  • 请问下网站开发怎么弄通用网址通用网站查询
  • 卡片式设计网站公司招牌制作价格
  • 南京代做网站怎么注销网站
  • 和县网站建设有哪些网站是静态网站
  • php手机网站制作制作网页时通常需要在同一网页内跳转常常采用制作什么超链接
  • 东西湖区网站建设公司seo整站优化新站快速排名
  • 乐山做美食推荐的网站教学网站建设论文
  • 简约 网站模板建设小学网站
  • 免费网站在线制作开通公司网站怎么开通
  • 机械设备网站建设那个网站做足球测
  • 成品网站速成网站网站查外链
  • 只做移动端的网站贵阳做网络平台的公司
  • 惠州的服装网站建设到那里找做网站的兼职
  • 有人在相亲网站骗人做传销济南网络seo公司