Thinking in Java 学习笔记1 数组

来源:互联网 发布:健身书籍知乎 编辑:程序博客网 时间:2024/06/05 01:18

1.数组的概述

1.在Java中,对这种尺寸固定的低级数组提供了适度的支持,但是这种数组强调的是性能而不是灵活。

2.在用Java编程时,应该优先选用容器而不是数组,除非证明这个程序性能上存在问题,而一般情况下,性能出现问题的程序我们一般都不会知道这个性能问题在哪里。

3.所以可以说,数组除了一般人用不到的性能之外一无是处,以后尽可能的使用容器。“数组最初有关效率的观点总是引人深入,但是随着时间的推移,我们看到了与这种思想背道而驰,向着使用像容器这类高级构件的方向的演化。另外,如果容器能够像某些语言一样内置于语言的内核中,那么编译器会得到更好的优化”。

2.数组的初始化

3.数组的特性

3.1数组的特殊性
        数组和其他容器的区别存在于(效率,类型,保存基本类型的能力)。数组是一种效率最高的存储和访问对象引用序列的方式,但是由于尺寸是固定的,灵活性不好。而arraylist是动态分配的,但是效率比数组 (arraylist的添加是如果原数组满了,就新建一个加长的数组,然后把旧数组复制到新数组里,然后将数组引用指向新数组)。
3.2数组是第一级对象
无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的数组对象,而这个数组对象保存的是其他对象的引用(或者说是其他对象的指针/地址),而数组就是一个对象。length是唯一一个可以访问的属性,【】是访问数组对象的唯一方式。

3.3返回一个数组
假设写一个方法,返回值是一个数组
3.4多维数组
Java实际上没有多维数组,只有一维数组,而多维数组指的是“数组的数组”。

3.5数组和泛型

4.数组的应用功能

  4.1数组复制

   1 使用循环结构 这种方法最灵活。唯一不足的地方可能就是代码较多

 2 使用Object类的clone()方法, 这种方法最简单,得到原数组的一个副本。灵活形也最差。效率最差,尤其是在数组元素很大或者复制对象数组时。

  3 使用Systems的arraycopy这种方法被告之速度最快,并且灵活性也较好,可以指定原数组名称、以及元素的开始位置、复制的元素的个数,目标数组名称、目标数组的位置。

public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)
src:源数组;srcPos:源数组要复制的起始位置;
dest:目的数组;destPos:目的数组放置的起始位置;length:复制的长度

  4 Arrarys类的copyOf()方法与copyOfRange()方法可实现对数组的复制

 int [] a={1,2,3};int [] b=Arrays.copyOf(a, a.length);int [] c=a.clone();int [] d={4,5,6,0,0,0};System.arraycopy(a, 0, d, 0, 3);for (int i : d) {System.out.println(i);


4.2数组填充

Arrays.fill(type[] a,type v)

Arrays.fill(c, 0);for (int i : c) {System.out.println(i);}

4.3数组排序

Arrays.sort(type[] a)


4.4数组查找

int i=Arrays.binarySearch(type[] a,type v)

int i=Arrays.binarySearch(type[] a,int start,int end,type v)


4.5数组比较

compareTo      comparable接口


Arrays.equals(type[] a,type[] b)

4.6数组tostring

String string=Arrays.toString(a);
System.out.println(string);

这里的tostring是已经重写过的,不能与object.tostring生成的hashcode相对比

4.7数组hash码

参数:
a - 要计算其哈希值的数组
返回:
a 数组基于内容的哈希码

4.8数组aslist

     List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");


0 0
原创粉丝点击