Arrays


Why arrays are special

  • There are three issues that distinguish arrays from other types of containers: efficiency, type, and the ability to hold primitives.
  • The cost of this speed is that the size of an array object is fixed and cannot be changed for the lifetime of that array.
  • You should generally prefer an ArrayList to an array.
  • You’ll get a RuntimeException if you exceed the bounds, indicating a programmer error.
  • Arrays are superior to pre-generic containers because you create an array to hold a specific type.

Arrays are first-class objects

  • The array identifier is actually a reference to a true object that’s created on the heap. This is the object that holds the references to the other objects.
  • length member that tells you how many elements can be stored in that array object.

Returning an array

  • Returning an array is just like returning any other object—it’s a reference.
  • The garbage collector takes care of cleaning up the array when you’re done with it, and the array will persist for as long as you need it.

Multidimensional arrays

  • Each vector in the arrays that make up the matrix can be of any length.
  • The Arrays.deepToString( ) method works with both primitive arrays and object arrays.

Arrays and generics

  • You cannot instantiate arrays of parameterized types.
  • Erasure removes the parameter type information, and arrays must know the exact type that they hold, in order to enforce type safety.
  • You can parameterize the type of the array itself.
  • The compiler won’t let you instantiate an array of a generic type. However, it will let you create a reference to such an array.
  • Although you cannot create an actual array object that holds generics, you can create an array of the non-generified type and cast it.
  • A generic container will virtually always be a better choice than an array of generics.

Creating test data

Arrays.fill()

  • Since you can only call Arrays.fill( ) with a single data value, the results are not especially useful.

Data Generators

  • If a tool uses a Generator, you can produce any kind of data via your choice of Generator.

Array Utilities

  • There are six basic methods in Arrays: equals(), fill(), binarySearch(), sort(), toString(), hashCode().

Copying an array

  • The Java standard library provides a static method, System.arraycopy( ), which can copy arrays.
  • If you copy arrays of objects, then only the references get copied—there’s no duplication of the objects themselves.

Comparing arrays

  • To be equal, the arrays must have the same number of elements, and each element must be equivalent to each corresponding element in the other array, using the equals( ) for each element.

Array element comparisons

  • You hand a Strategy object to the code that’s always the same, which uses the Strategy to fulfill its algorithm.
  • sort( ) casts its argument to Comparable.

Sorting an array

  • The sorting algorithm that’s used in the Java standard library is designed to be optimal for the particular type you’re sorting—a Quicksort for primitives, and a stable merge sort for objects.

Searching a sorted array

  • If you try to use binarySearchC ) on an unsorted array the results will be unpredictable.
  • Otherwise, it produces a negative value representing the place that the element should be inserted if you are maintaining the sorted array by hand.
  • If an array contains duplicate elements, there is no guarantee which of those duplicates will be found.

Thinking in Java——笔记(16)的更多相关文章

  1. Java笔记16:多线程共享数据

    一.Thread实现 public class ThreadDemo4 { publicstaticvoid main(String[] args) { new ThreadTest4().start ...

  2. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  3. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  4. Java笔记3-for,switch循环,格式化输出,随机数

    大纲:一.分支结构 if switch二.循环 for while do while break continue三.格式化输出 [printf] int score = 100; String na ...

  5. java笔记00-目录

    --2013年7月26日17:49:59 学习java已久,趁最近有空,写一个总结: java笔记01-反射:

  6. Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行

    Ext.Net学习笔记16:Ext.Net GridPanel 折叠/展开行 Ext.Net GridPanel的行支持折叠/展开功能,这个功能个人觉得还说很有用处的,尤其是数据中包含图片等内容的时候 ...

  7. SQL反模式学习笔记16 使用随机数排序

    目标:随机排序,使用高效的SQL语句查询获取随机数据样本. 反模式:使用RAND()随机函数 SELECT * FROM Employees AS e ORDER BY RAND() Limit 1 ...

  8. golang学习笔记16 beego orm 数据库操作

    golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...

  9. 转 Java笔记:Java内存模型

    Java笔记:Java内存模型 2014.04.09 | Comments 1. 基本概念 <深入理解Java内存模型>详细讲解了java的内存模型,这里对其中的一些基本概念做个简单的笔记 ...

随机推荐

  1. Opera Browser -- Access Restricted Sites using Free VPN /Free VPN Services List

    Opera Browser  -- Access Restricted Sites using Free VPN: currently the feature is available in Oper ...

  2. Android错误

    1. [2016-09-16 14:25:45 - X_Card] Found 2 versions of android-support-v4.jar in the dependency list, ...

  3. .NET 委托

    委托类型定义      C#编译器处理委托时,先自动产生一个派生自System.MulticastDelegate的密封类.这个类与它的基类System.Delegate一起为委托提供必要的基础设施, ...

  4. AngularJS 表格

    ng-repeat 指令可以完美的显示表格. 使用 angular 显示表格是非常简单的: <!DOCTYPE html> <html> <head> <me ...

  5. 开放封闭原则(Open Closed Principle)

    在面向对象的设计中有很多流行的思想,比如说 "所有的成员变量都应该设置为私有(Private)","要避免使用全局变量(Global Variables)",& ...

  6. way.js - 轻量级、持久化的双向绑定JS库

    AngularJS的双向绑定一直为人称道,但使用AngularJS需要对页面组件化,学习成本还是很高的. 本文源自 https://github.com/gwendall/way.js 边学边译. 使 ...

  7. Python协程:从yield/send到async/await

    这个文章理好了脉落. http://python.jobbole.com/86069/ 我练 习了一番,感受好了很多... Python由于众所周知的GIL的原因,导致其线程无法发挥多核的并行计算能力 ...

  8. 日期与时间戳相互转化(js)

    function datetime_to_unix(datetime){     var tmp_datetime = datetime.replace(/:/g,'-');     tmp_date ...

  9. Knockout.js随手记(1)

    新的开始,knockout.js 1.首先去http://knockoutjs.com/index.html下载knockout.js,最新的版本是2.3 2.知道什么是Knockout?它是个Jav ...

  10. CodeForces 13E 分块

    题目链接:http://codeforces.com/problemset/problem/13/E 题意:给定n个弹簧和每个弹簧初始的弹力a[].当球落在第i个位置.则球会被弹到i+a[i]的位置. ...