二维list的使用(java)

二维list的使用(java)

前言:

想必大家对int[ ] [ ]这样的二维数组的初始化,赋值,遍历已经很熟悉了,但java中的二维list就很少能接触到。但遇到了也不慌,接下来就对二维的list深入使用。

初始化:

先导入java.util.ArrayList和java.util.List这两个包

(这里使用Integer类型做示范,String类型也可,其它类型有些适用)

这里主要推荐两种写法:(都差不多)

一:直接add一个List

List<List<Integer>> list = new ArrayList<List<Integer>>();//初始化
List one = new ArrayList();
List two = new ArrayList();
one.add(1);
one.add(2);
two.add(4);
two.add(5);
list.add(one);
list.add(two);

二:{{}}的方法

List one = new ArrayList();
List two = new ArrayList();
one.add(1);
one.add(2);
two.add(4);
two.add(5);
List<List<Integer>> list = new ArrayList<List<Integer>>(){{
       add(one);
       add(two);
}};

当然还有其它的初始化方法,这里写出了比较常用的。

重点来了!!

遍历:

一:普通的for

for (int i = 0; i < list.size(); i++) {
    for (int j = 0; j < list.get(i).size(); j++) {
        System.out.print(list.get(i).get(j) + " ");
    }
    System.out.println();
}

不必多说:

.size() .get()都是list内置的函数。

二:进阶的for

for(List list0 : list){
    for(Object list1 : list0){
        System.out.print(list1 + " ");
    }
    System.out.println();
}

另外一种更好的写法:(养成习惯,把类型都给加上)

for(List<Integer> list0 : list){
    for(Integer list1 : list0){
        System.out.print(list1 + " ");
    }
    System.out.println();
}

for-each循环,这也没啥好说的。

三:使用迭代器

Iterator iterator = list.iterator();
while (iterator.hasNext()) {//迭代器一般都使用while
    List<Integer> t = new ArrayList<>();
    t = (List<Integer>) iterator.next();
    Iterator iterator1 = t.iterator();
    while (iterator1.hasNext()) {
        System.out.print(iterator1.next() + " ");
    }
    System.out.println();
}

要导入java.util.Iterator包,.next() .hasNext()都是内置函数(不懂建议看官方文档)

个人感觉:其实使用迭代器还是c++(.end())用得方便。

四:扩展(将二维list转换为二维数组)

使用 toArray() 方法:

注意:这里的 T 只能是基本数据类型的包装类或者引用类型 ,如 Integer ,String 等,而不是 int 等基本数据类型

<T> T[] toArray(T[] a);
Integer[][] res = new Integer[list.size()][];// 存放转换结果的 二维数组
for (int i = 0; i < res.length; i++) {
    res[i] = list.get(i).toArray(new Integer[list.get(i).size()]);
}

for (int i = 0; i < res.length; i++) {//普通输出
    for (int j = 0; j < res[i].length; j++) {
        System.out.print(res[i][j] + " " );
    }
    System.out.println();
}

直接转换:

Integer[][] res = new Integer[list.size()][];// 存放转换结果的 二维数组
for(int i = 0; i < res.length; i++){ // 遍历二维数组
    res[i] = new Integer[list.get(i).size()]; // 初始化第二维
    for(int j = 0; j < list.get(i).size(); j++){ // 将list中的值赋给数组
        res[i][j] = list.get(i).get(j);
    }
}

for (int i = 0; i < res.length; i++) {//普通输出
    for (int j = 0; j < res[i].length; j++) {
        System.out.print(res[i][j] + " " );
    }
    System.out.println();
}

以上遍历输出结果都为下图所示:

在这里插入图片描述

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值