android 常用集合HashMap的使用和详解

Java的集合类由Collection接口和Map接口派生

  1. 集合类的接口定义
1) Collection
一组"对立"的元素,每个位置只能保存一个元素(对象),通常这些元素都服从某种规则
   1.1) List必须保持元素特定的顺序
   1.2) Set不能有重复元素
   1.3) Queue保持一个队列(先进先出)的顺序
2) Map
一组成对的"键值对"对象,就像一个小型数据库。我们可以通过"键"找到该键对应的"值"
  1. Java集合类架构层次关系

    盗用一张图来展示集合接口和它的实现类直接拿的关系

在这里插入图片描述
在这里插入图片描述

android常用的集合方法和实现类

  • Iterator:迭代器

    它是Java集合的顶层接口(不包括 map 系列的集合,Map接口 是 map 系列集合的顶层接口)

    查看Collection源码可以看到它继承的是类 Iterable,
    查看co

Iterator :存在于 java.util 包中。核心的方法

  • Object next():返回迭代器刚越过的元素的引用,返回值是 Object,需要强制转换成自己需要的类型
  • boolean hasNext():判断容器内是否还有可供访问的元素
  • void remove():删除迭代器刚越过的元素

这里我们引用一个Iterator 的实现类 ArrayList 来看一下迭代器的使用:暂时先不管 List 集合是什么,只需要看看迭代器的用法就行了

 1         //产生一个 List 集合,典型实现为 ArrayList。
 2         List list = new ArrayList();
 3         //添加三个元素
 4         list.add("Tom");
 5         list.add("Bob");
 6         list.add("Marry");
 7         //构造 List 的迭代器
 8         Iterator it = list.iterator();
 9         //通过迭代器遍历元素
10         while(it.hasNext()){
11             Object obj = it.next();
12             System.out.println(obj);
13         }
  • HashMap
    继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口
    简单来说HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。

它包括几个重要的成员变量:table, size, threshold, loadFactor, modCount
  table是一个Entry[]数组类型,而Entry实际上就是一个单向链表。哈希表的"key-value键值对"都是存储在Entry数组中的。
  size是HashMap的大小,它是HashMap保存的键值对的数量。
  threshold是HashMap的阈值,用于判断是否需要调整HashMap的容量。threshold的值=“容量*加载因子”,当HashMap中存储数据的数量达到threshold时,就需要将HashMap的容量加倍。
  loadFactor就是加载因子。
  modCount是用来实现fail-fast机制的。

Map:key-value 的键值对,key 不允许重复,value 可以

1、严格来说 Map 并不是一个集合,而是两个集合之间 的映射关系。

2、这两个集合每一条数据通过映射关系,我们可以看成是一条数据。即 Entry(key,value)。Map 可以看成是由多个 Entry 组成。

3、因为 Map 集合即没有实现于 Collection 接口,也没有实现 Iterable 接口,所以不能对 Map 集合进行 for-each 遍历。

HashMap的主干是一个Entry数组。Entry是HashMap的基本组成单元,每一个Entry包含一个key-value键值对。
常用的hashMap遍历:
遍历Entry

for(Map.Entry<String, String> entry: map.entrySet())
        {
         System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
        }

根据collection的Iterator遍历,keySet源码可读

for(String key:map.keySet())
        {
         System.out.println("Key: "+key+" Value: "+map.get(key));
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值