Java语法笔记.MD

Content

  1. I/O operations
    1.1 input from keyboard
    1.2 FileReader/FileWriter
  2. Array
    2.1 initialise
    2.2 copy
    2.3 sort
    2.4 sum,avg,max,min…
  3. String
    3.1 string methods
    3.2 string,int,char conversions
  4. List and ArrayList
    4.1 initialise
    4.2 sort
    4.3 sum using Stream
    4.4 list, array, set conversion
  5. Dictionary
  6. Set/Hashset
  7. Queue & Stack
  8. Hashmap

基本数据类型:
基本数据类型及Obejct类

1. I/O operations

How to Read and Write CSV files in Java using Eclipse IDE

get current filepath:

String currentDir = System.getProperty("user.dir");
System.out.println("Current working directory: " + currentDir);

1.1) get input from keyboard

Scanner and BufferReader class;

  1. Scanner.sc = new Scanner(System.in);
    Scanner中提供了多个方法:
    next() 取得一个字符串
    nextInt() 将输入的字符转化成int型
    nextFloat() 将输入的字符转化成float型
    nextBoolean() 将输入的字符转化成boolean型

  2. BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));

    • 使用BufferedReader对象的readLine()方法必须处理java.io.IOException异常(Exception).
    • String text = buffer.readLine(); //readLine()方法会返回用户在按下Enter键之前的所有字符输入,不包括最后按下的Enter返回字符.
import java.util.*;
import java.io.BufferedReader;
public class test1
{
   public static void main(String[] args) 
      {
      	/*-------- 方法一:scanner --------*/
         Scanner sc=new Scanner(System.in); //接受用户待会儿输入的值
         System.out.println("请输入您的年龄:"; //提示用户进行值的输入
         int age=sc.nextInt();  //定义int类型变量用于接收用户从键盘传入的参数
         String ss = sc.nextLine(); //接受一行的输入
       	 sc.close(); //关闭scanner

		//--------方法二:BufferedReader--------//
		BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
		String s = input.readLine();
        }
}

1.2) FileReader/FileWriter on file operations

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

