Content
- I/O operations
1.1 input from keyboard
1.2 FileReader/FileWriter - Array
2.1 initialise
2.2 copy
2.3 sort
2.4 sum,avg,max,min… - String
3.1 string methods
3.2 string,int,char conversions - List and ArrayList
4.1 initialise
4.2 sort
4.3 sum using Stream
4.4 list, array, set conversion - Dictionary
- Set/Hashset
- Queue & Stack
- Hashmap
基本数据类型:
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;
-
Scanner.sc = new Scanner(System.in);
Scanner中提供了多个方法:
next() 取得一个字符串
nextInt() 将输入的字符转化成int型
nextFloat() 将输入的字符转化成float型
nextBoolean() 将输入的字符转化成boolean型 -
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:
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:
- charAt(int i) //返回char
- length() //记得是方法!
- indexOf(int i或者String s) //返回第一次出现的索引,返回-1就是没有出现过
- substring(int i, int j) //从包括i到第j-1的子字符串
- 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
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 )
Stack (Java Platform SE 7 )
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
- sort map based on keys:
map.keySet().stream().sorted().forEach(k -> System.out.println(k +" "+map.get(k)));