2

虽是读书笔记,但是如转载请注明出处http://segmentfault.com/blog/exploring/
..拒绝伸手复制党


数组为什么特殊

数组和其它容器之间的区别有三方面:效率、编译期类型检查和保存基本类型的能力,但是由于有了泛型容器和自动包装机制,现在最主要的区别就是效率。ArrayList 效率低很多。
数组是一种效率最高的存储和访问对象引用序列的方式。

数组是第一级对象

初始化数组的2种方式:
1. 聚集初始化:

java//aggregate initialization
 BerylliumSphere[] d = { new BerylliumSphere(),
                         new BerylliumSphere(),
                         new BerylliumSphere(),
                         new BerylliumSphere()};
  1. 动态聚集初始化:
java//dynamic initialization
a = new BerylliumSphere[]{ new BerylliumSphere(), new BerylliumSphere()};

可以在任意位置创建和初始化数组对象 e.g.

javahide(new BerylliumSphere[]{ new BerylliumSphere())

返回一个数组

多维数组

new 来分配:int [][][] a = new int[2][2][4];
Arrays.deepToString输出多维数组
数组中构成矩阵的每个向量都可以具有任意的长度 -- 粗糙数组:
[[Sphere 1, Sphere 2], [Sphere 3, Sphere 4, Sphere 5, Sphere 6], [Sphere 7, Sphere 8, Sphere 9, Sphere 10, Sphere 11, Sphere 12, Sphere 13, Sphere 14]]

数组与泛型

创建测试数据

Arrays.fill() 只能用同一个值填充各个位置,或者是填充某个区域
数据生成器
从Generator中创建数组,为了更灵活的创建更有意义的数组。

Arrays实用功能

Arrays 类有一套用于数组的静态方法(所有这些方法对各种基本类型和 Object 类而重载过):
方法说明equals()比较两个数组是否相等deepEquals()用于多维数组比较fill()填充数组sort()数组排序binarySearch()在已经排序的数组中查找元素toString产生数组的 String 表示hashCode()产生数组的散列码asList()接受任意的序列或数组作为其参数,并转换为 List 容器复制对象数组:只是复制了对象的引用——而不是对象本身的拷贝。

数组元素的比较: comparable and comparator

数组排序:Arrays.sort(sa);
使用内置的排序方法,可以对任意的基本类型数组排序;也可以对对象数组排序,只要该对象实现了Comparable接口,或者具有相关联的Comparator:
Java标准库中的排序算法针对正排序的特殊类型进行了优化: 针对基本类型的快速排序;针对对象设计的“稳定归并排序”。所以无需担心排序的性能问,除非确实确定了排序不分是程序效率的瓶颈。

在已排序的数组中查找:Arrays.binarySearch()
int location = Arrays.binarySearch(a, r)
如果需要对没有重复元素的数组排序,可以使用TreeSet(保持排序顺序),或者LinkedHashSet(保持插入顺序)


SecondLife
1.9k 声望252 粉丝

引用和评论

0 条评论