【问题标题】:Why does java support both arrays and collections? [closed]为什么java同时支持数组和集合? [关闭]
【发布时间】:2019-03-27 06:08:17
【问题描述】:

在 Python 中,我使用列表来存储集合,而在 Java 中,有不止一种选择。 如果java只支持Collections,会不会有问题?

【问题讨论】:

标签: java arrays collections


【解决方案1】:

数组是固定大小的数据类型,受 JVM 支持并提供随机访问等特性。

Collection 与数组不同。还有像Sets 这样的集合,它们具有不同的属性。一般来说,如果您想要一个动态可增长列表,请使用ArrayList

【讨论】:

    【解决方案2】:

    java中的数组和集合有很多区别:

    1. 根据我们的要求,集合本质上是可增长的。我们可以增加或减少尺寸。而数组的大小是固定的,一旦我们创建了一个数组,我们就不能根据我们的要求增加或减少。

    2. 在内存方面:更推荐使用集合,而在性能方面:更推荐使用数组。

    3. 数组只能包含同质元素,但集合可以同时包含同质和异质元素。

    4. 数组没有现成的方法,但集合有现成的数据结构和方法。

    5. 数组可以同时保存基元和包装对象,但集合只能保存对象。

    以下是java中的一些集合:

    import java.util.Map;
    import java.util.Set;
    import java.util.SortedSet;
    import java.util.TreeSet;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.LinkedHashSet;
    import java.util.LinkedList;
    import java.util.List;
    
    public class CollectionExamples {
       public static void main(String[] args) {
    
          List LinkedList = new LinkedList();
          LinkedList.add("Linked List Position 1");
          LinkedList.add("Linked List Position 2");
          LinkedList.add("Linked List Position 3");
          LinkedList.add("Linked List Position 4");
          displayAll(LinkedList);
    
          List arrayList = new ArrayList();
          arrayList.add("Array List Position 1");
          arrayList.add("Array List Position 2");
          arrayList.add("Array List Position 3");
          arrayList.add("Array List Position 4");
          displayAll(arrayList);
    
          Set hashSet = new HashSet();
          hashSet.add("Hashset Position 1");
          hashSet.add("Hashset Position 2");
          hashSet.add("Hashset Position 3");
          hashSet.add("Hashset Position 4");
          displayAll(hashSet);
    
          SortedSet treeSet = new TreeSet();
          treeSet.add("TreeSet Position 1");
          treeSet.add("TreeSet Position 2");
          treeSet.add("TreeSet Position 3");
          treeSet.add("TreeSet Position 4");
          displayAll(treeSet);
    
          LinkedHashSet linkedHashSet = new LinkedHashSet();
          linkedHashSet.add("linkedHashSet Position 1");
          linkedHashSet.add("linkedHashSet Position 2");
          linkedHashSet.add("linkedHashSet Position 3");
          linkedHashSet.add("linkedHashSet Position 4");
          displayAll(linkedHashSet);
    
          Map hashMap = new HashMap();
          hashMap.put("hashMapKey1", "hashMapValue1");
          hashMap.put("hashMapKey2", "hashMapValue2");
          hashMap.put("hashMapKey3", "hashMapValue3");
          hashMap.put("hashMapKey4", "hashMapValue4");
          displayAll(hashMap.keySet());
          displayAll(hashMap.values());
    
       }
       static void displayAll(Collection col) {
          Iterator itr = col.iterator();
          while (itr.hasNext()) {
             String str = (String) itr.next();
             System.out.println(str);
          }
          System.out.println();
       }
    }
    

    【讨论】:

    • 您的第 2 点没有多大意义,集合通常比数组更占用内存(并且通常集合使用数组作为它们的构建块)。
    • 数组的大小是固定的,但集合的大小是动态的。这就是集合在内存方面优于数组的原因。阅读此以获取更多信息:dzone.com/articles/…,而从性能的角度来看,数组比集合更受青睐,请阅读:stackoverflow.com/questions/13910470/…
    • 虽然您是对的,但集合更灵活,但大多数集合都建立在数组之上这一事实几乎使集合在某种程度上“更好”的内存这一论点无效。
    【解决方案3】:

    集合提供数组所做的一切,但更多,但有一个例外。 性能

    看看ArrayList,它是数组的集合版本。

    ArrayList 仅支持对象,不支持基元。如果您想为要添加的每个值创建一个整数数组列表,则必须将其自动装箱为整数,这在性能上会产生很大的开销。

    如果您只需要一个简单的数据结构来存储一些您不需要在性能方面受到影响的东西。但是如果你需要做一些额外的事情,比如动态调整大小的数组或集合,java 通过为你提供集合来支持你

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      • 1970-01-01
      相关资源
      最近更新 更多