[Java]开发安卓,你得掌握的Java知识11——HashMap等

0.前言

  • 上一篇文章,我们讲解了ArrayList的相关用法
    看本文之前,推荐先去看一遍该文章

  • 今天我们主要讲解Set中的HashSet与HashMap

  • 若想要了解“类”等其他主要知识,可以去看前面的文章

1.本文主要内容简介

  • HashSet与HashMap的用法与细节

  • 关于Lambda表达式的一些用法

2.基础知识讲解

2.1Set与HashSet

  • Set就是数学里面的集合,它是无序的

  • Hash就是常说的哈希函数,与ArrayList中的按顺序的索引值不同,HashXXX是通过哈希算法来计算出一个索引值,然后把对象放到索引值

基本特征:
  • 插入之后,对象在元素中的顺序与插入顺序并不相同,且会自动按照默认排序方法排序(如a,b,c或1,2,3)

  • Set是无序的,它无法像List一样,访问第n个元素,
    只能通过遍历的方式去访问元素

  • Set里对象不能重复

基本定义、使用方式如下:

Set<Integer> set = new HashSet
set.add(2);
set.add(1);
set.add(3);
System.out.println(set);

输出结果为:
[1, 2, 3]

遍历Set的方式:

方法1:用Iterator迭代器进行遍历

  • 遍历Set才能访问到存入Set中的各个对象
Set<Integer> set = new HashSet
set.add(2);
set.add(1);
set.add(3);
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
         int temp = (int)iterator.next();
         temp--;
         System.out.print(temp+" ");
}

输出结果为:
[1, 2, 3]
0 1 2

  • 方法2:用foreach循环进行遍历
Set<Integer> set = new HashSet
set.add(2);
set.add(1);
set.add(3);
for (Integer integerTemp : set5) {
      integerTemp--;
      System.out.print(integerTemp+" ");
}

输出结果为:
[1, 2, 3]
0 1 2

  • 要注意的是,两种遍历方式,最后都没有改变Set中的值

2.2Map与HashMap

  • Map 是一种键-值对(key-value)集合

  • 与List和Set不同,Map需要给出两个泛型,
    分别对应key和value

基本特征:
  • 讲对象插入Map之后,对象在元素中的顺序与插入顺序并不相同,也没有一个指定的顺序

  • Map也无法像List一样,访问第n个元素,除了通过遍历的方式去访问元素,主要可以通过键值来找到对应的value

  • Set中是对象不能重复,而Map中是键值(key)不能重复,如果前后放入的对象的键值相同,则会将该键值对应的value进行替换

  • 基本的定义、使用方法:
    (1)HashMap较为常用,是Map(接口)的一个子类
    (2)Map后面的<>需要填写两个泛型,
    第一个为键值key,第二个为键值对应的value
  • 与List、Set使用add()函数将对象放入不同,
    Map中使用的是put(key,value);方法
    具体代码:
        Map<String,Integer> map = new HashMap<>();
        map.put("Chinese",90);
        map.put("English",99);
        map.put("France",80);
        map.put("France",81);
        System.out.println(map);

输出结果为:
[English=99, Chinese=90, France=81]

  • 可见,最后put()方法中有两个France,但是最后只输出了一个,它的值是81,说明:
    由于键值相同,其对应的值被替换,而不会产生新的对象
HashMap的重要方法 具体作用
get(key) 通过键值获得对应的value
keySet() 获得所有的key,返回值为Set
values() 获得所有value,返回值为Set
entrySet() 获得所有Entry,返回值为Set
  • Entry就是一个键值对

遍历Map的方式:

  • 方法1:通过遍历key来得到每一个key对应的值
    要用到keySet()方法获得所有key
        Map<String,Integer> map = new HashMap<>();
        map.put("Chinese",90);
        map.put("English",99);
        map.put("France",80);
        map.put("France",81);
        for(String key : map.keySet()){
             Integer temp = map.get(key);
             System.out.println(temp);
        }

输出结果为:
[99, 90, 81]

  • 方法2:通过EntrySet来遍历
Set<Map.Entry<String, Integer>> set = map.entrySet();
for (Map.Entry<String, Integer> entry : set) {
     //获取Entry对应的key
     String key = entry.getKey();
     //获取Entry对应的值
      Integer value = entry.getValue();
     
      System.out.print(value+" ");
}

输出结果为:
99 90 81

  • 其中要注意:
    Entry<String,Integer>其实就是一个键值对
    也可以当作一种类型看待

  • String和Integer对应的就是HashMap中的两个泛型
    因为是Map下面的静态变量,所以是Map.Entry<String,Integer>

2.3Exception异常处理

  • 所谓异常处理,就是在遇到程序异常的时候,将其抛出(就是停止程序并告诉程序员)
  • 在进行流的操作的时候,其实我们就已经遇到了Exception
  • 异常的种类有很多种,我们不可能全部记住,但至少得记住:
    Exception是最高的父类,所有异常都继承于这个类
    IOException专门负责输入输出方面的异常

try/catch语句

  • 它可以负责处理特定位置的异常
try{
              Reader r = new FileReader("ddd")     
    }catch(IOException e){
              e.printStackTrace();
    }
  • 注意:
    (1)catch后面还可以跟多个catch,但是会和难看,不推荐
    (2)catch最后可以加一个finally{},表示无论是否抛出异常,最后都会执行
    (3)try的{ }中一旦遇到异常,后面的语句就不会执行


throws

  • 它throws是加在函数头中的函数名后面的
    它可以抛出函数体中的所有可能的异常
  • 使用这种方式可以避免使用try/catch导致代码冗杂
public static void test() throws IOException{
                Reader r = new FileReader("ddd");
        }
  • 注意:
    如果是在函数体中调用其他函数时,需要抛出异常的话,
    最好使用try/catch

    其他情况下建议使用throws

3.总结

(1)本文讲解了Collection中常用的三种集合中的后两种,Set和Map。其中,HashMap值得大家多多关注,因为在缺少指针的Java中,当需要返回多个值的时候,就可以考虑用HashMap
(2)Exception其实概念很简单,也不需要过分注意,不过在公司中,自定义异常似乎较为常见,理由是系统自带的异常的显示不够清晰
(3)无论是Set、Map还是Exception,都需要大家多多练习,通过实战来理解它们的用法。单纯的为用而用其实意义不大。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,753评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,668评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,090评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,010评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,054评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,806评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,484评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,380评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,873评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,021评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,158评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,838评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,499评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,044评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,159评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,449评论 3 374
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,136评论 2 356

推荐阅读更多精彩内容

  • 一、基本数据类型 注释 单行注释:// 区域注释:/* */ 文档注释:/** */ 数值 对于byte类型而言...
    龙猫小爷阅读 4,266评论 0 16
  • java笔记第一天 == 和 equals ==比较的比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
    jmychou阅读 1,502评论 0 3
  • 九种基本数据类型的大小,以及他们的封装类。(1)九种基本数据类型和封装类 (2)自动装箱和自动拆箱 什么是自动装箱...
    关玮琳linSir阅读 1,887评论 0 47
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,228评论 0 2
  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,385评论 0 4