public static void writeCsv(String filePath) {
  List<User> users = new ArrayList<User>();
  /* create User intsance into arraylist
  User user = new User();
  user.setId(1);
  user.setFirstName("Jack");
  user.setLastName("Rutorial 1");
  users.add(user);*/
  
  FileWriter fileWriter = null;
  try {
   //initialise filewrite by filepath
   fileWriter = new FileWriter(filePath);
   fileWriter.append("Id, First Name, Last Name\n");
   // write users into file
   for(User u: users) {
    fileWriter.append(String.valueOf(u.getId()));
    fileWriter.append(",");
    fileWriter.append(u.getFirstName());
    fileWriter.append(",");
    fileWriter.append(u.getLastName());
    fileWriter.append("\n");
   }
  } catch (Exception ex) {
   ex.printStackTrace();
  } finally {
   try {
    //***must flush and close filewriter***
    fileWriter.flush();
    fileWriter.close();
    //*********
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
}
public static void readCsv(String filePath) 
{
  BufferedReader reader = null;
  try 
   {
	   List<User> users = new ArrayList<User>();
	   String line = ""; //read each line into string
	   reader = new BufferedReader(new FileReader(filePath)); //initialise bufferreader
	   reader.readLine(); //read from file
	   //read file from line by line
	   while((line = reader.readLine()) != null) 
	   {
		    String[] fields = line.split(","); //split by ","
		    
		    //create User instances by reading file data
		    /*
		    if(fields.length > 0) {
		     User user = new User();
		     user.setId(Integer.parseInt(fields[0]));
		     user.setFirstName(fields[1]);
		     user.setLastName(fields[2]);
		     users.add(user);
		    }
		    */
	    }
	   
	   for(User u: users) 
	    {
		    System.out.printf("[userId=%d, firstName=%s, lastName=%s]\n", u.getId(), u.getFirstName(), u.getLastName());
		}
    }	   
    catch (Exception ex) 
        {ex.printStackTrace();}
    finally 
    {
        try 
        //***must close reader***
        {reader.close();}
        //**********
        catch (Exception e) 
        {e.printStackTrace();}   
    }
    
}

2. Arrays

2.1) initialisation and output

arrat 转换List Arrays.asList(arr)

import java.util.*;

class test{
    public static void main(String[] args){
        //initialise
        //1d array
        //int[] arr1 = new int[20];    //1.带大小
        //int[] arr1 = {1,2,3,4,5};    //2.初始值
        int[] arr1 = new int[]{1,2,3,4,5};  //3. 初始值无大小
        
        //2d array
        //int[][] arr2 = {{1,2}, {2, 3}, {4, 5}}; //初始值
        int[][] arr2 = new int[][]{{1,2}, {3,4}, {5,6}}; //初始值
        //先定义初始值、再用循环赋值
        /*int[][] arr3 = new int[5][];
	   	for(int i=0; i<arr3.length; ++i){
	       arr3[i]=new int[i+1];
		   for(int j=0; j<arr3[i].length; ++j)
		      arr3[i][j]= i+j;
	   	}*/

        //list to array
        List<Integer> a = new ArrayList<Integer>();
        a.add(1);
        a.add(2);
        a.add(3);
        Integer[] x = a.toArray(new Integer[a.size()]);
        //output arrays directly into strings
        System.out.println("ArrayList a: " + Arrays.toString(x));
 
        //output multi-dimension array using deepToString - 多维数组用deepToString
        System.out.println(Arrays.deepToString(arr2));

        //convert array to list but NOT ARRAYLIST
        Integer[] arr = new Integer[]{1,2,3,4};
        //必须要转化为ArrayList才可以进行add remove等方法
        List arrL =  new ArrayList<>(Arrays.asList(arr));       
        arrL.add(5);
        arrL.add(10);
        System.out.println("List arr: " + arrL);
    }
}
Output:

arrays.aslist

2.2) copy

Array Copy in Java - GeeksforGeeks

int a[] = new int[]{1,2,3);

//using clone()
int b[] = a.clone();

// Copying elements of a[] to b[]
System.arraycopy(a, 0, b, 0, 3);

// Create an array b[] of same size as a[]
// Copy elements of a[] to b[]
int b[] = Arrays.copyOf(a, 3);

// Creating an array b[] and
// copying elements of a[] to b[]
int b[] = Arrays.copyOfRange(a, 2, 6);

2.3) sort array

2.3.1) 1D array
//default sort
Integer[] nums = {1,9,10,2,4}; //逆序必须使用Integer类而不是int,Comparator只有使用泛型类才可以
Arrays.sort(nums);
System.out.println(Arrays.toString(nums));

//reverse sort
//1. lamda expression
Arrays.sort(nums, (a,b) -> (b-a)); 
Arrays.sort(nums, (a, b) -> b.compareTo(a));
Arrays.sort(nums, (a, b) -> Integer.compare(b, a));
//2. Comparator
Arrays.sort(nums,Comparator.reverseOrder());

System.out.println(Arrays.toString(nums));
2.3.2) 2D array

Sort based on first column in ascending and descending order.
The lamda experssion of reverse order is overriding the Collections.sort(). See Dictionary

int[][] a = new int[][]{{1,2},{5,1},{3,10},{8,4}};

// sort by first column in ascending order
//1. Comparator
Arrays.sort(a, Comparator.comparingInt(x-> x[0]));
//2. lambda expression 	
Arrays.sort(a, (a, b) -> (a[0] - b[0]));    		
System.out.println(Arrays.deepToString(a));  		
// sort first column in reverse order
Arrays.sort(a, (x, y)->(y[0]-x[0]));				
System.out.println(Arrays.deepToString(a));    
/* 
注意Arrays.Reverse()是反向排列数组的元素,而不是按照大小排序
*/
Output:
[[1, 2], [3, 10], [5, 1], [8, 4]]
[[8, 4], [5, 1], [3, 10], [1, 2]]

