JavaSE_数组_2维数组+数组转集合

二维数组定义

import org.junit.Test;
public class Array_2 {
	@Test
	public void method4() {
		//二维数组的遍历
		int[][] arr={{0,1,2},{3,4,5,6},{7,8,9}};
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr[i].length; j++) {
				int value =arr[i][j];
				System.out.print(value);
			}
			System.out.println();
		}
		/*
		012
		3456
		789*/
	}
	@Test
	public void method3() {
		// 第3种定义方式
		int[][] arr={{0,1,2},{3,4,5,6},{7,8,9}};
		for (int i = 0; i < arr.length; i++) {
			int[] temp = arr[i];
			for (int j = 0; j < temp.length; j++) {
				int value = temp[j];
				System.out.print(value);
			}
			System.out.println();
		}
	}
	@Test
	public void method2() {
		// 2维数组第2种初始化!
		int[][] arr=new int[3][2];
		System.out.println(arr.length);//2维数组中的1维数组的个数! 3
		System.out.println(arr[0].length);//2维数组中下标为0的1维数组的长度! 2
	}
	@Test
	public void method1() {
//		int[] a1=new int[3];下面是第1种定义方式,指定2维和1维的大小
		int[][] arr=new int[3][2];//3个1维数组,每个大1维数组中还有个小1维数组,当中有2个int元素
		System.out.println(arr);//[[I@1615a1f
		System.out.println(arr[0]);//[I@a23d38
		System.out.println(arr[0][0]);//0 因为定义int[i][j],所以初始值是0
		
//		下面是第2种定义方法,仅明确有3个1维数组,但每个1维中的数据并未初始化
		int[][] arr2=new int[3][];//3个1维数组,每个1维数组长度不确定
		System.out.println(arr2);//[[I@63ae08
		System.out.println(arr2[0]);//null,每个1维数组对象:默认初始化为null
//		System.out.println(arr2[0][0]);//NullPointerException
	}
}

数组转集合

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public class ArraysDemo {
	@Test
	public void method7() {
		//集合转数组,注意size()
//		java.util 		接口 Collection<E>的方法:
//			<T> T[] toArray(T[] a)返回包含此 collection 中所有元素的数组;
//			返回数组的运行时类型与指定数组的运行时类型相同
        List<String> list=new ArrayList<String>();
        list.add("香菱");
        list.add("鸳鸯");
        list.add("袭人");
        String[] str=list.toArray(new String[2]);//这个自动扩容
        System.out.println(str);//[Ljava.lang.String;@91fa78
        System.out.println(str.length);//自动扩容,本来是2,现在是3
        System.out.println(Arrays.toString(str));//[香菱, 鸳鸯, 袭人]
        
        String[] str3=list.toArray(new String[list.size()]);//建议用这个,大小恰好!
        System.out.println(Arrays.toString(str3));//[香菱, 鸳鸯, 袭人]
        
        String[] str5=list.toArray(new String[5]);//多的空位会自动填充null
        System.out.println(Arrays.toString(str5));//[香菱, 鸳鸯, 袭人, null, null]
        
    }
    @Test
    public void method6() {
        // 注意Integer[]与method5,int[]进行区分
        Integer[] arr1={3,1,4,5,8};
        List<Integer> list=Arrays.asList(arr1);
        System.out.println(list);//[3, 1, 4, 5, 8]
        System.out.println(list.size());    //5
    }
    @Test
    public void method5() {
        // 强烈注意!!!基本数组类型的数组,会作为一个整体存入到List 
        int[] arr={3,1,4,5,8};
//        List list=Arrays.asList(arr1);
        List<int[]> list=Arrays.asList(arr);
        System.out.println(list);//[[I@1d22104]
        System.out.println(list.size());//1个元素,该元素是一个数组地址
    }
    @Test
    public void method4() {
        //用新办法查找数组中的元素,将数组转成List集合,使用集合的方法
        //注意,这样的集合只支持查询,不支持增删改
        String[] str={"林黛玉","薛宝钗","史湘云","妙玉"};//注意数组长度不可变
        List<String> list=Arrays.asList(str);
        System.out.println(list.contains("妙玉"));//true
        System.out.println(list.contains("晴雯"));//false
        System.out.println(list);//[林黛玉, 薛宝钗, 史湘云, 妙玉]
//        list.add("袭人");//UnsupportedOperationException();
//        list.remove(0);//UnsupportedOperationException();
//        list.clear();//UnsupportedOperationException();
    }
    @Test
    public void method3() {
        // 用老办法查找数组中的元素,遍历!还是自己写的!
        String[] str={"林黛玉","薛宝钗","史湘云","妙玉","晴雯"};
        boolean result=myContains(str,"晴雯");
        System.out.println(result);//true
        result=myContains(str,"宝玉");
        System.out.println(result);//false
    }
    public boolean myContains(String[] str, String key) {
        // 遍历查找元素是否存在!
        for (int i = 0; i < str.length; i++) {
            if (str[i].equals(key)) {
                return true;
            }
        }
        //
        return false;
    }
    public void method2() {
/*        public <T> List<T> asList(T... a)
        返回一个受指定数组支持的固定大小的列表。
        (千万注意:对返回列表的更改会“直接写”到数组。)
        此方法同 Collection.toArray() 一起,充当了
        基于数组的 API 与基于 collection 的 API 之间的桥梁。*/
        
    }
    @Test
    public void method1() {
        // Arrays.toString(arr1)
        int[] arr1={3,2,5,7,8};
        System.out.println(arr1.toString());
        //[I@113b44d   [代表是数组  I代表是int类型 @后面接的是地址
        System.out.println(Arrays.binarySearch(arr1, 3));
        //0  工具类的二分查找方法, 返回第2个参数在第1个参数中的位置(从0开始算)
        System.out.println(Arrays.toString(arr1));
        //[3, 2, 5, 7, 8] 工具类的方法,将数组成员用逗号+空格相连,并用中括号包裹起来
        String str=myToString(arr1);
        System.out.println(str);//[3,2,5,7,8]
    }
    //自定义将数组成员相连
    // 数组toString的经典实现!
    public String myToString(int[] a) {
            if (a == null)
                return "null";
            int iMax = a.length - 1;
            //下面是健壮性判断
            if (iMax == -1)
                return "[]";
            StringBuilder b = new StringBuilder();
            b.append('[');
            for (int i = 0; ; i++) {//中间省略条件判断,提高效率!
                b.append(a[i]);
                if (i == iMax)
                    return b.append(']').toString();
                b.append(",");
            }
    }
}









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值