StringCollection,Array,ArrayList,IList,Item,Queue,Stack,Hashtable,SortedList

本文深入探讨了在Java中选择合适的数据结构时的关键考虑因素,包括集合类的特性、使用场景以及性能比较,旨在帮助开发者根据具体需求高效地选择和应用集合类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

StringCollection,Array,ArrayList,IList,Item,Queue,Stack,Hashtable, SortedList


           当需要大小可按需动态增加,并希望通过索引来进行访问的数组的时候,使用ArrayList .
           
当需要一个能实现后进先出的集合时,使用Stack.
           当需要一个先进先出的集合时,使用Queue.
           当需要一个可以按Key值来查询的数组是,使用Hashtable.
           当需要一个按顺序排列的集合时,SortedList.
Csdn Help:

一定要谨慎选择 System.Collections 类。选用错误的类型可能限制您使用集合。

考虑以下问题:

  • 您是否需要一个序列列表,其中的元素通常在检索其值后被放弃?

    • 如果需要,那么在需要先进先出 (FIFO) 行为时请考虑使用 Queue 类或 Queue 泛型类。在需要后进先出 (LIFO) 行为时请考虑使用 Stack 类或 Stack 泛型类。

    • 如果不需要,请考虑使用其他集合。

  • 是否需要以某种顺序访问元素,例如 FIFO、LIFO 或随机访问?

    • Queue 类和 Queue 泛型类提供 FIFO 访问。

    • Stack 类和 Stack 泛型类提供 LIFO 访问。

    • LinkedList 泛型类允许从开头到末尾或从末尾到开头按顺序访问。

    • 其余的集合提供随机访问。

  • 是否需要通过索引访问每一元素?

    • ArrayList 和 StringCollection 类以及 List 泛型类通过元素的从零开始的索引提供对元素的访问。

    • Hashtable、SortedList、ListDictionary 和 StringDictionary 类以及 Dictionary 和 SortedDictionary 泛型类通过元素的键提供对元素的访问。

    • NameObjectCollectionBase 和 NameValueCollection 类以及 KeyedCollection 和 SortedList 泛型类通过其元素的从零开始的索引或者通过其元素的键提供对元素的访问。

  • 每一元素将包含一个值、一个键和一个值的组合还是一个键和多个值的组合?

    • 一个值:使用任何基于 IList 接口或 IList 泛型接口的集合。

    • 一个键和一个值:使用任何基于 IDictionary 接口或 IDictionary 泛型接口的集合。

    • 带有嵌入的键的一个值:使用 KeyedCollection 泛型类。

    • 一个键和多个值:使用 NameValueCollection 类。

  • 是否需要用与输入元素方式不同的方式对元素排序?

    • Hashtable 类按其元素的哈希代码对元素排序。

    • SortedList 类以及 SortedDictionary 和 SortedList 泛型类根据 IComparer 接口和 IComparer 泛型接口的实现按键对元素排序。

    • ArrayList 提供 Sort 方法,该方法接受 IComparer 实现作为参数。其对应的泛型类(List泛型类)提供 Sort 方法,该方法接受 IComparer 泛型接口的实现作为参数。

  • 是否需要信息的快速搜索和检索?

    • 对于小集合(10 项或更少),ListDictionary 比 Hashtable 快。SortedDictionary 泛型类提供比 Dictionary 泛型类更快的查找。

  • 是否需要只接受字符串的集合?

    • StringCollection(基于 IList)和 StringDictionary(基于 IDictionary)都位于 System.Collections.Specialized 命名空间中。

    • 此外,通过为泛型类型参数指定 String 类,可以使用 System.Collections.Generic 命名空间中的任何泛型集合类作为强类型字符串集合。

  • Collection 
    ├List 
    │├LinkedList 
    │├ArrayList 
    │└Vector 
    │ └Stack 
    └Set

    Collection接口 
      Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 
      所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。 
      如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下: 
        Iterator it = collection.iterator(); // 获得一个迭代子 
        while(it.hasNext()) { 
          Object obj = it.next(); // 得到下一个元素 
        } 
      由Collection接口派生的两个接口是List和Set。

    List接口 
      List是有序的Collection,这类似于Java的数组。 和下面要提到的Set不同,List允许有相同的元素。 
      除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,允许添加,删除,设定元素,还能向前或向后遍历。 
      实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。

    LinkedList类 
      LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。 
      注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List: 
        List list = Collections.synchronizedList(new LinkedList(...));

    ArrayList类
      ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
      每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
      和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

    Vector类
      Vector非常类似ArrayList,但是Vector是同步的。由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常

    Stack 类 
      Stack继承自Vector,实现一个后进先出的堆栈。

    就ArrayList与Vector主要从二方面来说. 
    一.同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同步的 
    二.数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半

    如果涉及到堆栈,队列等操作,应该考虑用Vector,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList



    引用链接
    ::::::本文的相关评价及说明信息::::::


    ArrayListVector的区别ArrayList是List接口的一个可变长数组实现。实现了所有List接口的操作,并允许存储null值。除了没有进行同步, ArrayList基本等同于 Vector。在 Vector中几乎对所有的方法都进行了同步,但 ArrayList仅对writeObject和readObject  ...

    ChinaUnix.net: - Java - 请教 arraylist and  vector的区别。(页1)

    在Java中 VectorArrayList有何 区别? 那么,分别是在什么场合下使用它.有什么优,缺点?? wild fox · 发表文章: 55 注册时间: 2003年03月19日17:34. Re: 在Java中 VectorArrayList区别?? 发表: 2004年02月02日14:37, 回复 ...

    1,作用域public,protected,private,以及不写时的 区别 public 在其他的包中的类也可以引用,protected只限于同一个包内的类,private只有自己可以使用。不写的时候和protected一样。 2, ArrayListVector的区别,HashMap和Hashtable的 区别  ...

    arraylistvector的区别。 4 hashmap和hashtable的 区别。 篇尾有答案,我们开始正题。 集合collection接口  ... arraylist(数组表)-类似于 vector,都用于缩放数组维护集合。 区别: 一.同步性: vector是线程安全的,也就是说是同步的,而 arraylist是线  ...

    关于“ ArrayListVector的区别,HashMap和Hashtable的 区别”的解决办法.  ...  ArrayListVector的区别,HashMap和Hashtable的 区别...... 有关" ArrayListVector的区别,HashMap和Hashtable的 区别"的详细内容与相关解决办法请点击......

    ArrayList与Vector的区别. Collection ├List │├LinkedList │├ ArrayList │└ Vector │ └Stack └Set. Collection接口Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素  ...

    2、 ArrayListVector的区别,HashMap和Hashtable的 区别答:就 ArrayList与Vector主要从二方面来说. 一.同步性: Vector是线程安全的,也就是说是同步的,而 ArrayList是线程序不安全的,不是同步的二.数据增长:当需要增长时, Vector默认增长为原来一培,  ...

    唯一下载软件下载,软件,下载,共享,共享软件,免费,免费软件,汉化,汉化补丁,游戏,游戏下载,软件教程,软件新闻,软件资讯,操作系统,邮件.

    现在我存放数据库里查询出来的纪录一般用 Vector存放,但是听说用 ArrayList存放要比 Vector好,想问问为什么,是取数据的速度更快还是其他别的原因,谢谢下面是我用 Vector存放纪录的写的函数,如果改成 ArrayList存放该怎么改?public  Vector  ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值