Self-initialised sorting on 2d array:

ublic static void main(String[] args) {
    int[][] intvs = {{1, 6}, {2, 3}, {2,1}};
    // 按照第一列升序排列,第一列相同时按照第二列降序排列
    Arrays.sort(intvs, (a, b) -> {
    // 这里是lamda表达式改写
        if (a[0] == b[0]) {
            return b[1] - a[1];
        }
        return a[0] - b[0];
    });
    for(int[] intv:intvs){
        System.out.println(Arrays.toString(intv));
    }
}
Output:
[1, 6]
[2, 3]
[2, 1]

2.4) sum, min, max, average of int[]

int[] arr1 = {1, 5, 3, 6, 7};
int sum = Arrays.stream(arr1).sum(); // 求和
double average = Arrays.stream(array).average().orElse(Double.NaN);
int min = Arrays.stream(arr1).min().getAsInt(); // 最小值
int max = Arrays.stream(arr1).max().getAsInt(); // 最大值
System.out.println("arr1 和 = " + sum + ", 平均值 = " + average
        + ", 最小值 = " + min + ", 最大值 = " + max);

3. String

3.1) methods: string doc_Oracle

常用的methods:

  1. charAt(int i) //返回char
  2. length() //记得是方法!
  3. indexOf(int i或者String s) //返回第一次出现的索引,返回-1就是没有出现过
  4. substring(int i, int j) //从包括i到第j-1的子字符串
  5. contains(charSeq s) //可以直接用string代替,因为string实现了charSeq,返回true or false

CharSequence与String都能用于定义字符串,但CharSequence的值是可读可写序列,而String的值是只读序列。如果使用CharSequence作为一个方法的参数类型,则对于这个方法,可以传递String、StringBuilder和StringBuffer作为参数。Java中,String类是一个不可变的类,这个类实现了CharSequence,Serializable和Comparable接口。

3.2) string,int,char转换

  • int to string: Integer.toString(i); String.valueOf(int i);
  • str to int: Integer.parseInt(s); Integer.valueOf(s);
  • char to int: Integer.parseInt(String.valueOf(char c)); Character.getNumericValue(c);
  • int to char: char c=Character.forDigit(i,REDIX); //REDIX=10如果是十进制, HEXA是16
  • string to char array: char c[] = str.toCharArray(s)
  • char arr to string: String.valueOf(new char[] {'a', 'b', 'c'})

reverse string: new StringBuilder(hi).reverse().toString()new StringBuffer(hi).reverse().toString()

4. List and ArrayList

4.1)initialisation and loop

List API
ArrayList的几种初始化方法_Jason_Lee155的博客-CSDN博客_arraylist初始化
ArrayList方法
ArrayList API

