Array数组优缺点和Array源码分析
通常数组是具有连续内存位置的元素的集合。它是一个数据结构,我们存储类似的元素。
Java语言中提供的数组是用来存储固定大小的同类型元素,因此只能在Java数组中存储固定的元素集合。
Java中的数组是基于索引的,数组的第一个元素存储的索引为:0。
Java Array 优点
代码优化:它使代码优化,可以轻松地检索或排序数据。
随机访问:可以获取任何位于任何索引位置的数据。
Java Array 缺点
大小限制:只能在数组中存储固定大小的元素。
它在运行时不会增长其大 小。 为了解决这个问题,在Java中使用了集合框架。
Java中的数组类型有两种类型的数组分别是一维数组,多维数组。
Java 一维数组
Java中声明一个数组的语法(dataType数据声明类型)
3种声明方式:
dataType[] arr; (or) // 通用方式,首选
dataType []arr; (or) // 效果相同
dataType arr[]; // 效果相同
dataType[] arrayRefVar = new datatype[size]; //实例化1
dataType[] arrayRefVar = {value0, value1, ..., valuek}; //实例化2
Java 多维数组
数据存储在基于行和列的索引(也称为矩阵形式)中
在Java中声明多维数组的语法:
dataType[][] arrayRefVar; (or)
dataType [][]arrayRefVar; (or)
dataType arrayRefVar[][]; (or)
dataType []arrayRefVar[];
实例化
dataType[][] arrayRefVar = new dataType[arraylenght1][arraylenght2];
java.util.Arrays类
此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。
public static int binarySearch(Object[] a, Object key)
用二分搜索法在给定数组中搜索给定值的对象(Byte,Int,Double等)。数组在调用前必须排序好的。如果查找值包含在数组中,则返回搜索键的索引;否则返回 (-(插入点) - 1)。
public static boolean equals(long[] a, long[] a2)
如果两个指定的long型数组彼此相等,则返回true。如果两个数组包含相同数量的元素,并且两个数组中的所有相应元素对都是相等的,则认为这两个数组是相等的。换句话说,如果两个数组以相同顺序包含相同的元素,则两个数组是相等的。同样的方法适用于所有的其他基本数据类型(Byte,Short,Int等)。
public static void fill(int[] a, int val)
将指定的int值分配给指定int型数组指定范围中的每个元素。同样的方法适用于所有的其他基本数据类型(byte,short,int等)。
public static void sort(Object[] a)
对指定对象数组根据其元素的自然顺序进行升序排列。同样的方法适用于所有的其他基本数据类型(byte,short,int等)。
日期时间
Date类支持两种构造函数。
第一种无参构造函数初始化对象new Date()
另外一种有参构造函数,经过的毫秒数new Date(long millisec)
Date类方法
NO | 方法和描述 |
---|---|
1 | boolean after(Date date) 如果调用Date对象包含或晚于指定的日期则返回true,否则,返回false。 |
2 | boolean before(Date date) 如果调用Date对象包含或早于日期指定的日期返回true,否则,返回false。 |
3 | Object clone( ) 重复调用Date对象。 |
4 | int compareTo(Date date) 比较日期的调用对象的值。如果这两个值相等返回0。如果调用对象是早于日期返回一个负值。如果调用对象最迟日期返回正值。 |
5 | int compareTo(Object obj) 操作以相同的compareTo(Date) 如果obj是一个类日期。否则,它会抛出一个ClassCastException。 |
6 | boolean equals(Object date) 如果调用Date对象包含相同的时间及日期指定日期则返回true,否则,返回false。 |
7 | long getTime( ) 返回自1970年1月1日起已经过的毫秒数。 |
8 | int hashCode( ) 返回调用对象的哈希代码。 |
9 | void setTime(long time) 设置所指定的时间,这表示经过时间以毫秒为单位,1970年1月1日从午夜的时间和日期 |
10 | String toString( ) 调用Date对象转换为字符串,并返回结果。 |
日期比较:
使用getTime()函数来获得自1970年1月1日凌晨时,起已经过的毫秒数,然后比较两个对象的值。
使用compareTo()函数,这是由Comparable接口定义和日期执行。
日期格式化:
SimpleDateFormat是一个具体的类,用于格式化和分析日期的语言环境敏感的方式。
SimpleDateFormat先选择任何用户定义的模式为日期时间格式。使用时间模式字符串(日期和时间的格式化编码表)。在这个模式中,所有的ASCII字母被保留为模式字母。
字母 | 描述 | 示例 |
---|---|---|
G | 纪元标记 | AD |
y | 四位年份 | 2017 |
M | 月份 | March or 17 |
d | 一个月的某一日期 | 17 |
h | A.M./P.M. (1~12)格式小时 | 12 |
H | 一天中的小时 (0~23) | 23 |
m | 分钟数 | 24 |
s | 秒数 | 54 |
S | 毫秒数 | 212 |
E | 星期几 | Tuesday |
D | 一年中的某一天 | 251 |
F | 一个月中第几周的周几 | 2 (second Wed. in July) |
w | 一年中第几周 | 40 |
W | 一个月中第几周 | 1 |
a | A.M./P.M. 标记 | PM |
k | 一天中的小时(1~24) | 24 |
K | A.M./P.M. (0~11)格式小时 | 10 |
z | 时区 | Eastern Standard Time |
‘ | 文字定界符 | Delimiter |
“ | 单引号 |
使用printf格式化日期
日期和时间格式用printf方法可以非常轻松地做到。
import java.util.Date;
public class DateDemo {
public static void main(String args[]) {
// 初始化日期对象
Date date = new Date();
// 时间转成字符串输出
String str = String.format("当前日期或时间 : %tc", date );
System.out.printf(str);
}
}
运行结果如下:
当前日期或时间 : 星期三 八月 16 10:24:27 CST 2017