二维数组声明、遍历和容器

一 、二维数组

1.数组:存储多个数据

2.数组特点

  • 有序

  • 数据类型相同

  • 定长(长度设置后不可更改)

2.二维数组:数组中嵌套数组(数组中包含数组)

3.二维数组的定义

声明方式:

 *      数据类型[][] 数组名;
 *      数据类型[] 数组名[];
 *      数据类型 数组名[][];
int[][] num;
int[] num1[];
int num3[][];

4.初始化:赋值

动态初始化: 创建数组对象的时候不赋值,后续赋值

  • 数据类型 数组名 = new 数据类型[一维的长度:][二维的长度:];

  • 一维的长度:外层数组

  • 二维的长度:内层的每一个小数组

  • 数据类型 数组名 = new 数据类型[一维的长度:];

  • 数组名[0] = 内层数组的创建方式(不可以使用简略写法);

    int[][] num=new int[1][1];
    //赋值
    num[0][0]=3;
    //动态创建:自定义二维度的长度
    String[][] str=new String[2][];
    //给二维度设置长度
    str[0]=new String[3];
    //赋值
    str[0][2]="hhh";
    ​

     

静态初始化:创建数组对象的同时赋值

  • 数据类型 数组名 = new 数据类型{{值},{值},{值}...};

    char[][] ch=new char[][] {{'a','b'},{'c','d'}};
    char[][] ch1={{'a','b'},{'c','d'}};

     

5.输出二维数组使用:Arrays.deepToString();

6.遍历方法

普通for:循环嵌套(遍历的数组的索引)

int[][] num= {{1,2},{3,4,5},{6,7}};
        //普通for嵌套循环遍历二维数组
        //外层数组索引
        for(int i=0;i<num.length;i++) {
            for(int j=0;j<num[i].length;j++) {//内层数组索引
                System.out.println(num[i][j]);
            }
        }
System.out.println(Arrays.deepToString(num));//以字符串形式输出

增强for:循环嵌套(数组中的每一个数据值)

int[][] num= {{1,2},{3,4,5},{6,7}};
//增强for嵌套循环遍历二维数组
        for(int[] n:num) {//n代表是容器数据
            for(int m:n) {
                System.out.println(m);
            }
        }

二、容器

容器可以根据数据的个数进行自动变长,可以存储任意类型的数据,但容器中只能存放引用数据类型的数据 。

1.Collection接口: 容器类的父接口

2.Collection接口包含了两个子类:List和Set。

List:有序可重复

List中包含ArrayList子类

Set:无序不可重复

3.ArrayList

  • 底层实现: 可变数组实现,通过数组的拷贝改变数组的长度动态实现可变

  • 优点: 根据索引进行查询效率高

  • 缺点: 进行增删效率低

  • 应用: 大量做查询,少量做增删的时候推荐使用ArrayList

  • 泛型<类型>:强制检查容器中所有数据的数据类型,可以提高程序的安全性和可读性

  • 遍历:

    • 普通for循环

      List<String> n=new ArrayList();
      n.add("美人鱼");
      n.add("千与千寻");
      n.add("流浪地球");
      System.out.println(n);
      //普通for遍历
      System.out.println("-----------for------------");
      for(int i=0;i<n.size();i++) {
                  System.out.println(n.get(i));
              }

       

    • 增强for循环

      List<String> n=new ArrayList();
      n.add("美人鱼");
      n.add("千与千寻");
      n.add("流浪地球");
      System.out.println(n);
      //增强for
      System.out.println("-----------for  each------------");
      for(String m:n) {
                  System.out.println(m);//m代表数值
              }

       

    • 迭代器:只能从头开始,只能查询

    • System.out.println("-----------迭代器------------");
      //迭代器:先获取迭代对象
      Iterator<String> s=n.iterator();
      while(s.hasNext()) {
          System.out.println(s.next());
      }

       

    • 使用List有的列表迭代器:可以逆序遍历,可以进行数据的一些操作

      //列表迭代器
      System.out.println("-----------列表迭代器------------");
      ListIterator<String> s1=n.listIterator();
      while(s1.hasNext()) {
                  System.out.println(s1.next());
      }

4.Vector

Vector与ArrayList很像,都是由数组实现内部存储结构。

区别

  • Vector线程安全,效率较低,ArrayList线程不安全,效率较高,重效率轻安全

  • Vector每次扩容原容量的2倍,没有ArrayList节省空间

5.LinkedList

  • 底层:双向链表实现

  • 优点:增删效率高

  • 缺点:查询效率低

6.Set

Set特点

  • 无序不可重复(无序:存储的顺序和内部真实存放的顺序不同)

  • 都是Collection的子接口

  • 都是存储单个数据值的容器

    package com.set;
    import java.util.HashSet;
    import java.util.Set;
    //Set接口:无序不可重复
    public class TextSet {
        public static void main(String[] args) {
            Set set=new HashSet();
            Set s=new HashSet();
            //添加数据
            set.add("哈哈");
            set.add("呵呵");
            set.add("哈哈");
            System.out.println(set);//不可重复
            s.addAll(set);//将指定容器中的所有数据添加到此容器中
            System.out.println(s);
            //清楚容器中的所有数据
            set.clear();
            System.out.println(set);
            //判断容器是否为空
            System.out.println(s.isEmpty());
            //删除容器中的指定数据
            s.remove("哈哈");
            System.out.println(s);
        }
    }

     

7.Map

Map接口存储的每一个数据都是由一对键值对(key-value)组成。

key:是无序的,不可重复跟Set相似。一个key,只能对应一个value,如果想要对应多个,可以把value存在容器中如果存储的数据的时候,key相同的数据value会覆盖。

value:是无序的,可重复跟Collection相似

Map的遍历方式:

  • keySet() :获取所有的key,返回一个Set集合,然后可以根据key获取value

  • values() :获取所有的value值,返回一个Collection集合

  • entrySet() :返回此映射中包含的映射关系的Set集合

      //遍历
            Map<Integer,String> m=new HashMap();
            m.put(01,"小虎");
            m.put(02,"小米");
            m.put(03,"小康");
            System.out.println(m);
            System.out.println("-------keySet遍历----------");
            Set<Integer> set=m.keySet();
            System.out.println(set);
            for(Integer i:set) {
                System.out.println(m.get(i));
            }
            System.out.println("-------value()遍历----------");
            Collection<String> c=m.values();
            Iterator<String> t= c.iterator();
            while(t.hasNext()) {
                System.out.println(t.next());
            }
            System.out.println("-------entrySet遍历----------");
            Set<Map.Entry<Integer,String>> s2=m.entrySet();
            System.out.println(s2);
            Iterator<Map.Entry<Integer,String>> it2 = s2.iterator();
            while(it2.hasNext()){
                Map.Entry<Integer,String> entry=it2.next();
                System.out.println(entry.getKey()+"--->"+entry.getValue());
        }

     

 

 

发布了6 篇原创文章 · 获赞 0 · 访问量 31
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览