Java

Scanner.next()与Scanner.nextLine()的区别

1、next()方法在遇到有效字符前所遇到的空格、tab键、enter键都不能当作结束符,next()方法会自动将其去掉,只有当next()方法遇到有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符,所以next()不能得到带有空格的字符串,只能得到部分字符串(空格前面的)。

2、nextLine()方法的结束符是Enter键,即nextLine()方法返回的是Enter键之前的所有字符串,所以nextLine()方法可以获取到带有空格的字符串。
测试:	
    输入:
    wei chen
    next()方法接收到的字符:wei 字符长度:3        //next()方法遇到空格键、Tab键或Enter键相当于遇到了结束符。
    nextLine()方法接收到的字符: chen 字符长度:5    //nextLine()方法将next()方法接收完剩下的都接收了

一维数组整体赋值

Arrays.fill(visit, false); // 将数组visit中的每个元素赋值为false,一维数组

DFS中的注意点

//方向
static int[][] stepArr = { { 1, 0 }, { 0, 1 }, { 0, -1 }, { -1, 0 } }; // D R L U
static String[] direction = { "D", "R", "L", "U" }; // 与stepArr对应
//初始化二维迷宫数组
for (int i = 0; i < 30; i++) {
	String string = scanner.nextLine();
	for (int j = 0; j < 50; j++) {
			map[i][j] = string.charAt(j) - '0';
		}
	}

队列(Queue)的使用

boolean offer(E e) // 将指定的元素插入此队列队头
E poll() // 获取并移除此队列的头,如果此队列为空,则返回 null
E peek() // 获取但不移除此队列的头;如果此队列为空,则返回 null。 
Queue<P> queue=new LinkedList<P>();// 构造队列
queue.isEmpty() //返回队列是否为空

Integer中的函数

static int min = Integer.MIN_VALUE; // Integer.MIN_VALUE 代表Integer的最小值-2147483648
	static int max = Integer.MAX_VALUE; // Integer.MIN_VALUE 代表Integer的最大值2147483648

读取txt文本内容

Scanner inScanner = new Scanner(new File("src/data.txt")); // 读取data.txt的内容
for (int i = 0; i < 20; i++)
	for (int j = 0; j < 5; j++) {
		a[i][j] = inScanner.nextInt(); // 存入数组
		}

Map的使用

Map<String, Integer> map=new HashMap<String, Integer>(); // 创建一个Map键值对
Map<Integer, Vector<Integer>> aMap = new TreeMap<Integer, Vector<Integer>>();//TressMap有根据键由小到大排序的效果
map.get(temp) // 根据键来获取值,如果没有此键返回null
map.put(temp, 1) // 将键为temp,值为1的键值对插入map中
//遍历map
for (Map.Entry<Integer, Vector<Integer>> entry:aMap.entrySet()) {
     for (int i = 0; i < entry.getValue().size(); i++) { 
         
        }
}

String的使用

String temp=tempString.substring(i, j); // 获取tempString下标从i到j-1的字串,故长度为j-i(包前不包后)
string.replaceAll("\n", ""); //replaceAll去掉换行符
string.replaceFirst(" ", ""); //replaceFirst去掉第一个空格

排序

//对map排序
Collections.sort(map); 
//对vector排序
Collections.sort(vector); //默认升序
Collections.sort(vector,Collections.reverseOrder()); //默认反序
Collections.sort(list, new Comparator<Order>() { // 排序实现
    public int compare(Order order1, Order order2) {
        if (order1.ts != order2.ts) //1表示是,-1表示相反
            return order1.ts > order2.ts ? 1 : -1;
        else {
            return order1.id > order2.id ? 1 : -1;
        }
    }
});

Set 容器的使用**

  • HashSet Set的子接口 (散列存储) 查找速度快,易实现
  • TreeSet Set的子接口 (有序存储)—排序的类集框架 默认字母升序排列

注:TreeSet 排序是依靠Comparable接口实现的,所以保存自定义类对象时要覆写compareTo方法

class Book1 implements Comparable<Book1>{
    private String title;
    private double price;
     @Override
    public int compareTo(Book1 o) {
        //按照价格排序
        if(this.price> o.price){
            return 1;
        }else if(this.price< o.price){
            return -1;
        }else {
          return  this.title.compareTo(o.title);
        }
    }
    public static void main(String[] args) {
        //按照价格排序
        Set<Book1> set = new TreeSet<>();
        set.add(new Book1("Java开发",990.9));
        System.out.println(set);
}
//其它set操作
set.clear();//清空容器
set.contains(s);//判断是否含有s

值传递与引用传递

Java中数据类型分为基本类型的引用类型两大类

基本类型: byte、short、int、long、float、double、boolean、char
引用类型: 类、接口、数组

基本类型的变量在声明时就会分配数据空间
而引用类型在声明时只是给变量分配了引用空间,并不分配数据空间

1、基本数据类型传值,对形参的修改不会影响实参
2、引用类型传引用,形参和实参指向同一个内存地址(同一个对象),所以对参数的修改会影响到实际的对象
3、String, Integer, Double等不可变的类型,可以理解为传值,最后的操作不会修改实参对象

**将基本类型实现引用传递的方法:**将基本数据类型构造成一个类的公有属性

字符串与数字的相互转换方法

//1、字符串转化为整型数字
Integer.parseInt(String s);
Integer.valueOf(String s);
//2、字符串转化为浮点型数字
Float.parseFloat(String s);
Double.parseDouble(String s);
//整形、浮点类型转化为字符串
String s = i + ""; // 方法一
String s = String.valueOf(i); // 方法二
String s = Integer.toString(i); // 方法三
//JDK中判断字符串是否为数字函数
public static boolean isNumeric(String str);

Map 的使用

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scanner=new Scanner(System.in);
		int ans=0;
		Map<String, Integer> map=new HashMap<String, Integer>();//创建一个map容器
		String tempString="0100110001010001";
		for(int i=0;i<tempString.length();i++) {
			for(int j=i+1;j<=tempString.length();j++) {
				String temp=tempString.substring(i, j);
				if(map.get(temp)==null) {//根据键获取一个map中的对应键的值
					map.put(temp, 1);//将一个键值插入到map当中
					ans++;
				}
			}
		}