Java数组

数组 及Arrays实用功能

1.问题来源

在学习容器的时候,对容器(集合)和数组在使用时如何选择有较大的问题?

2.数组

数组及其他类容器的区别

  • 效率
  • 类型
  • 保存基本类型的能力

java中时内置数组Array,就是一个简单的线性序列

对于简单的数组

  • 创建并组装他们
  • 通过index访问元素 ,[]
  • 尺寸不能改变
  • 只读成员length

数组的标识符只是一个引用,指向堆中创建的真实对象,数组中的对象保存指向其他对象的引用

对象数组是引用
基本类型数组是保存基本类型的值

java与C/C++的区别

java中的方法是可以直接返回数组元素
c/c++不能返回数组元素,是要返回指向数组的指针,导致难以控制数组的生命周期,导致内存泄漏

3.Arrays的功能

一个重要知识点:

1.快速的复制数组
System.arraycopy() 实现的数组复制要比for-each循环快的多

public static void arraycopy​(Object src, int srcPos, Object dest, int destPos, int length)

需要注意的是

  • 1.基本类型和对象类型都可以复制
  • 2.对象类型的复制是复制了引用,不是对象本身的拷贝(浅拷贝)
  • 3.不会进行自动的装箱、拆箱;src,dest必须具有相同的类型

2.Arrays中的常用static方法

  • 1.equals() ,数组的比较
  • 2.asList() ,将任意序列或数组转换为List容器(适配器模式)
  • 3.fill() ,快速填充数组
  • 4.sort() ,排序
  • 5.binarySearch() ,二分查找
  • 6.toString() ,产生数组的String表示
  • 7.hashCode() ,数组的散列码

3.数组元素的比较 Comparble Comparator

为了满足代码对各种类型的复用性

  • 将保持不变的事物与会发生改变的事物相分离
  • 不变的是通用排序算法,变化的是各种对象的比较形式
  • 使用策略设计模式,将会发生变换的代码封装在类中(策略对象)

java.lang.Comparable接口

  • compareTo()方法

实现方法后,直接Arrays.sort()

Comparator接口

  • compare()方法

实现方法后,Arrays.sort(a,new Comparator())

基本类型无法使用Comparator进行排序

4.容易混淆的概念

  • Array 数组,是居于索引的数据结构。获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的数据

  • List 是一个有序的集合(接口),可以包含重复元素

  • List 的两个实现类 ArrayList,LinkedList

  • ArrayList 是基于数组实现的能够自动增长容量的数组。

  • LinkedList 是双链表,添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList

reference

1.thinking in java 中文版(第四版) 16章数组
2.CyC2018

原文地址:https://www.cnblogs.com/GeekDanny/p/11833836.html