List<String> list1 = new ArrayList<String>(); //initialise empty list
List<String> list2 = new ArrayList<String>(Arrays.asList("a","b","c")); //with default values
list1.add("abc");
list1.add("def");
list1.add("ghi");
list1.remove(0);
list1.remove("df");
System.out.println("last one: "+list.get(list1.size()-1);
//printout list as strings
System.out.println(list1.toString());       //method1: use List.toString();
list1.forEach(System.out::println);         //method2: print each item line by line
System.out.print(String.join(",", list1));  //method3: separating items by ","


// loop
/* For Loop for iterating ArrayList */
System.out.println("For Loop");
for (int counter = 0; counter < arrlist.size(); counter++) { 		      
    System.out.println(arrlist.get(counter)); 		
}   		

/* Advanced For Loop*/ 		
System.out.println("Advanced For Loop"); 		
for (Integer num : arrlist) { 		      
     System.out.println(num); 		
}

/* While Loop for iterating ArrayList*/ 		
System.out.println("While Loop"); 		
int count = 0; 		
while (arrlist.size() > count) {
System.out.println(arrlist.get(count));
   count++;
}

/*Looping Array List using Iterator*/
System.out.println("Iterator");
Iterator iter = arrlist.iterator();
while (iter.hasNext()) {
   System.out.println(iter.next());
Output:
last one: ghi
[def, ghi]
def
ghi
def,ghi

4.2)sort list

Java中Comparator的个人简单理解(升序降序)与使用
Collections.sort() in Java with Examples
Java使用Collections.sort()排序的方法

//ArrayList or LinkedList
List<Integer> list = new ArrayList<Integer>();
list.add(2);
list.add(9);
list.add(7);
list.add(5);
list.add(3);
list.add(1);
list.add(0);

//1. override Collections.sort()
//ascending order
Collections.sort(list, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o1.compareTo(o2);
        }
    }
);
    
//2. lambda expression over list.sort()
//ascending order
list.sort((a,b) -> {
    return a.compareTo(b); 
} );
//2.1 lambda using static function(lamda指向静态函数)
//ascending order
list.sort(Integer::compareTo);
list.sort(Integer::compare);

//3. Comparator
list.sort(Comparator.naturalOrder());
//descending order
list.sort(Comparator.reverseOrder());

//4. stream
List<Integer> sortedList = list.stream().sorted()
			.collect(Collectors.toList());
//reverse			
List<Integer> sortedList = list.stream()
			.sorted(Comparator.reverseOrder())
			.collect(Collectors.toList());

System.out.println(list); //output

Collections.sort()一般都用在list的比较上。例:
在这里插入图片描述

4.3) Sum of ArrayList using Streams API

//计算list某个类中域的总和,e.g. User.Age
long sum = list.stream().mapToLong(User::getAge).sum()//计算integer list的总和
long sum = list.stream().reduce(Integer::sum).orElse(0);

4.4) List, array, set conversion

Java Array、List、Set 互相转化

    public void test(){
        int[] arr = {1, 1, 3, 4, 5, 6, 7};
        //arr to list
        List<Integer> list = Arrays.asList(arr);
        //list to arr
        Integer[] intArr =  list.toArray(new Integer[list.size()]);
        //方法二:java8及以上版本
        int[] intArr1 =  list.stream().mapToInt(Integer::valueOf).toArray();
		System.out.println("dest: " + Arrays.toString(intArr1));
		//array to set
		Set<Integer> sets = new HashSet<>(Arrays.asList(intArr));
		//set to array
		Integer arrayInt = sets.toArray(new Integer[sets.size()]);
		System.out.println("dest: " + Arrays.toString(dest));
// List转Set
Set<String> set = new HashSet<>(list);
System.out.println("set: " + set);
// Set转List
List<String> list_1 = new ArrayList<>(set);
System.out.println("list_1: " + list_1);
// array 转 set
String[] s = new String[]{"A", "B", "C", "D","E"};
Set<String> set = new HashSet<>(Arrays.asList(s));
System.out.println("set: " + set);
// set 转 array
String[] dest = set.toArray(new String[0]);
System.out.println("dest: " + Arrays.toString(dest));

    }
	

5. Dictionary

How to create a dictionary in Java·​​​​​
HashTable API
Example:

import java.util.*;
class My_Dictionary 
{
	public static void main(String[] args)
	{
		// creating a My HashTable Dictionary
		Hashtable<String, String> my_dict = new Hashtable<String, String>();

    // Using a few dictionary Class methods
		// using put method
		my_dict.put("01", "Apple");
		my_dict.put("10", "Banana");
		
		// using get() method
    System.out.println("\nValue at key = 10 : " + my_dict.get("10")); 
    System.out.println("Value at key = 11 : " + my_dict.get("11"));
		
		// using isEmpty() method
    System.out.println("\nIs my dictionary empty? : " + my_dict.isEmpty() + "\n");
		
		// using remove() method 
		// remove value at key 10
    my_dict.remove("10");
    System.out.println("Checking if the removed value exists: " + my_dict.get("10")); 
    System.out.println("\nSize of my_dict : " + my_dict.size()); 
	}
} 
Output:
Value at key = 10 : Banana
Value at key = 11 : null

