常用类篇

前言

相信每种语言都会有使用频率很高的类,在Java和Object-c中也不例外,这里做一下汇总,只介绍一些基础类,更多的还要我们在平时的开发中不断积累。

String(Java) VS NSString(Object-c)

字符串是一连串的字符序列,我们知道在C语言中是没有这个概念,他通常用字符指针来表示。这里列了创建、获取长度、截取、连接、替换、比较、大小写转换等,最好还有可变字符串。

String NSString 备注说明
通过大量构造函数来创建String对象 可以使用以init开头的实例方法,也可以使用以string开头的类方法。当然也可以直接用@“”的形式给出字符串常量,同时可以读取文件或网络URL来初始化字符串,我们在IDE里面输入这些可以做提示 字符串的创建
int length() length属性 获取字符串长度
public char charAt(int index) - (unichar)characterAtIndex:(NSUInteger)index 获取指定位置字符串
public String concat(String str) - (NSString *)stringByAppendingString:(NSString *)aString 连接字符串
public String[] split(String regex) - (NSArray *)componentsSeparatedByString:(NSString *)separator 分割字符串
public String substring(int beginIndex,int endIndex) - (NSString *)substringWithRange:(NSRange)aRange 截取子字符串
public String replace(CharSequence target,CharSequence replacement) - (NSString*)stringByReplacingCharactersInRange:(NSRange)range withString:(NSString *)replacement 替换字符串
public boolean equals(Object anObject) - (BOOL)isEqualToString:(NSString *)aString 比较字符串
public String toLowerCase(Locale locale)
public String toUpperCase(Locale locale)
- (NSString *)lowercaseStringWithLocale:(NSLocale *)locale
- (NSString *)uppercaseStringWithLocale:(NSLocale *)locale
大小写转换

以上仅仅是列出来个别字符串方法用法,还有很多,针对这部分我想学会熟练查API就可以了

其他常用类对比

Java常用类 Object-c常用类 备注说明
StringBuilder、StringBuffer NSMutableString 可变字符串
Date NSDate 日期类
SimpleDateFormat NSDateFormatter 日期格式化类
Calendar NSCalendar 日历类
Timer NSTimer 定时器类

集合

集合中是一个特别有用的工具类,它可以用于存储数量不等的多个对象,并可以实现常用的数据结构,如栈,队列等,除此还有映射关系的数组等:Java中有序可重复的List,Object-c中的NSArray,Java中无序,不可重复的Set,Object-c中的NSSet,Java中映射关系的Map,Object-c中的NSDictionary等等,我们对其一一说明。

Java: List接口

List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

  1. LinkedList类:LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:List list = Collections.synchronizedList(new LinkedList(…));
  2. ArrayList类:ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。提供有size,isEmpty,get,set方法。
  3. Vector类:Vector非常类似ArrayList,但是Vector是同步的。
  4. Stack 类:Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。Stack刚创建后是空栈。

Object-c: NSArray&NSMutableArray

NSArray提供以array开头的类方法和以init开头的实例方法来创建NSArray,

  1. 我们可调用objectAtIndex:index方法来访问指定索引处的元素,也可以直接使用索引处下标来访问。
  2. 可以使用arrayByAddingObject:方法追加单个元素或者使用arrayWithObjects:方法将另一个数组中所有元素追加到原数组的后面。
  3. NSArray允许对集合中所有的元素或部分元素整体调用方法:makeObjectsPerformSelector:传入一个SEL参数,用于指定调用哪个方法。makeObjectsPerformSelector:withObject:这个和上一个方法区别在于第二个参数用于调用集合元素的方法时传入参数,第三个参数用于控制是否终止迭代,如果在处理某个元素后,将第三个元素赋为YES,该方法就会终止迭代调用。另外还可以使用enumerateObjectsUsingBlock:遍历元素,并依次使用元素来执行指定的代码块。enumerateObjectsWithOptions:usingBlock:与上一个方法区别是额外传入一个参数,用于控制遍历的选项,如反向遍历。enumerateObjectsAtIndexes:options:usingBlock:。
  4. 枚举器遍历:objectEnumerator:(顺序枚举器),reverseObjectEnumerator:(逆序枚举器),它们返回NSEnumerator用allObjects:和nextObject:来遍历元素。另外还有快速枚举:(for…in)。
  5. NSArray也提供KVC与KVO。
  6. NSMutableArray:可变的数组,新增add,remove,replace,sort方法。

