HOME/Articles/

2020-10-18-Java基础问题记录

Article Outline

Java基础问题记录--BabyYang

写逻辑这么久才发现自己是面向百度编程

基础的一些java用法都没记住真的太菜啦

java标准输入

基础的Scanner输入

Scanner sc = new Scanner(System.in);
sc.nextLine();
sc.next();
sc.nextInt();

参考:https://blog.csdn.net/cy973071263/article/details/88908810

格式化输出

double d = 12345.678;
//直接截断
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(d));
//四舍五入
System.out.println(String.format("%.2f", d));
System.out.println((double) Math.round(d * 100) / 100)
// output: 
// 12345.67
// 12345.68
// 12345.68

hashmap遍历

  • hashmap遍历不会真的太蠢惹,遍历有超多方法

  • 首先是定义 :

    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
  • 方法1 for-each 迭代 entries

    这是最常见的方法,并在大多数情况下更可取的。当你在循环中需要使用Map的键和值时,就可以使用这个方法

    for(Map.Entry<Integer, Integer> entry : map.entrySet()){
        System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue())
    }

    注意:For-Each循环是Java5新引入的,所以只能在Java5以上的版本中使用。如果你遍历的map是null的话,For-Each循环会抛出NullPointerException异常,所以在遍历之前你应该判断是否为空引用。

  • 方法2 for-each 迭代keys和values

    如果你只需要用到map的keys或values时,你可以遍历KeySet或者values代替entrySet

    Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    
    //iterating over keys only
    for (Integer key : map.keySet()) {
        System.out.println("Key = " + key);
    }
    
    //iterating over values only
    for (Integer value : map.values()) {
        System.out.println("Value = " + value);
    }

    这个方法比entrySet迭代具有轻微的性能优势(大约快10%)并且代码更简洁

  • 方法3 使用Iterator迭代

    Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
    while (entries.hasNext()) {
        Map.Entry<Integer, Integer> entry = entries.next();
        System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
    }

    这个似乎有点多余但它具有自己的优势。首先,它是遍历老java版本map的唯一方法。另外一个重要的特性是可以让你在迭代的时候从map中删除entries的(通过调用iterator.remover())唯一方法.如果你试图在For-Each迭代的时候删除entries,你将会得到unpredictable resultes 异常。

    从性能方法看,这个方法等价于使用For-Each迭代

  • 方法4 迭代keys并搜索values[超级低效]

    这个方法看上去比方法1更简洁,但是实际上它更慢更低效,通过key得到value值更耗时(这个方法在所有实现map接口的map中比方法#1慢20%-200%)。 参考:https://blog.csdn.net/scgyus/article/details/79105211

数组基本操作

  1. 声明一个int型的数组

    int[] array 或 int array[]

  2. 给数组分配空间

    array=new int[10]

  3. 给数组赋值

    a. 初始化赋值 array={0, 1, 2, 3, 4, 5}

    b. 利用下标赋值 array[0] = 1

    c. 使用循环赋值

    for(int i=0; i<array.length();i++){

    ​ array[i] = in.nextInt();

    }

  4. 数组输出

    传统for,类似赋值时的方法

    for each,for(int a:array)

    Array中的toString方法 Arrays.toString(array)

  5. 多维数组

    在java中实际上没有多维数组,只有一维数组

    多维数组被解读为数组的数组

    int[] [] array2 = { {1, 2}, {3, 4} )