Java 集合就是比数组好(为什么有了数组还需要集合?)

Use
an array when you are dealing with data that is:

在处理数据时使用数组:

  • fixed
    in size, or unlikely to grow much
  • 固定的大小,或不可能增长太多
  • suitably
    large (more than 10, 50, 100 elements, depending on the algorithm)
  • 适当大的(超过10,50,100个元素,根据算法)
  • you
    will be doing lots of indexing into it, i.e. you know you will often
    want the third element, or the fifth, or whatever.
  • 你会做大量的索引,即你知道你会经常想要第三个元素,或第五,或任何。

Use
a list for:

使用列表

  • variable
    length data lists .
  • 可变长度数据表
  • that
    are mostly used as a stack or a queue or need to be iterated in its
    entirety
  • 这主要是用来作为一个堆栈或队列或需要进行迭代的全部
  • when
    you do not want to write an expression to derive the ultimate array
    size for the declaration and you do not want to wastefully pick a
    large number
  • 当你不想写一个表达式推导极限数组大小的声明,你不想浪费接大量

Use
a hashmap for:

使用一个HashMap:

  • variable
    length data lists
  • 可变长度数据表
  • that
    need to be indexed like an array would
  • 这需要像一个数组索引

Array
is Fixed in Size. Where , Collection is Grow able in nature.

  1. Array
    stores homogeneous data . Where , Collection store both homogeneous
    as well as Heterogeneous data.数组存储均匀数据。在哪里,集合存储既有均匀也有异构数据。
  2. In
    Array , there are no underlined Data Structures, whereas ,Collection
    has Underlined DS.在数组中,没有带下划线的数据结构,而集合有下划线的。
  3. Array
    is recommended in performance , whereas Collection is
    not.数组中推荐的性能,而集合是不。
  4. Array
    use more memory space compare to Collection.数组使用更多的内存空间比较集合。

如果你这样想,就很容易了:集合
比对象数组好,基本上可以想象。你应该更喜欢
List<Foo>over Foo[]。考虑:

  1. A
    collection can be mutable or immutable. A nonempty array must always
    be mutable.一个集合可以是可变的或不可变的。一个空的数组必须是可变的。
  2. A
    collection can be thread-safe; even concurrent. An array is never
    safe to publish to multiple
    threads.收藏可以是线程安全的,甚至是并发的。一个数组是不安全的发布到多个线程。
  3. A
    collection can allow or disallow null elements. An array must always
    permit null elements.一个集合可以允许或不允许null元素。数组必须始终允许空元素。
  4. A
    collection is type-safe; an array is not. Because arrays "fake"
    covariance, ArrayStoreException can result at
    runtime.集合是类型安全的;数组不。由于数组的“假”的协方差,数组存储异常可以导致在运行时。
  5. A
    collection can hold a non-reifiable type (e.g. List<Class<?
    extends E>> or List<Optional<T>>). With an array
    you get compilation warnings and confusing runtime
    exceptions.一个集合可以持有一个非泛型具体化类型(例如类列表<
    <?或列表<选项>选项>)。使用数组,你可以编译警告和混乱的运行时异常。
  6. A
    collection has a fully fleshed-out API; an array has only
    set-at-index, get-at-index and
    length.一个集合有一个有血有肉的API;数组只有设置指标,在指标和长度。
  7. A
    collection can have views (unmodifiable, subList, filter...). No
    such luck for an array.一个集合可以有意见(不可修改的列表,过滤,……)。没有这样的运气的数组。
  8. A
    list or set‘s equals, hashCode and toString methods do what users
    expect; those methods on an array do anything but what you expect --
    a common source of
    bugs.一个列表或集合的相等,hashCode和toString方法做用户期望;这些方法对数组做任何事,但你所期待的——错误的常见来源。
  9. Because
    of all the reasons above, third-party libraries like Guava won‘t
    bother adding much additional support for arrays, focusing only on
    collections, so there is a network
    effect.由于以上原因,第三方库像石榴不会增加多少额外的支持数组,只注重收藏,所以有一个网络效应。
时间: 2024-10-20 00:23:36

Java 集合就是比数组好(为什么有了数组还需要集合?)的相关文章

JAVA基础笔记(很实用)继承-多态-抽象类-接口-异常-集合-IO-线程-Socket

第七章:Java继承 一.继承的概念 1.一个父类派生出一个子类的机制称为继承. 2.承是重用程序代码的有力手段,当多个类之间存在相同的属性和方法时,可以从这些类中抽象出父类. 3.们只需要在父类中定义这些属性和方法,而子类无须重新定义这些属性和方法,直接从父类继承即可. 4.通过继承,子类就会自动的拥有在父类中定义的属性和方法. 5.两个或多个类的成员中存在一部分相同的情况,通过继承机制,可以利用现有的类来创建新的类. 6.子类不但拥有父类的成员,还可以定义新的成员. 7.可以提高软件的可重用