Java:Set接口

Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。

  1. HashSet类:他实现了set接口,它不允许出现重复元素,不保证和政集合中元素的顺序,允许包含值为null的元素,但最多只能有一个null元素。
  2. TreeSet描述的是Set的一种变体——可以实现排序等功能的集合,它在讲对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中,并保证该集合元素组成的按照一定顺序排列。

Object-c:NSSet&NSMutableSet

NSSet不允许包含相同的元素,如果试图把两个元素放在相同的一个NSSet集合中,则只会保留一个元素。
这里提一下重复的标准:

  1. 两个对象通过isEqual:方法返回YES.
  2. 两个对象的hash方法返回值也相等。
    如果需要某个类的对象保存到NSSet集合中,重写这个类的isEqual:方法和Hash方法,应该尽量保证两个对象通过isEqual:比较返回YES时,它们的Hash方法返回值也相等。
    NSMutableSet依然有add,remove等方法,另外也有unionSet:,minusSet:,intersectSet:,setSet:等方法来计算并集,差集,交集,替换已有集合中元素。
  3. NSCountedSet:它是NSMutableSet的子类,不同的是NSCountedSet为每个元素额外维护一个添加次数的状态。
  4. NSOrderedSet与NSMutableOrderedSet:既具有NSSet集合的特征,也具有NSArray类似的功能。它不允许元素重复,但又可以保持元素的添加顺序,而且每个元素都有索引。

Java:Map接口

请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

  1. Hashtable类:Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。添加数据使用put(key, value),取出数据使用get(key),Hashtable是同步的。
  2. HashMap类:HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。
  3. TreeMap类:TreeMap类要比HashMap类的性能差一些,但是其中的映射关系具有一定的顺序,如果不需要一个有序的集合,则建议使用HashMap类;如果需要进行有序的遍历输出,则建议使用TreeMap类,在这种情况下,可以先使用由HashMap类实现的Map集合,在需要顺序输出时,再利用现有的HashMap类的实例,创建一个具有完全相同映射关系的TreeMap类型的实例

Object-c:NSDictionary&NSMutableDictionary

NSDictionary用于保存具有映射关系的数据,一组保存key,一组保存value,这两组数据都可以是任何类型的数据,其中Map的key不允许重复。同样它们以dictionary开头的类方法和init开头的实例方法来创建对象。另外也有count:,allKeys:,allValues:,objectForKey:,keyEnumerator:,objectEnumerator:等方法。

如果使用自定义类作为NSDictionary的key,则该自定义类必须满足如下要求:

  1. 该自定义类正确重写过isEqual:和hash方法,所谓正确重写是指当两个对象通过isEqual:方法判断相等时,两个对象的hash方法返回值也相等。
  2. 该自定义类必须实现可copyWithZone:方法,该方法最好能返回对象的不可变副本。
    NSMutableDictionary除了以上NSDictionary所有的方法外,还可以动态添加删除key-value对

Object-c:谓词

该类主要用于指定过滤器的条件,该对象可以准确的描述所需条件,对每个对象通过谓词进行筛选,判断是否与条件相匹配。
步骤如下:

1
2
3
4
5
6
1.创建NSPredicate(相当于创建一个过滤条件)  
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"过滤条件"];
2.判断指定的对象是否满足NSPredicate创建的过滤条件
[predicate evaluateWithObject:person];
3.过滤出符合条件的对象(返回所有符合条件的对象)
NSArray *persons = [array filteredArrayUsingPredicate:predicate];

下面是常用的NSPredicate条件:

  1. 逻辑运算符号 > , < , = , >= , <= 等
  2. IN
  3. 以xx开头 --beginswith
  4. 包含 -- contains
  5. 模糊查询--like
  6. 正则表达式

这里列举出来一部分,更多的可以参考手册

分享到:
移动开发者/技术爱好者/喜欢开源与分享,你也可以关注微信公众号MobDevGroup,移动开发在线分享:MobDevGroup