zoukankan      html  css  js  c++  java
  • javaweb学习总结二(静态导入、自动拆装箱、增强for与可变参数)

    一:静态导入
    语法:import static 导入类.成员变量|成员方法
    那么在代码中可以直接使用变量或者方法,而不需要通过类名.来调用

    静态导入:

    1 import static java.lang.System.out;

    那么在代码中直接调用变量:

    1 @Test
    2     //测试静态导入
    3     public void testStaticImport() {
    4         out.println("static import...");
    5     }

    二:装箱或者拆箱
    装箱:将基本数据类型赋值给引用数据类型
    拆箱:将引用数据类型赋值给基本数据类型

    1 @Test
    2     public void testAutoBox() {
    3         Integer i = 1; // 自动装箱 Integer i = new Integer(1);
    4         int j = i; // 自动拆箱 int j = i.intValue();
    5         System.out.println(j);
    6         List list = new ArrayList();
    7         list.add(1); // 这里的1在编译阶段会自动转换为Integer类型
    8         System.out.println(list);
    9     }

    三:增强for循环

    1:增强for循环可以遍历数组或者集合

     1 @Test
     2     // 测试增强for循环
     3     public void testForEnhance() {
     4         // 遍历数组
     5         int[] arr = new int[] { 1, 2, 3 };
     6         for (int i : arr) {
     7             System.out.println(i);
     8         }
     9         // 遍历集合
    10         List<String> list = new ArrayList<String>();
    11         list.add("java");
    12         list.add("php");
    13         for (String s : list) {
    14             System.out.println(s);
    15         }
    16     }

    2:它只能查询不能修改数组或者集合中的内容,如果需要修改容器中的内容,还是要用传统的for循环。

     1 @Test
     2     // 测试增强for循环
     3     public void testForEnhance() {
     4         // 遍历数组
     5         int[] arr = new int[] { 1, 2, 3 };
     6         for (int i : arr) {
     7             i = 10;
     8         }
     9         System.out.println(Arrays.toString(arr));
    10         // 遍历集合
    11         List<String> list = new ArrayList<String>();
    12         list.add("java");
    13         list.add("php");
    14         for (String s : list) {
    15             s = "c++";
    16         }
    17         System.out.println(list);
    18     }

    数组以及集合中的值并没有发生变化。

    3:集合只有实现了Iterable,才能够使用增强for循环,因为for循环的底层还是迭代器

     1 @Test
     2     public void testIterator() {
     3         List<String> list = new ArrayList<String>();
     4         list.add("java");
     5         list.add("php");
     6         // 使用迭代器
     7         Iterator<String> it = list.iterator();
     8         while (it.hasNext()) {
     9             String str = it.next();
    10             System.out.println(str);
    11         }
    12         // 使用for循环
    13         for (String str : list) {
    14             System.out.println(str);
    15         }
    16     }

    4:使用for循环遍历set集合,但是不能遍历map集合,因为map集合没有实现Iterator接口

    但是我们可以将map集合转化为set集合

    遍历set集合:

     1 @Test
     2     public void testIteratorSet() {
     3         Set<String> set = new HashSet<String>();
     4         set.add("1");
     5         set.add("2");
     6         // 迭代器遍历
     7         Iterator<String> it = set.iterator();
     8         while (it.hasNext()) {
     9             String str = it.next();
    10             System.out.println(str);
    11         }
    12         // for循环遍历
    13         for (String str : set) {
    14             System.out.println(str);
    15         }
    16     }

    遍历map集合:

    a:keyset的方式

     1     @Test
     2     public void testIteratorMap() {
     3         Map<Integer, String> map = new HashMap<Integer, String>();
     4         map.put(1, "orange");
     5         map.put(2, "apple");
     6         map.put(3, "banana");
     7         // 使用迭代器
     8         Set<Integer> set = map.keySet();
     9         Iterator<Integer> it = set.iterator();
    10         while (it.hasNext()) {
    11             Integer key = it.next();
    12             String value = map.get(key);
    13             System.out.println(key + "=" + value);
    14         }
    15         System.out.println("...........");
    16         // 使用for循环
    17         for (Integer i : map.keySet()) {
    18             Integer key = i;
    19             String value = map.get(key);
    20             System.out.println(key + "=" + value);
    21         }
    22     }

    b:entryset的方式

     1     @Test
     2     public void testIteratorMap2() {
     3         Map<Integer, String> map = new HashMap<Integer, String>();
     4         map.put(1, "orange");
     5         map.put(2, "apple");
     6         map.put(3, "banana");
     7         // 使用迭代器
     8         Set<Entry<Integer, String>> set = map.entrySet();
     9         for (Entry<Integer, String> en : set) {
    10             Integer key = en.getKey();
    11             String value = en.getValue();
    12             System.out.println(key + "=" + value);
    13         }
    14         System.out.println("................");
    15         // 使用增强for循环
    16         for (Entry<Integer, String> en : map.entrySet()) {
    17             Integer key = en.getKey();
    18             String value = en.getValue();
    19             System.out.println(key + "=" + value);
    20         }
    21     }

    5:HashMap类底层的排序是hashcode,不是有序的,这时我们可以使用LinkedHashMap类

    可以按照我们放入的顺序取出元素。

    四:可变参数

    方法名(类型 ...变量名称){

    方法体;

    }

     1 @Test
     2     public void testVariableArgs() {
     3         int sum = getSum(1, 2, 3, 4);
     4         System.out.println("sum=" + sum);
     5     }
     6 
     7     public int getSum(int... nums) {
     8         int sum = 0;
     9         for (int i : nums) {
    10             sum += i;
    11         }
    12         return sum;
    13     }

    可变参数注意点:

    我们可以把可变参数看做一个数组:

    1 @Test
    2     public void testVariableArgs2() {
    3         int[] arr = new int[] { 1, 2, 3, 4 };
    4         System.out.println(getSum(arr));
    5     }

     

  • 相关阅读:
    【NOI2015】品酒大会 SAM
    4566: [Haoi2016]找相同字符 SAM
    3709: [PA2014]Bohater 贪心
    1925: [Sdoi2010]地精部落 dp, 抖动子序列
    4205: 卡牌配对 最大流+建图技巧
    留言板
    self-introduction
    最近比赛
    STOI补番队胡策
    BZOJ 3503: [Cqoi2014]和谐矩阵( 高斯消元 )
  • 原文地址:https://www.cnblogs.com/warrior4236/p/5701296.html
Copyright © 2011-2022 走看看