linkin大话数据结构--数组
- 数组概述:如何正确理解数组?数组也是一种类型
数组是多个相同类型数据的组合,实现对这些数据的统一管理。数组属引用类型,数组型数据是对象(Object),数组中的每个元素相当于该对象的成员变量数组中的元素可以是任何数据类型,包括基本类型和引用类型。注意了:1,数组元素的类型是唯一的,即一个数组里只能存储一种数据类型的数据,而不能存储多种数据类型的数据。
2,一旦数组的初始化完成,数组的长度将不能改变。
优缺点:查询快,增删慢(链表,查询慢,增删快)
关于数组元素时引用类型看下图就理解底层了:
- 一维数组声明
维数组的声明方式: type[] var 或 type var[]。推荐使用第一种方式,至少我用的是这种。
Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法
- 数组元素的引用
Java中使用关键字 new 创建数组对象,定义并用运算符 new 为之分配空间后,才可以引用数组中的每个元素;数组元素的引用方式:数组名[数组元素下标]。 数组元素下标可以是整型常量或整型表达式。如a[3] , b[i] , c[6*i];数组元素下标从0开始;长度为n的数组合法下标取值范围: 0 - n-1;如int a[]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2]。每个数组都有一个属性 length
指明它的长度,例如:a.length 指明数组 a 的长度(元素个数)。数组和循环,和集合差不多的也是2种:
public class Linkin
{
public static void main(String[] args)
{
int[] arr = new int[5];
//for循环
for(int i = 0;i<arr.length;i++)
{
System.out.println(arr[i]);
}
//增强的for循环
for (int i : arr) {
System.out.println(i);
}
} }
关于上面的第2种,增强的for循环多说几句:一种使用这种增加的for循环,只是来循环迭代数组里面的元素,并不能改变数组元素的值,所以不要对foreach的循环变量赋值。原理:使用foreach来迭代循环数组的时候,foreach中的循环变量相当于一个临时变量,系统会把数组元素依次赋值给这个临时变量,而这个临时变量并不是数组元素,他只是保存了数组元素的值。代码如下:
public class Linkin
{
public static void main(String[] args)
{
String[] names = new String[3];
names[0] = "Linkin";
names[1] = "park";
names[2] = "binger";
//增强的for循环
for (String name: names) {
System.out.println(name);//是刚开始的初始化的值
name = "huhu";//将上面数组的3个元素依次赋值给临时变量
System.out.println(name);;//临时变量都成了huh了
}
System.out.println(names[0]);//还是原来的linkin
} }
- 数组元素的默认初始化
1:静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统来决定需要数组的长度。
int[] arr1 = new int[]{1,2,3};这种有点繁琐的,建议使用后面这种 int[] arr2 = {1,2,3}。
2:动态初始化:初始化时只指定数组的长度,由系统为数组元素分配初始值。int[] arr = new int[5]。
数组元素的默认初始值:
- 多维数组
intintArray[][] ={{1,2},{2,3},{3,4,5}};
int intArray1[3][2] = {{1,2},{2,3},{4,5}};
//illegal,等号左边不能指定维数
int a[][] = new int[4][5];
int b[][] = new int[3][]
b[0] = new int[2];
b[1] = new int[3];
b[2] = new int[5];
操作数组的工具类:Java.util.Arrays类
此类包含用来操作数组(比如排序和搜索)的各种方法。此类还包含一个允许将数组作为列表来查看的静态工厂。 具体的方法用的时候查API。
asList(T... a) 返回一个受指定数组支持的固定大小的列表。关于这个方法有必要多说几句:JDK1.6中是这么说的:
上面是用了长度可变的参数,并且用了泛型,所以要是引用类型的话,就会分别拆开然后转换到一个list里面去,但是要是是基本类型的话,那么这个基本类型的数组就被当成了一个参数传入了那个list。代码如下:
package tz.web.main; import java.util.Arrays;
import java.util.List;
public class Linkin
{
public static void main(String[] args)
{
int[] array1 = {1,2,3};
String[] array2 = {"1","2","3"};
//基本类型的数组被当成了一个参数,其实他的类型是object
Object array11 = array1;
//编译都报错 cannot convert from int[] to Object[]
//Object[] array12 = array1;
List<int[]> huhu = Arrays.asList(array1);
//引用类型的数组被当成了好多个参数,其实他的类型就是object[]的
Object[] array21 = array2;
List<String> haha = Arrays.asList(array2);
System.out.println(huhu);//[[I@5d0c5d0c]
System.out.println(haha);//[1, 2, 3]
}
}
copyOf(byte[] original, int newLength) 复制指定的数组,截取或用 0 填充(如有必要),以使副本具有指定的长度。
sort(short[] a) 对指定的 short 型数组按数字升序进行排序。
sort(T[] a, int fromIndex, int toIndex,Comparator<? super T> c) 根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。
linkin大话数据结构--数组的更多相关文章
- linkin大话数据结构--Collection和Iterator
linkin大话数据结构--Collection和Iterator Java 集合就像一种容器,可以把多个对象的引用放入容器中.Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系 ...
- linkin大话数据结构--字符串,数组,list之间的互转
在实际开发中,我们经常会用到字符串,字符数组,字符list,当然也会不可避免的进行这3者之间的互相转换. 在使用到Apache和Google下的common包,可以这样子实现: package tz. ...
- linkin大话数据结构--泛型
泛型(Generic) 什么是泛型? java5开始出现的一种对Java语言类型的一种拓展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数类型时指定的类型占位符,就好比方法的形式参数 ...
- linkin大话数据结构--Google commons工具类
package tz.web.dao.bean; import java.util.Arrays; import java.util.Collection; import java.util.List ...
- linkin大话数据结构--Queue
链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必按顺序存储,所以插入和删除速度超 ...
- linkin大话数据结构--List
List:Collection子接口 List是有序的集合,集合中每个元素都有对应的顺序序列.List集合可使用重复元素,可以通过索引来访问指定位置的集合元素(顺序索引从0开始),List集合默认按元 ...
- linkin大话数据结构--apache commons工具类
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动. 一.Commons BeanUtils 说明:针对Bean的一个工具集.由于Bean往往是有一堆ge ...
- linkin大话数据结构--Map
Map 映射关系,也有人称为字典,Map集合里存在两组值,一组是key,一组是value.Map里的key不允许重复.通过key总能找到唯一的value与之对应.Map里的key集存储方式和对应的Se ...
- linkin大话数据结构--Set
Set 集合 Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败. Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法.也 ...
随机推荐
- 使用Python实现贪心算法
题目: 圣诞节来临了,在城市A中,圣诞老人准备分发糖果.现在有多箱不同的糖果,每一种糖果都有自己的价值和重量.每箱糖果都可以拆分成任意散装组合带走.圣诞老人的驯鹿最多只能承受一定重量的糖果.请问圣诞老 ...
- 在React中你真的用对了Ajax吗?
通过AJAX加载初始数据 通过AJAX加载数据是一个很普遍的场景.在React组件中如何通过AJAX请求来加载数据呢?首先,AJAX请求的源URL应该通过props传入:其次,最好在component ...
- 学习总结:工程管理与makefile
工程管理与makefile 一.为什么需要makefile和make 一个工程中的源文件可能很多,按照类型.功能.模块分别放在若干个目录中,为了有效地管理软件工程,更高效地编译整个工程,需要用到mak ...
- 【转载】IdentityServer4 使用OpenID Connect添加用户身份验证
使用IdentityServer4 实现OpenID Connect服务端,添加用户身份验证.客户端调用,实现授权. IdentityServer4 目前已更新至1.0 版,在之前的文章中有所介绍.I ...
- JS 生成唯一数字
如题,在JS中,利用Date.getTime()来生成唯一数字,用于ID function uniqueNumber() { var date = Date.now(); if (date <= ...
- 初入python 用户输入,if,(while 循环)
python 基础 编译型: 一次性将所有程序编译成二进制文件. 缺点:开发效率低,不能跨平台 优点:运行速度快. :c ,c++语言 等等.... 解释行:当程序执行时,一行一行的解释. 优点:开发 ...
- JavaScript拆分字符串并将分割的数据放到数组中
1 2 3 4 5 6 7 var splitArray = new Array(); var string="太平洋.大西洋.印度洋.北冰洋"; var regex = /./; ...
- x+y=xy
有一天,我拿这一本本子给两位同学看,问他们这本本子多少钱,一个说3块,一个说1.5块,但它实际上是4.5块.于是,我们发现,3X1.5=4.5,3+1.5=4.5.那么这样的数有哪些呢? ...
- MVC 统一异常处理
在出现异常时,我们不希望将错语的原因让客户看见,常常会做一个404错误页面,将所有发生的异常都跳至该页面,并把异常信息写在日志中.步骤如下: 1.让我们看看Global.asax页面Applicati ...
- ZipKin的原理的介绍
结构概述 跟踪器(Tracers)存在在你的应用程序中生存,记录时间和关于操作的元数据.他们经常使用库,因此他们的使用对用户是透明的.例如,当它收到一个请求并发送一个响应时,一个感应器(i ...