Thinking In Java 学习笔记 16.数组

数组是一种效率最高的存储和随机访问对象引用序列的方式。
数组标识符只是一个引用。
可以返回一个数组
数组存储在Java堆的连续内存空间,所以如果你创建一个大的索引,你可以有足够的堆空间直到抛出OutofmemoryError,因为请求的内存大小在连续的内存空间不可用
数组与泛型 不能实例化具有参数化类型的数组
public T[] f() {} 可以参数化数组本身的类型
List<String>[] ls; 允许创建对泛型数组的引用
可以创建非泛型数组,然后转型。
复制数组 System.arraycopy()
数组的比较 equals()用于比较整个数组,元素个数相同,对应位置元素相等
数组排序
concurrent源码 HashMap源码
ArrayList内部封装了一个Object类型的数组, ArrayList一个基于索引的集合,它是作为数组的备选方案。ArrayList的优点是可以改变容量大小,只需要创建个更大的数组然后拷贝内容到新数组,但你不能改变数组的大小。
ArrayList非线程安全

1)数组的优缺点
 数组较容器,最大的优点就是效率。在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式,数组就是一个简单的线性序列,这使得元素访问非常快速,无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个(数组)对象用以保存指向其他对象的引用。数组是第一级对象,可以作为数组初始化语句的一部分隐式地创建此对象,或者用New表达式显示地创建。
    数组的优点是效率高,但为此,所付出的代价就是数组对象的大小被固定。
2)数组与集合的映射关系(结合泛型理解)
几乎所有的集合都是基于数组来实现的.
集合是对数组做的封装,所以,数组永远比任何一个集合要快 但任何一个集合,比数组提供的功能要多 一:数组声明了它容纳的元素的类型,而集合不声明。这是由于集合以object形式来存储它们的元素。 二:一个数组实例具有固定的大小,不能伸缩。集合则可根据需要动态改变大小。 三:数组是一种可读/可写数据结构,没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方法,以只读方式来使用集合。该方法将返回一个集合的只读版本。
3)数组中存储的是对象吗?
数组中存储基本数据类型和对象的引用
4)Arrays有哪些功能
java.util.Arrays有一套用于数组的static实用方法。
equals():比较两个数组是否相等,两个数组内容相同,且数组大小也相同才返回true。
fill():用一个值填充数组。
sort():对数组进行排序, 基本类型用快速排序,针对对象用稳定归并排序。
binarySearch():在排好序中的数组中进行二分查找,找到元素则返回元素的索引,否则返回负数。数组中若包含重复元素,无法确保找到的是哪一个。
asList():由数组得到一个list, 但是这个List的实现类是java.util.Arrays.ArrayList这个类(而不是java.util.ArrayList),它的内部保存了数组的引用,修改了数组的值,list的值也会改变。对list做add、remove操作会抛出UnsupportedOperationException异常, 因为它本质还是一个大小不可变的数组
System.arraycopy():比for循环更高效的数组复制方法,它是浅拷贝,如果复制对象数组,只会复制对象的引用。
对于元素不是基本类型的对象,用equals()和sort()方法时,需重写元素的equals()方法和实现Comparable接口。
5)简述数组的使用场景
1、数据比较少;
2、经常做的运算是按序号访问数据元素;
3、数组更容易实现,任何高级语言都支持;
4、构建的线性表较稳定。

猜你喜欢

转载自blog.csdn.net/jjj1299894209/article/details/80907774