Java中的日历类/集合类/数学类/正则表达式/数组工具类等的常用方法与基本功能

一. Arrays 针对数组操作的工具类,提供了一些针对数组排序和二分搜索的方法.常用方法:1.public static String toString(int[] a):将int类型的数组转换成字符串.转换成字符串后输出形式: ([元素1,元素2,元素3...]),Arrays在底层重写了toString方法.2.public static void sort(int[] a):对指定的 int 型数组按数字升序进行排序.3.public static int binarySearch(in

java整型数与网络字节序的 byte[] 数组转换关系

java整型数与网络字节序的 byte[] 数组转换关系 工作项目需要在java和c/c++之间进行socket通信,socket通信是以字节流或者字节包进行的,socket发送方须将数据转换为字节流或者字节包,而接收方则将字节流和字节包再转换回相应的数据类型.如果发送方和接收方都是同种语言,则一般只涉及到字节序的调整.而对于java和c/c++的通信,则情况就要复杂一些,主要是因为java中没有unsigned类型,并且java和c在某些数据类型上的长度不一致. 本文就是针对这种情况,整理了j

【疯狂Java讲义学习笔记】【流程控制与数组】

[学习笔记]1.switch语句后的expression表达式的数据类型只能是byte.short.char.int四个整数类型.String(Java 7后才支持)和枚举类型. 2.数组的长度不可变,定义数组时候不能指定数组的长度.为数组分配空间的时候一定要进行初始化,数组初始化的方法有两种,第一种是静态初始化,在数组中直接为每个数组元素赋上初值,另一种是动态初始化,在初始化的时候指定数组的长度,由系统来为每个元素指定初值.注意的是两种初始化不能够同时使用,即既指定数组的长度,同时又为每个元素

java实现原数组根据下标分隔成两个子数组并且在原数组中交换两个子数组的位置

此类实现:输出一行数组数据,根据输入的下标,以下标位置为结束,将原数组分割成两组子数组.并交换两个子数组的位置,保持子数组中的元素序号不变.如:原数组为7,9,8,5,3,2 以下标3为分割点,分割为子数组一:7,9,8,5.和子数组二:3,2.经过交换算法后的结果应为:3,2,7,9,8,5 有两种交换算法<1>前插法:将子数组3,2另存在一个临时数组中,将原数组7,9,8,5,3,2每一位向后移两个位置  再将子数组3,2插入到移动好元素位置的原数组中.<2>逆置法:将原数组7

JAVA学习第三十六课(常用对象API)- 集合框架(四)— Set集合:HashSet集合演示

随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里很多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发常用 HashSet集合 .TreeSet集合 Set集合的元素是不重复且无序 一.HashSet集合 API文档解释:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null 元素. 此类为基本操作提供了稳定性能,注意,此实现不是同步的. 由上可

Java基础知识二次学习--第五章 数组

第五章 数组 时间:2017年4月26日15:11:30~2017年4月26日15:15:54 章节:05章_01节  视频长度:09:30 内容:一维数组的内存分析 心得: Java中数组是引用类型 栈里面存的数组的引用 实际对象在堆内存里面 (C与C++是分配在栈里的) 内存图: 元素为引用数据类型的数组 引用类型的数组如上图 时间:2017年4月26日15:16:22~2017年4月26日15:19:00 章节:05章_02节  视频长度:05:25 内容:数组元素的创建与使用 心得: 首

java学习--基础知识第四天-- Random、数组

今日内容介绍 u Random u 数组 第1章 Random 1.1 产生整数随机数 1.1.1 Random的使用步骤 我们想产生1~100(包含1和100)的随机数该怎么办呢? 我们不需要自己去写算法,因为Java已经为我们提供好了产生随机数的类---Random: 作用: – 用于产生一个随机数 ? 使用步骤(和Scanner类似) – 导包 ? import java.util.Random; – 创建对象 ? Random r = new Random(); – 获取随机数 ? in

Java并发编程(8):多线程环境中安全使用集合API(含代码)

Java并发编程(8):多线程环境中安全使用集合API(含代码)JAVA大数据中高级架构 2018-11-09 14:44:47在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于Vector来说,用来添加和删除元素的方法是同步的.如果只有一个线程与Vector的实例交互,那么,要求获取和释放对象锁便是一种浪费,另外在不必要的时候如果滥用同步化,也有可能会带来死锁.因此,对于更改集合内容的方法,没有一个是同步化的.集合本质上是非多线程安全的,当多个线程与集合交互时