Map&&iOS里的HashTable和MapTable

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Map&&iOS里的HashTable和MapTable相关的知识,希望对你有一定的参考价值。

参考技术A 关于算法中的Map的理解典型的计算用户输入的字符出现频率最高的算法
首先了解下Map:

在讲解Map排序之前,我们先来稍微了解下map。map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):

-方法一

ios HasMap
NSHashTable
NSHashTable 是 NSSet 的通用版本,和 NSSet/NSMutableSet不同的是,NSHashTable具有以下特性:

NSHashTable是可变的,没有不可变的对应类
NSHashTable可以持有成员的弱引用
NSHashTable可以在加入成员时进行copy操作
NSHashTable可以存储任意的指针,通过指针来进行相等性和散列检查
基本用法
NSHashTable *hashTable = [NSHashTable hashTableWithOptions:NSPointerFunctionsCopyIn];
[hashTable addObject:@"hello"];
[hashTable addObject:@10];
[hashTable addObject:@"world"];
[hashTable removeObject:@"world"];
NSLog(@"Members: %@", [hashTable allObjects]);
NSMapTable
NSMapTable是NSDictionary的通用版本,NSMapTable具有下面特性:

NSMapTable是可变的,没有不可变的类
NSMapTable可以持有键和值的弱引用,当键或值当中的一个被释放时,整个这一项就会被移除掉
NSMapTable可以在加入成员时进行copy操作
NSMapTable可以存储任意的指针,通过指针来进行相等性和散列检查
基本用法
id delegate = ...;
NSMapTable *mapTable = [NSMapTable mapTableWithKeyOptions:NSMapTableStrongMemory valueOptions:NSMapTableWeakMemory];
[mapTable setObject:delegate forKey:@"foo"];
NSLog(@"Keys: %@", [[mapTable keyEnumerator] allObjects]);
NSPointerArray
NSPointerArray是NSArray的通用版本,NSPointerArray具有下面特性:

和传统Array一样,用于有序的插入或移除
与传统Array不同的是,可以存储NULL,并且NULL还参与 count的计算
与传统Array不同的是, count可以set,如果直接set count,那么会使用NULL占位
可以使用weak来修饰成员
成员可以是所有指针类型
遵循 NSFastEnumeration,可以通过 for...in来进行遍历
对比
传统的集合类型都有哪些短板:

放到集合中的对象,只能强引用
如果想要弱引用,要先用 NSValue打包
不能放入 nil

总结
永远先从最高的抽象层次去尝试解决问题
如果碰到的问题包含内存管理需求,那么 NSHashTable和 NSMapTable值得一试

Map集合&&异常处理&&file类

Map集合

  *定义

  *集合定义方法

    Map<键名,键值> 变量名=new Map的子类<键名,键值>();   键名不能重复

    Map<String,Integer> map=new HashMap<String,Integer>();

  *迭代

    例:对Map集合进行添加并将其进行迭代输出 

       第一种方法: entrySet()   将map集合中键名和键值之间的映射关系进行封装   

      第二种方法: map集合中 keySet()    获取键名              get()  获取键值

      第三种方法: for(数据类型  变量名 : 数组或者集合名){  keySet()  }

技术图片技术图片

异常处理

  *throw  抛出异常

    1 throw   抛的是提示文本  必须写 new Exception   红色的是异常的名字  exception是最大的异常名字

    2 throws  抛的是方法  必须写 Exception  

   *try() catch()  捕捉异常       

  *用法区别: 在主方法中 用   try...cattch, 其余地区能抛异常 就抛异常。

File类

 

  *概念: File 类是 文件和目录路经营的抽象表示形式   f:/day

 

  *成员变量:pathSeparator     路径分割符  ;

         separator             目录分割符   / 

  *构造方法:   File(String parent,String child)

 技术图片

         File(file parent,file child)

         File(String parent,file child)

         File(file parent,String child)

技术图片

* 最常用的是 :直接创建路径对象

技术图片

   *File类  方法

        * createNewFile()  创建文件

      *  delete()    删除文件 / 删除文件夹

      * mkdirs()    创建文件夹

      * length()    获取文件中的字节数

      * getName()    获取目录下最后一个文件名

      * getParentFile()  获取父路径

      * endwith()   判断是否为**结尾的

      * listFiles()   获取功能 

 技术图片

 

以上是关于Map&&iOS里的HashTable和MapTable的主要内容,如果未能解决你的问题,请参考以下文章

Map集合&&异常处理&&file类

Java集合一

optimization & error -02

C++哈希(闭散列,开散列)

HDU-1113-Word Amalgamation

C++Map&&Set