Is my dictionary empty? : false

Checking if the removed value exists: null

Size of my_dict : 1

Sort HashMap by key or vlaue: 利用ArrayList对map进行按key(键)和按value (值) 排序

6. set, hashset

package collect;

import java.util.HashSet;
import java.util.Set;

/**
 * [简要描述]:Set使用
 * [详细描述]:
 *
 * @author Smalight Lv
 * @version 1.0, 2021/5/6 15:15
 * @since JDK 1.8
 */
public class SetTest1 {
    public static void main(String[] args) {
        Set<String> set =  new HashSet<>();

        //添加元素到Set
        set.add("张三");
        set.add("李四");
        set.add("王五");

        //打印Set
        System.out.println(set);

        //再加入一个王五,不能添加成功
        boolean rst = set.add("王五");
        System.out.println("添加结果:" + rst);
        System.out.println(set);

        //HashSet可以加入null,但只能加入一个null
        rst = set.add(null);
        System.out.println("添加第一个null:" + rst);
        System.out.println(set);
        rst = set.add(null);
        System.out.println("添加第二个null:" + rst);
        System.out.println(set);

        //判断Set中是否包含某个元素
        rst = set.contains("张三");
        System.out.println("是否包含元素\"张三\":" + rst);

        //删除元素
        set.remove("张三");
        System.out.println(set);

        //判断Set中是否包含某个元素
        rst = set.contains("张三");
        System.out.println("是否包含元素\"张三\":" + rst);

        //Set的大小,即Set中元素的数量
        int size = set.size();
        System.out.println("Set的大小:" + size);

        //判断Set是否为空
        boolean isEmpty = set.isEmpty();
        System.out.println("Set是否为空:" + isEmpty);

        //清空Set
        set.clear();
        System.out.println(set);

        //判断Set是否为空
        isEmpty = set.isEmpty();
        System.out.println("Set是否为空:" + isEmpty);

    }
}


7. Queue & stack

Queue (Java Platform SE 7 )
queue-methods
Stack (Java Platform SE 7 )
stack-methods

import java.util.LinkedList;
import java.util.Queue;

public class test{
    public static void main(String[] args) {
        Queue<Integer> q = new LinkedList<Integer>();      
        //add to queue
        q.offer(1); 
        q.offer(2);
        q.offer(3);
        //output queue
        System.out.println("Queue is:");
        for(Integer n : q){
            System.out.print(n+" ");
        }
        q.poll();
        System.out.println("\nafter polling:");
        for(Integer n : q){
            System.out.print(n+" ");
        }
        System.out.println("\npeek head item: "+q.peek()); 


        Deque<Integer> s = new ArrayDeque<Integer>();
        //add to stack
        s.push(4);
        s.push(5);
        s.push(6);
        //output stack
        System.out.println("\nStack is:");
        for(Integer n : s){
            System.out.print(n+" ");
        }
        s.pop();
        System.out.println("\nafter pop:");
        for(Integer n : s){
            System.out.print(n+" ");
        }
        System.out.println("\npeek top item: "+s.peek());              
    }            
    
}
Output:
Queue is:
1 2 3 
after polling:
2 3 
peek head item: 2

Stack is:
6 5 4 
after pop:
5 4 
peek top item: 5

8. Hashmap

Hashmap java doc
Hashmap java w3schools

  1. sort map based on keys: map.keySet().stream().sorted().forEach(k -> System.out.println(k +" "+map.get(k)));

9.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值