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

0.前言

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

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

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

  • 由于最终目的是要开发安卓app,
    因此这里使用的IDE是AS(Android Studio)
    (不会使用的可以参考下面这篇文章中的例子)
    《[Java]开发安卓,你得掌握的Java知识2》

1.本文主要内容简介

  • HashSet与HashMap的用法与细节

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

2.基础知识讲解

2.1Set与HashSet

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

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

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

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

  • Set里对象不能重复

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

Set 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 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 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 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 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> set = map.entrySet();
for (Map.Entry entry : set) {
     //获取Entry对应的key
     String key = entry.getKey();
     //获取Entry对应的值
      Integer value = entry.getValue();
     
      System.out.print(value+" ");
}

输出结果为:
99 90 81

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

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

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,都需要大家多多练习,通过实战来理解它们的用法。单纯的为用而用其实意义不大。

你可能感兴趣的:([Java]开发安卓,你得掌握的Java知识11——HashMap等)