2021-07-26(数组,集合)

1、数组

数组是最为常见的一种数据结构。

效率最高的存储和访问元素的方式。

数组是将一些数据按照线性顺序连续存储的序列。

定义(声明)格式:元素类型[]数组名称;

        int[] array11; // 更为符合原理。

        元素类型可以是基本数据类型或引用类型

        String[]  array13;

        T0501Array[] array14;

第一种初始化,数组元素的初值为0

定义后再赋值,第三种初始化方法是不可行的(int [] array23={1,2,3,4,5})

1、基本特点

        1-元素类型遵循数组类型(基本数据类型和引用类型都可)

         2-初始化赋值后数组长度固定不变。

        null是引用类型变量未赋值时的默认值

        数组变量一定是引用类型

2、数组遍历

        1-通过下标索引访问遍历

        遍历时注意数组越界

int[] arr={1,2,3,4,5};

for(int  i=0;i<arr.length;i++){
    System.out.println(arr[i]);

}

        2-加强for each遍历

        遍历的效率更高

int[] arr={1,2,3,4,5};

for(int i:arr){
    System.out.println(i);
}

EX长度为10 的double数组,随即生成元素,范围为30-50

@Test
	public void test01() {
		int[] arr=new int[10];
		Random ran=new Random();
		for(int i=0;i<arr.length;i++) {
			arr[i]=ran.nextInt(10);
		}
		print(arr);
		max(arr);
		exchange(arr);
		haveFive(arr);
		
	}

public void f1() {
    for (int i = 0; i < a2.length; i++) {
        a2[i]++;// a2[i]=a2[i]+1; 
        String s = "a1["+ i+"]="+ a1[i];
        s += "\ta2["+i+"]="+ a2[i];
        s += "\ta3["+ i + "]=”+ a3[i];
        System. out .println(s);
}
//根据运行结果,发现两个数组的值相同,
//而代码中只是对a2数组的值进行了修改,
//但a1数组的值也随之改变了?
//原因:将数组a1的内存地址赋给了数组a2,
//所以两个数组内存中指向同一个地址,
//改变数组a2的值也相当于改变了数组a1的值。
//引用类型变量,实质上存储的是指向内存中的个地址,Java中称之为引用

引用变量参数传递后,在数组内对参数再进行new或者重新赋值,就会是一个新的地址。

@Test
	public void test01() {
		String name =new String ("bes");
		char[] product= {'d','x','p'};
		Integer i=10;
		change(name,product,i);
		System.out.println(name+"  "+new String(product)+"  "+i);
	}
	
	public void change(String name,char[] product,Integer i) {
		name="Change";
		i=100;
		product[1]='a';
	}

2、二维数组

        数组分为一维数组,二维数组和多维数组

声明:

        int[][] array;

        int   array[][];

        int [] array[];

初始化;

        int[][] arr=new int[2][3];

        int[][] arr=new int[][]{{1,2,3},{3,4,5}};

        int [][] arr={{1,2,3},{3,4,5}};

        特殊:
                int[][] arr=new int[2][];

                int[]    arr1=arr0;

                  int[][] arr=new int[][]{};

       3、System中的数组方法

        arraycopy(来源数组名称,来源数组起始位置,目的数组的名称,目的数组的起始位置,来源数组中需要复制元素的个数长度)

        Arrays.copyOf(原始数组,复制的元素长度)

2、算法(排序和查找)

冒泡排序

插入排序

快速排序集合

3、集合

<> 表示泛型

集合可以扩展长度

ArrayList默认原始容量为10,,扩容倍数为1.5倍

使用foreach进行循环遍历

Vector 线程安全的

Collection(工具类)用于集合,

Hashset:

没有索引,不重复

TreeSet:

元素按照自然顺序(或者自定义顺序)排序,元素不可重复

HashMap:

        实现原理

        JDK7及以前, HashMap底层基于数组(Entry数组)和链表实现,计算hash时发生hash冲突将该节点以链表形式存储,当hash冲突过多会导致单个链表过长,查找节点时将耗费0(n)的查找时间。

        JDK8:底层基于数组(Node数组)、链表、红黑树实现,当同- hash值的节点数超过阈值(8),链

表结构将会被转换为红黑树进行数据存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值