Objective-C中Java的List的等价物是什么?

时间:2011-11-15 21:51:19

标签: objective-c list

我想知道Objective-C是否支持Lists?或者...... NSMutableArray是一种方法,而不是?

2 个答案:

答案 0 :(得分:23)

是的NSMutableArrayMaciOS)在大多数情况下都是适当的列表类(NSArray是不可变的对应项)。

与Java的集合类相反 Objective-C (或更确切地说是 Foundation )数组是完全隐藏其实现的不透明类集群。

修改: 剪辑 (请参阅 orange80 的评论)

虽然Java有很多集合类,例如:

  • HashSet
  • TreeSet
  • LinkedHashSet
  • ArrayList
  • LinkedList
  • PriorityQueue
  • HashMap
  • TreeMap
  • LinkedHashMap
  • WeakHashMap
  • IdentityHashMap
  • CopyOnWriteArrayList
  • CopyOnWriteArraySet
  • EnumSet
  • EnumMap
  • ConcurrentLinkedQueue
  • LinkedBlockingQueue
  • ArrayBlockingQueue
  • PriorityBlockingQueue
  • DelayQueue
  • SynchronousQueue
  • ConcurrentHashMap
然而,

Objective-C(实际上,基础 SDK)仅提供非常有限数量的集合类:

  • CFMutableDictionary
  • CFMutableBag
  • CFMutableBitVector
  • CFMutableSet
  • CFMutableArray
  • CFBinaryHeap
  • CFMutableTree

或优选其NS等价物:

  • NSMutableDictionary
  • NSDictionary
  • NSMutableSet
  • NSSet
  • NSCountedSet
  • NSMutableArray
  • NSArray

为了全面了解此事,我建议您阅读: http://ridiculousfish.com/blog/posts/array.html(作者是Apple基金会团队的成员)

答案 1 :(得分:2)

一般来说,您需要使用NSMutableArray来表示等效行为(尽管实现方式非常不同。)您还可以选择使用CFMutableArray(基于C的API,即比NSMutableArray更灵活,并且可以免费使用它。)如果你使用C ++而不是(或除了)Objective-C,你有任何STL集合类型(例如{{ 1}},std::list<T>等)其适用性取决于您的确切用例。