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++;
}
}
}