java.lang包,java虚拟机自动导入的
如System类、String类等
java.util包,java语言工具包
如Scanner类、Random类、List集合等
java.io包,java语言输入输出包,对文件操作相关的类
如FileInputStream类、FileOutputStream类等
java.net包,java语言中的网络包,提供了大量网络编程相关的类
如ServerSocker类、Socker类等
java.sql包,java语言中的数据包,提供了大量操作数据库的类和接口等
如DriverManager类、Connection接口等
……
方法声明 | 功能介绍 |
---|---|
Object() | 使用无参方式构造对象 |
boolean equals(Object obj) | 判断调用对象和传入对象是否相等,比较的是内存地址与==代表含义相同 |
int hashCode() | 返回调用对象的哈希码值(内存地址的编号 十六进制) 如果两个对象equals方法返回true,则hashCode值相同 如果两个对象equals方法返回false,则hashCode值不同 为了使得hashCode的结果与equals方法返回的结果保持一致,因此需要重写hashCode方法 |
String toString() | 获取对象的字符串形式 打印引用变量时会自动调用toString()方法 |
Class> getClass() |
包装类 | 基本类型 |
---|---|
java.lang.Byte | byte |
java.lang.Short | short |
java.lang.Integer | int |
java.lang.Long | long |
java.lang.Float | float |
java.lang.Double | double |
java.lang.Boolean | boolean |
java.lang.Character | char |
常量 | 功能介绍 |
---|---|
public static final int MAX_VALUE | 表示int类型可以描述的最大值,即2^31-1 |
public static final int MIN_VALUE | 表示int类型可以描述的最小值,即-2^31 |
public static final int SIZE | 表示int类型采用二进制补码形式的位数 |
public static final int BYTES | 表示int类型所占的字节个数 |
public static final Class TYPE | 表示int类型的Class实例 |
public class IntegerTest {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE); //最大值:输出2147483647
System.out.println(Integer.MIN_VALUE); //最小值:输出-2147483648
System.out.println(Integer.SIZE); //所表示的二进制位数:输出32
System.out.println(Integer.BYTES); //所占字节个数:输出4
System.out.println(Integer.TYPE); //输出int
}
}
Integer int1 = Integer.valueOf(123); //从int类型转换为Integer类型(装箱)
int ia = int1.intValue(); //从Integer类型转换为int类型(拆箱)
Integer value = Integer.valueOf("123"); //从String类型转换为Integer类型
Integer int1 = 100; //自动装箱
int int2 = int1; //自动拆箱
Integer it1 = 128;
Integer it2 = 128;
Integer it3 = new Integer(128);
Integer it4 = new Integer(128);
System.out.println(it1 == it2); // 比较地址 false
System.out.println(it1.equals(it2)); // 比较内容 true
System.out.println(it3 == it4); // 比较地址 false
System.out.println(it3.equals(it4)); // 比较内容 true
Integer it1 = 127;
Integer it2 = 127;
Integer it3 = new Integer(127);
Integer it4 = new Integer(127);
System.out.println(it1 == it2); // 比较地址 true 地址一样
System.out.println(it1.equals(it2)); // 比较内容 true
System.out.println(it3 == it4); // 比较地址 false
System.out.println(it3.equals(it4)); // 比较内容 true
自动装箱池
将-128~127范围内的整数装箱完毕,当程序中使用该范围之间的整数时,无需装箱直接取用自动装箱池中的对象即可,从而提高效率。
static Integer parseInt(String s)将字符串转换为int类型
int ic = Integer.parseInt("200");
System.out.println(ic);
int id = Integer.parseInt("abc"); //java.lang.NumberFormatException 数字格式异常
System.out.println(id);
System.out.println(Integer.toString(200)); //获取整数的十进制字符串 200
System.out.println(Integer.toBinaryString(200)); //获取整数的二进制字符串 11001000
System.out.println(Integer.toHexString(200)); //获取整数的十六进制字符串 c8
System.out.println(Integer.toOctalString(200)); //获取整数的八进制字符串 310
double db1 = 3.14;
Double db2 = db1;
System.out.println(db2.isNaN()); //是数字打印false
Double db3 = Double.valueOf(0 / 0.0);
System.out.println(db3.isNaN()); //非数字打印true
//"true".equalsIgnoreCase(String s) 不是true的字符串全部转换为false
Boolean b1 = Boolean.parseBoolean("true");
System.out.println(b1); //输出true
Boolean b2 = Boolean.parseBoolean("true1");
System.out.println(b2); //输出false
char a1 = 'a';
Character ca1 = a1;
System.out.println(Character.isUpperCase(ca1)); //返回false
System.out.println(Character.isLowerCase(ca1)); //返回true
System.out.println(Character.isDigit(ca1)); //返回false
System.out.println(Character.toUpperCase(ca1)); //打印A
System.out.println(Character.toLowerCase(ca1)); //打印a
方法名 | 功能介绍 |
---|---|
static int max(int a, int b) | 返回两个参数中的最大值 |
static int min(int a, int b) | 返回两个参数中的最小值 |
static double pow(double a, double b) | 返回第一个参数的幂 |
static int abs(int a) | 返回参数指定数值的绝对值 |
static long round(double a) | 返回参数四舍五入的结果 |
static double sqrt(double a) | 返回参数的平方根 |
static double random() | 返回0.0到1.0的随机数 |
public static void main(String[] args) {
//获取两个整数中最大值的结果是:101
System.out.println("获取两个整数中最大值的结果是:" + Math.max(100, 101));
//获取两个整数中最小值的结果是:100
System.out.println("获取两个整数中最小值的结果是:" + Math.min(100, 101));
//获取次方的结果是:8.0
System.out.println("获取次方的结果是:" + Math.pow(2, 3));
//获取绝对值的结果是:2
System.out.println("获取绝对值的结果是:" + Math.abs(-2));
//获取四舍五入的结果是:3
System.out.println("获取四舍五入的结果是:" + Math.round(3.14));
//获取平方根的结果是:4.0
System.out.println("获取平方根的结果是:" + Math.sqrt(16));
//生成的随机数是:0.9524640840846081
System.out.println("生成的随机数是:" + Math.random());
}
方法名 | 功能介绍 |
---|---|
BigDecimal(String val) | 根据参数指定的字符串来构造对象 |
BigDecimal add(BigDecimal augend) | 用于实现加法运算 |
BigDecimal subtract(BigDecimal subtrahend) | 用于实现减法运算 |
BigDecimal multiply(BigDecimal multiplicand) | 用于实现乘法运算 |
BigDecimal divide(BigDecimal divisor) | 用于实现除法运算 |
public static void main(String[] args) {
BigDecimal b1 = new BigDecimal("3.14");
BigDecimal b2 = new BigDecimal("4.11");
System.out.println(b1.add(b2)); //加法运算 7.25
System.out.println(b1.subtract(b2)); //减法运算 -0.97
System.out.println(b1.multiply(b2)); //乘法运算 12.9054
//无限循环小数除法 BigDecimal必须要精确运算
System.out.println(b1.divide(b2)); //除法运算 算数异常java.lang.ArithmeticException
//使用重载方法
System.out.println(b1.divide(b2, RoundingMode.HALF_UP)); //四舍五入 0.76
}
方法 | 功能介绍 |
---|---|
BigInteger(String val) | 根据参数指定的字符串来构造对象 |
BigInteger add(BigInteger val) | 用于实现加法运算 |
BigInteger subtract(BigInteger val) | 用于实现减法运算 |
BigInteger multiply(BigInteger val) | 用于实现乘法运算 |
BigInteger divide(BigInteger val) | 用于实现除法运算 |
BigInteger remainder(BigInteger val) | 用于实现取余运算 |
BigInteger[] divideAndRemainder(BigInteger val) | 用于实现取商和余数的运算 |
public static void main(String[] args) {
BigInteger b1 = new BigInteger("200");
BigInteger b2 = new BigInteger("201");
System.out.println(b1.add(b2)); // 加法运算 401
System.out.println(b1.subtract(b2)); // 减法运算 -1
System.out.println(b1.multiply(b2)); // 乘法原酸 40200
System.out.println(b1.divide(b2)); // 除法运算 0
System.out.println(b1.remainder(b2));// 取余运算 200
BigInteger[] integers = b1.divideAndRemainder(b2); //一次性获得商和余数 [0,200]
for (int i = 0; i < integers.length; i++) {
System.out.println(integers[i]);
}
}
由final修饰,不可被继承
从jdk1.9开始该类的底层不使用char[]来存储数据,而是改成 byte[]加上编码标记,从而节约了一些空间。
该类描述的字符串内容是个常量不可更改,因此可以被共享使用。
如:String str1 = “abc”; - 其中"abc"这个字符串是个常量不可改变。
str1 = “123”; - 将“123”字符串的地址赋值给变量str1。
- 改变str1的指向并没有改变指向的内容
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2); //由于常量池 所以返回的是true
}
方法名 | 功能介绍 |
---|---|
String() | 使用无参方式构造对象得到空字符序列 |
String(byte[] bytes, int offffset, int length) | 使用bytes数组中下标从offffset位置开始的length个字节来构造对象 |
String(byte[] bytes) | 使用bytes数组中的所有内容构造对象 |
String(char[] value, int offffset, intcount) | 使用value数组中下标从offffset位置开始的count个字符来构造对象 |
String(char[] value) | 使用value数组中的所有内容构造对象 |
String(String original) | 根据参数指定的字符串内容来构造对象,新创建对象为参 |
public static void main(String[] args) {
String str1 = new String();//this.value = "".value;
System.out.println(str1); //打印 ""
System.out.println("---------------------");
byte[] bArr = {97, 98, 99, 100, 101};
// 98 -> b 99 -> c 100 -> d
String str2 = new String(bArr, 1, 3); //使用byte数组中某几个元素构造对象
System.out.println(str2); //打印 bcd
System.out.println("---------------------");
String str3 = new String(bArr); //使用byte中全部元素构造对象
System.out.println(str3); //打印abcde
System.out.println("---------------------");
char[] cArr = {'a', 'b', 'c', 'd'};
String str4 = new String(cArr, 1, 3); //使用char数组中某几个元素构造对象
System.out.println(str4); //打印bcd
String str5 = new String(cArr); //使用char数组中全部元素构造对象
System.out.println(str5); //打印abcd
System.out.println("---------------------");
String str6 = new String("orrr"); //使用字符串构造对象
System.out.println(str6); //打印orrr
}
public static void main(String[] args) {
// 1.请问以下代码会创建几个对象?分别存放在什么地方?
//1个对象,存放在常量池中
String str1 = "hello";
String str2 = "hello";
//2个对象 "hello"参数对象在常量池中,新创建的str2在内存堆区
String str3 = new String("hello");
String str4 = new String("hello");
String str5 = "abcd";
String str6 = "ab" + "cd"; //常量优化机制
String str7 = "ab";
String str8 = str7 + "cd"; //str7非常量
System.out.println(str1 == str2); //打印true 常量池中比较
System.out.println(str1.equals(str2)); //打印true 比较字符串的值
System.out.println(str3 == str4); //打印false 内存堆区空间不同
System.out.println(str3.equals(str4)); //打印true 比较字符串的值相同
System.out.println(str2 == str4); //打印false 常量池和内存堆区空间比较
System.out.println(str2.equals(str4)); //打印true 比较字符串的值相同
System.out.println(str5 == str6); //打印true 常量池中比较
System.out.println(str5 == str8); //打印false 使用+连接 新的对象产生
}
方法名 | 功能介绍 |
---|---|
String toString() | 返回字符串本身 |
byte[] getBytes() | 将当前字符串内容转换为byte数组并返回 |
char[] toCharArray() | 用于将当前字符串内容转换为char数组并返回 |
public static void main(String[] args) {
String str1 = new String("hello");
byte[] bytes = str1.getBytes(); //先将字符串转换为单个字符
for (int i = 0; i < bytes.length; i++) {
//104
//101
//108
//108
//111
System.out.println(bytes[i]); //循环打印每个字符的ASCII码
}
//将byte数组转换为String类型
String str2 = new String(bytes);
System.out.println(str2); //打印hello
//将String转换为char数组类型
char[] chars = str1.toCharArray();
for (int i = 0; i < chars.length; i++) {
//h
//e
//l
//l
//o
System.out.println(chars[i]);
}
//将char数组转换为String
String str3 = new String(chars);
System.out.println(str3); //打印hello
}
方法名 | 功能介绍 |
---|---|
char charAt(int index) | 方法charAt用于返回字符串指定位置的字符。 |
int length() | 返回字符串字符序列的长度 |
boolean isEmpty() | 判断字符串是否为空 |
public static void main(String[] args) {
String str1 = new String("hello");
System.out.println(str1.charAt(0)); //打印h
System.out.println(str1.charAt(3)); //打印l
System.out.println(str1.charAt(4)); //打印o
System.out.println(str1.charAt(5)); //StringIndexOutOfBoundsException
System.out.println(str1.length()); //打印5
System.out.println(str1.isEmpty()); //打印false
}
//请使用两种方式将"12345"转换为整数型12345
//方式1:
String str2 = new String("12345");
int ia = Integer.parseInt(str2);
System.out.println(ia);
//方式2: 利用ASCII码值实现类型转换并打印
//'1' - 48 -> 1
//'1' - '0' -> 1
int ib = 0;
for (int i = 0; i < str2.length(); i++) {
ib = ib * 10 + (str2.charAt(i) - '0'); //ib * 10提升身位
}
System.out.println(ib);
String str = "上海自来水来自海上";
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) != str.charAt(str.length() - i - 1)) {
System.out.println("不是回文");
return;
}
}
System.out.println("是回文");
方法名 | 功能介绍 |
---|---|
int compareTo(String anotherString) | 用于比较调用对象和参数对象的大小关系 |
int compareToIgnoreCase(String str) | 不考虑大小写,也就是’a’和’A’是相等的关系 |
public static void main(String[] args) {
String str1 = new String("hello");
String str2 = new String("world");
//按字符串索引从第一个开始逐一对比,第一个相同和第二个比
//h和w的ASCII码比 'h'-'w' -> 104-119 = -15
System.out.println(str1.compareTo(str2));
//第一个相同,比较第二个 'e'-'h' -> 101-104 = -3
System.out.println(str1.compareTo("hhhhhhhh"));
System.out.println(str1.compareTo("hello")); //打印0
System.out.println(str1.compareToIgnoreCase("HELLO")); //打印0
}
方法名 | 功能介绍 |
---|---|
String concat(String str) | 用于实现字符串的拼接 |
boolean contains(CharSequence s) | 用于判断当前字符串是否包含参数指定的内容 |
String toLowerCase() | 返回字符串的小写形式 |
String toUpperCase() | 返回字符串的大写形式 |
String trim() | 返回去掉前导和后继空白的字符串 |
boolean startsWith(String prefifix) | 判断字符串是否以参数字符串开头 |
boolean startsWith(String prefifix, int toffffset) | 从指定位置开始是否以参数字符串开头 |
boolean endsWith(String suffiffiffix) | 判断字符串是否以参数字符串结尾 |
public static void main(String[] args) {
String str1 = new String(" Hello World ");
System.out.println(str1.contains("hello")); //区分大小写,返回false
System.out.println(str1.contains("Hello")); //返回true
System.out.println(str1.toUpperCase()); //转换为大写 HELLO WORLD
System.out.println(str1); //打印 Hello World 常量 不会因为方法的调用而改变
System.out.println(str1.toLowerCase()); //转换为小写 hello world
System.out.println(str1.trim()); //去除空格首尾两边Hello World
System.out.println(str1.startsWith("H")); //返回false 是以空格开头因此是false
String str2 = str1.trim();
System.out.println(str2.startsWith("H")); //返回true
System.out.println(str2.startsWith("e", 1)); //返回true
System.out.println(str2.endsWith("d")); //返回true
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for (int i = 3; i > 0; i--) {
System.out.println("请输入用户名");
String userName = sc.next();
System.out.println("请输入密码");
String password = sc.next();
if ("admin".equals(userName) && "123456".equals(password)) {
System.out.println("登陆成功!");
break;
}
if (1 == i) {
System.out.println("账户已冻结,请联系管理员!");
break;
}
System.out.println("用户名或密码输入错误,您还有" + (i - 1) + "次机会");
}
sc.close();
}
方法名 | 功能介绍 |
---|---|
int indexOf(int ch) | 用于返回当前字符串中参数ch指定的字符第一次出现的下标 |
int indexOf(int ch, int fromIndex) | 用于从fromIndex位置开始查找ch指定的字符 |
int indexOf(String str) | 在字符串中检索str返回其第一次出现的位置,若找不到返回-1 |
int indexOf(String str, int fromIndex) | 表示从字符串的fromIndex位置开始检索str第一次出现的位置 |
int lastIndexOf(int ch) | 用于返回参数ch指定的字符最后一次出现的下标 |
int lastIndexOf(int ch, int fromIndex) | 用于从fromIndex位置开始查找ch指定字符出现的下标 |
int lastIndexOf(String str) | 返回str指定字符串最后一次出现的下标 |
int lastIndexOf(String str, int fromIndex) | 用于从fromIndex位置开始反向搜索的第一次出现的下标 |
public static void main(String[] args) {
String str = new String("Hello World");
System.out.println(str.indexOf('e')); //有该字符返回索引位置1
System.out.println(str.indexOf('0')); //无该字符返回-1
System.out.println(str.indexOf('o')); //返回第一次出现的位置4
System.out.println(str.indexOf('o',7)); //返回从下标为7的元素之后的元素位置 7
System.out.println(str.indexOf("Wor")); //返回字符串中第一个字符的下标位置6
}
public static void FindDay(String str) {
int indexOf = str.indexOf("Day");
while (indexOf != -1) {
System.out.println(indexOf);
indexOf += "Day".length();
indexOf = str.indexOf("Day", indexOf);
}
}
方法名 | 功能介绍 |
---|---|
String substring(int beginIndex, int endIndex) | 返回字符串中从下标beginIndex(包括)开始到endIndex(不包括)结束的子字符串 |
String substring(int beginIndex) | 返回字符串中从下标beginIndex(包括)开始到字符串结尾的子字符串 |
public static void test() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串");
String str = sc.next();
System.out.println("请输入一个字符");
String next = sc.next();
int indexOf = str.indexOf(next);
String substring = str.substring(indexOf + 1);
System.out.println(substring);
}
正则表达式 | 说明 |
---|---|
[abc] | 只可以出现abc中的任意一个字符 |
[^abc] | 除了abc之外的任意字符 |
[a-z] | 可以出现a-z之间的任意一个字符 |
[a-zA-Z0-9] | 可以出现a-z、A-Z、0-9中的任意一个字符 |
. | 任意一个字符(通常不包含换行符) |
\d | 任意一个数字字符,相当于[0-9] |
\D | 任意一个非数字字符 |
\s | 空白字符,相当于[\t\n\x0B\f\r] |
\S | 非空白字符 |
\w | 任意一个单词字符,相当于[a-zA-Z_0-9] |
\W | 任意一个非单词字符 |
X? | 表示X可以出现一次或一次都没有,也就是0-1次 |
X* | 表示X可以出现0次或多次,也就是0-n次 |
X+ | 表示X可以出现1次或多次,也就是1-n次 |
X{n} | 表示X可以出现n次,也就是=n |
X{n, } | 表示X可以出现至少n次,也就是>=n次 |
X{n,m} | 表示X可以出现n-m次,>=n && <=m次 |
方法名 | 功能介绍 |
---|---|
boolean mathches(String regex) | 判断当前正在调用方法的对象是否满足参数的正则表达式规则 regex -->规则 |
public static void test1() {
String regex = "^\\d{6}$";
System.out.println("请输入银行卡密码");
Scanner scanner = new Scanner(System.in);
while (true) {
String str = scanner.next();
if (str.matches(regex)) {
System.out.println("输入正确!");
break;
} else {
System.out.println("输入错误,请重新输入!");
}
}
}
public static void test2() {
String regex = "[1-9]\\d{4,14}";
System.out.println("请输入QQ账号");
Scanner scanner = new Scanner(System.in);
while (true) {
String str = scanner.next();
if (str.matches(regex)) {
System.out.println("输入正确!");
break;
} else {
System.out.println("输入错误,请重新输入!");
}
}
}
public static void test3(){
String regex = "1[34578]\\d{9}";
System.out.println("请输入手机号");
Scanner scanner = new Scanner(System.in);
while (true) {
String str = scanner.next();
if (str.matches(regex)) {
System.out.println("输入正确!");
break;
} else {
System.out.println("输入错误,请重新输入!");
}
}
}
public static void test4(){
String regex = "(\\d{6})(\\d{4})(\\d{2})(\\d{2})(\\d{3})([0-9|X])";
System.out.println("请输入身份证号");
Scanner scanner = new Scanner(System.in);
while (true) {
String str = scanner.next();
if (str.matches(regex)) {
System.out.println("输入正确!");
break;
} else {
System.out.println("输入错误,请重新输入!");
}
}
}
方法名 | 功能介绍 |
---|---|
String[] split(String regex) | 参数regex为正则表达式,以regex所表示的字符串为分隔符,将字符串拆分成字符串数组 |
String replace(char oldChar, char newChar) | 使用参数newChar替换此字符串中出现的所有参数oldChar |
String replaceFirst(String regex, String replacement) | 替换此字符串匹配给定的正则表达式的第一个子字符串 |
String replaceAll(String regex, String replacement) | 将字符串中匹配正则表达式regex的字符串替换成replacement |
String str1 = "1001,zhangfei,30";
String[] split = str1.split(",");
for (int i = 0; i < split.length; i++) {
//1001
//zhangfei
//30
System.out.println(split[i]);
}
String str2 = "Day Day Up!";
String replace = str2.replace("Day", "PP");
System.out.println(replace); //打印PP PP Up!
String replaceFirst = str2.replaceFirst("Day", "PP");
System.out.println(replaceFirst); //打印PP Day Up!
String str3 = "12321asdsa32123sdkasda";
//将前面数字替换为"#"
String replaceFirst1 = str3.replaceFirst("\\d+", "#");
System.out.println(replaceFirst1); //打印#asdsa32123sdkasda
String replaceFirst1 = str3.replaceFirst("\\d", "#");
System.out.println(replaceFirst1); //打印#2321asdsa32123sdkasda
//将所有字母替换为"A"
String replaceAll = str3.replaceAll("[a-z]+", "A");
System.out.println(replaceAll); //打印12321A32123A
String replaceAll = str3.replaceAll("[a-z]", "A");
System.out.println(replaceAll); //打印12321AAAAA32123AAAAAAA
方法声明 | 功能介绍 |
---|---|
StringBuilder() | 使用无参方式构造对象,容量为16 |
StringBuilder(int capacity) | 使用指定容量的参数来构造对象,容量为参数指定的大小 |
StringBuilder(String str) | 使用指定字符串构造对象,容量为16+传入字符串长度 |
public static void main(String[] args) {
StringBuilder str = new StringBuilder();
System.out.println(str.capacity()); //打印16
System.out.println(str); //打印空字符串
StringBuilder str1 = new StringBuilder(22);
System.out.println(str1.capacity()); //打印22
System.out.println(str1);//打印空字符串
StringBuilder str2 = new StringBuilder("hello world");
System.out.println(str2.capacity()); //打印27
System.out.println(str2);//打印hello world
}
方法声明 | 功能介绍 |
---|---|
StringBuilder insert(int offset, String str) | 插入字符串并返回调用对象的引用,就是自己 |
StringBuilder append(String str) | 在末尾位置追加字符串 |
StringBuilder deleteCharAt(int index) | 将当前字符串中下标为index位置的单个字符删除 |
StringBuilder delete(int start,int end) | 删除字符串(不包括end位置的字符) |
StringBuilder replace(int start,int end,String str) | 替换字符串 |
StringBuilder reverse() | 字符串反转 |
public static void main(String[] args) {
StringBuilder str1 = new StringBuilder("hello");
StringBuilder str2 = str1.insert(0, "abcd");
System.out.println(str1); //打印abcdhello
System.out.println(str2); //打印abcdhello
str2.append("ABCD");
System.out.println(str2); //打印abcdhelloABCD
}
int newCapacity = (oldCapacity << 1) + 2; //向左移位运算
public static void main(String[] args) {
StringBuilder str2 = new StringBuilder("abcdhelloABCD");
str2.deleteCharAt(1); //删除后字符串下标会前移
System.out.println(str2); //打印acdhelloABCD
str2.delete(0,3);
System.out.println(str2); //打印helloABCD
}
public static void main(String[] args) {
StringBuilder str1 = new StringBuilder("hello");
str1.replace(1,4,"ooo");
System.out.println(str1); //打印hoooo
str1.setCharAt(3,'p');
System.out.println(str1); //打印hoopo
str1.reverse();
System.out.println(str1); //打印opooh
}
str1.replace(1,4,"000").delete(0,3).insert(3,"aaaa");
StringBuilder str1 = new StringBuilder("hello");
String string = str1.toString();
StringBuilder builder = new StringBuilder(string);
方法名 | 功能介绍 |
---|---|
static long currentTimeMillis() | 返回当前系统时间距离1970年1月1日0时0分0秒的毫秒数 |
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
System.out.println(" ");
}
System.out.println(System.currentTimeMillis() - startTime);
}
方法名 | 功能介绍 |
---|---|
Date() | 使用无参的方式构造对象,也就是当前系统时间 |
Date(long date) | 根据参数指定毫秒数构造对象, 参数为距离1970年1月1日0时0分0秒的毫秒数 |
long getTime() | 获取调用对象距离1970年1月1日0时0分0秒的毫秒数 |
void setTime(long time) | 设置调用对象为距离基准时间time毫秒的时间点 |
public static void main(String[] args) {
Date date = new Date();
System.out.println(date); //打印Wed Oct 07 10:09:20 CST 2020
Date date1 = new Date(1000);
System.out.println(date1); //打印Thu Jan 01 08:00:01 CST 1970
long time = date.getTime();
System.out.println(time); //等同于System.currentTimeMills()
date.setTime(1000); //等同于Date(long date)
System.out.println(date); //打印Thu Jan 01 08:00:01 CST 1970
}
方法名 | 功能介绍 |
---|---|
SimpleDateFormat() | 使用无参方式构造对象 |
SimpleDateFormat(String pattern) | 根据参数指定的模式来构造对象,模式主要有: y-年 M-月 d-日 H-时 m-分 s-秒 |
final String format(Date date) | 用于将日期类型转换为文本类型 |
Date parse(String source) | 用于将文本类型转换为日期类型 |
public static void main(String[] args) throws ParseException {
Date date = new Date();
System.out.println(date); //Wed Oct 07 10:20:16 CST 2020
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(date);
System.out.println(format); //2020-10-07 10:20:16
Date parse = simpleDateFormat.parse(format);
System.out.println(parse); //Wed Oct 07 10:20:16 CST 2020
}
方法名 | 功能介绍 |
---|---|
static Calendar getInstance() | 用于获取Calendar类型的引用 |
void set(int year, int month, int date, int hourOfDay, int minute, int second) | 用于设置年月日时分秒信息 |
Date getTime() | 用于将Calendar类型转换为Date类型 |
void set(int fifield, int value) | 设置指定字段的数值 |
void add(int fifield, int amount) | 向指定字段增加数值 |
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(2008, 8 - 1, 8, 20, 8, 8);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format = simpleDateFormat.format(calendar.getTime());
System.out.println(format); //打印2008-08-08 20:08:08
calendar.set(Calendar.YEAR, 2018);
calendar.add(Calendar.MONTH,2);
SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format1 = simpleDateFormat.format(calendar.getTime());
System.out.println(format1); //打印2018-10-08 20:08:08
}
既然Calendar是个抽象类不能创建对象,那么为什么下面的方法可以获取Calendar类型的引用呢?
Calendar.getInstance()
答:由源码可知,返回的并不是Calendar类型的对象,而是Calendar的子类BuddhistCalendar、JapaneseImperialCalendar、GregorianCalendar等类型的对象形成多态
Calendar cal = null;
if (aLocale.hasExtensions()) {
String caltype = aLocale.getUnicodeLocaleType("ca");
if (caltype != null) {
switch (caltype) {
case "buddhist":
cal = new BuddhistCalendar(zone, aLocale);
break;
case "japanese":
cal = new JapaneseImperialCalendar(zone, aLocale);
break;
case "gregory":
cal = new GregorianCalendar(zone, aLocale);
break;
}
}
}
if (cal == null) {
// If no known calendar type is explicitly specified,
// perform the traditional way to create a Calendar:
// create a BuddhistCalendar for th_TH locale,
// a JapaneseImperialCalendar for ja_JP_JP locale, or
// a GregorianCalendar for any other locales.
// NOTE: The language, country and variant strings are interned.
if (aLocale.getLanguage() == "th" && aLocale.getCountry() == "TH") {
cal = new BuddhistCalendar(zone, aLocale);
} else if (aLocale.getVariant() == "JP" && aLocale.getLanguage() == "ja"
&& aLocale.getCountry() == "JP") {
cal = new JapaneseImperialCalendar(zone, aLocale);
} else {
cal = new GregorianCalendar(zone, aLocale);
}
}
return cal;
JDK 1.0中包含了一个java.util.Date类,但是它的大多数方法已经在JDK 1.1引入Calendar类之后被弃用了。而Calendar并不比Date好多少。它们面临的问题是:
Date类中的年份是从1900开始的,而月份都从0开始。
格式化只对Date类有用,对Calendar类则不能使用。
非线程安全等。
Java 8通过发布新的Date-Time API来进一步加强对 日期与时间的处理。
java.time包:该包日期/时间API的基础包。
java.time.chrono包:该包提供对不同日历系统的访问。
java.time.format包:该包能够格式化和解析日期时间对象。
java.time.temporal包:该包包含底层框架和扩展特性。
java.time.zone包:该包支持不同时区以及相关规则的类。
方法名 | 功能介绍 |
---|---|
static LocalDate now() | 在默认时区中从系统时钟获取当前日期 |
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.println(date); //打印2020-10-07
}
方法名 | 功能介绍 |
---|---|
static LocalTime now() | 从默认时区的系统时间中获取当前时间 |
static LocalTime now(ZoneId zone) | 获取指定时区的当前时间 |
方法名 | 功能介绍 |
---|---|
static LocalDateTime now() | 从默认时区的系统时间中获取当前日期时间 |
static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second) | 根据参数指定的年月日时分秒信息来设置日期时间 |
int getYear() | 获取年份字段的数值 |
int getMonthValue() | 获取1到12之间的月份字段 |
int getDayOfMonth() | 获取日期字段 |
int getHour() | 获取小时数 |
int getMinute() | 获取分钟数 |
int getSecond() | 获取秒数 |
… | … |
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.println(date); //打印2020-10-07
LocalTime localTime = LocalTime.now();
System.out.println(localTime); //打印10:59:55.236568700
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println(localDateTime); //打印2020-10-07T10:59:55.237566
LocalDateTime of = LocalDateTime.of(2008, 8, 8, 20, 8, 8);
System.out.println(of); //打印2008-08-08T20:08:08
}
方法名 | 功能介绍 |
---|---|
static Instant now() | 从系统时钟上获取当前时间 |
OffffsetDateTime atOffffset(ZoneOffffset offffset) | 将此瞬间与偏移量组合以创建偏移日期时间 |
static Instant ofEpochMilli(long epochMilli) | 根据参数指定的毫秒数来构造对象,参数为距离1970年1月1 日0时0分0秒的毫秒数 |
long toEpochMilli() | 获取距离1970年1月1日0时0分0秒的毫秒数 |
public static void main(String[] args) {
Instant instant = Instant.now();
//并不是系统的默认时区 本初子午线 -8小时
System.out.println(instant); //打印2020-10-07T03:14:06.060947100Z
//加上8小时 偏移日期时间
OffsetDateTime time = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(time); //打印2020-10-07T11:17:10.435331100+08:00
long milli = instant.toEpochMilli();
System.out.println(milli); //打印1602040719046
Instant instant1 = Instant.ofEpochMilli(1000);
System.out.println(instant1); //打印1970-01-01T00:00:01Z
}
方法名 | 功能介绍 |
---|---|
static DateTimeFormatter ofPattern(String pattern) | 根据参数指定的模式来获取对象 |
String format(TemporalAccessor temporal) | 将参数指定日期时间转换为字符串 |
TemporalAccessor parse(CharSequence text) | 将参数指定字符串转换为日期时间 |
public static void main(String[] args) {
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dateTimeFormatter.format(LocalDateTime.now());
System.out.println(format); //打印2020-10-07 11:23:23
TemporalAccessor parse = dateTimeFormatter.parse(format);
System.out.println(parse); //打印{},ISO resolved to 2020-10-07T11:24:01
}
方法名 | 功能介绍 |
---|---|
boolean add(E e); | 向集合中添加对象 |
boolean addAll(Collection extends E> c) | 用于将参数指定集合c中的所有元素添加到当前集合中 |
boolean contains(Object o); | 判断是否包含指定对象 |
boolean containsAll(Collection> c) | 判断是否包含参数指定的所有对象 |
boolean retainAll(Collection> c) | 保留当前集合中存在且参数集合中存在的所有对象 |
boolean remove(Object o); | 从集合中删除对象 |
boolean removeAll(Collection> c) | 从集合中删除参数指定的所有对象 |
void clear(); | 清空集合 |
int size(); | 返回包含对象的个数 |
boolean isEmpty(); | 判断是否为空 |
boolean equals(Object o) | 判断是否相等 |
int hashCode() | 获取当前集合的哈希码值 |
Object[] toArray() | 将集合转换为数组 |
Iterator iterator() | 获取当前集合的迭代器 |
public static void main(String[] args) {
//接口类型的引用指向实现类的对象,形成多态
Collection c1 = new ArrayList();
System.out.println(c1); //集合中无内容,打印[]
boolean b1 = c1.add("111");
System.out.println(b1); //添加成功 打印true
b1 = c1.add(123);
System.out.println(b1); //添加成功 打印true
c1.add(new Date());
System.out.println(c1); //打印[111, 123, Wed Oct 07 12:21:47 CST 2020]
}
public static void main(String[] args) {
//接口类型的引用指向实现类的对象,形成多态
Collection c1 = new ArrayList();
c1.add("111");
c1.add(new Person(1, "zhangfei"));
System.out.println(c1);
//使用参数对象与集合中已有元素依次进行比较,比较方式调用Object中的equals方法
//当Person类中没有重写equals方法时,则调用Object中的equals方法
boolean b1 = c1.contains("111");
System.out.println(b1); //集合中包含111,打印true
b1 = c1.contains(new Person(1, "zhangfei"));
System.out.println(b1); //两个Person对象内存地址不同,打印false
}
public static void main(String[] args) {
//接口类型的引用指向实现类的对象,形成多态
Collection c1 = new ArrayList();
c1.add("111");
c1.add(new Person(1, "zhangfei"));
Collection c2 = new ArrayList();
c2.add(new Person(1, "zhangfei"));
c2.add(5);
//removeAll实际上就是一个一个元素删除
boolean b1 = c1.removeAll(c2);
System.out.println(c1); //打印[111]
System.out.println(b1);
}
public static void main(String[] args) {
//接口类型的引用指向实现类的对象,形成多态
Collection c1 = new ArrayList();
c1.add("111");
c1.add(new Person(1, "zhangfei"));
Object[] objects = c1.toArray();
//集合转换为数组类型
System.out.println(Arrays.toString(objects));
//数组转换为集合类型
Collection list = Arrays.asList(objects);
System.out.println(list);
}
方法名 | 功能介绍 |
---|---|
boolean hasNext() | 判断集合中是否有可以迭代/访问的元素 |
E next() | 用于取出一个元素并指向下一个元素 |
void remove() | 用于删除访问到的最后一个元素 |
public static void main(String[] args) {
Collection c1 = new ArrayList();
c1.add("123");
c1.add(new Person(1,"zhangfei"));
c1.add(100);
Iterator iterator = c1.iterator();
while (iterator.hasNext()){
//123
//Person{id=1, name='zhangfei'}
//100
System.out.println(iterator.next());
}
}
public static void main(String[] args) {
Collection c1 = new ArrayList();
c1.add("123");
c1.add(new Person(1, "zhangfei"));
c1.add(100);
Iterator iterator = c1.iterator();
StringBuilder sb = new StringBuilder();
sb.append("[");
while (iterator.hasNext()) {
Object obj = iterator.next();
if (!iterator.hasNext()) {
sb.append(obj).append("]");
} else {
sb.append(obj).append(",");
}
}
System.out.println(sb);
}
public static void main(String[] args) {
Collection c1 = new ArrayList();
c1.add("123");
c1.add(new Person(1, "zhangfei"));
c1.add(100);
Iterator iterator = c1.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
if("123".equals(obj)){
c1.remove(obj); //java.util.ConcurrentModificationException
}
}
System.out.println(c1);
}
public static void main(String[] args) {
Collection c1 = new ArrayList();
c1.add("123");
c1.add(new Person(1, "zhangfei"));
c1.add(100);
for (Object obj : c1) {
System.out.println(obj);
}
}
java.util.List集合是Collection集合的子类,该集合中允许有重复的元素,并且有先后放入的顺序
List集合的主要实现类:ArrayList类、LinkedList类、Stack类、Vector类
public static void main(String[] args) {
//由源码可知,当new对象时并没有申请数组的内存空间
List list = new ArrayList();
//当添加调用add方法时,会给数组申请长度为10的一维数组,扩容原理是原长度的1.5倍
list.add("one");
System.out.println(list);
}
/**
* Links e as last element.
*/
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}
方法名 | 功能介绍 |
---|---|
void add(int index, E element) | 向集合中指定位置添加元素 |
boolean addAll(int index, Collection extends E> c) | 向集合中添加所有元素 |
E get(int index) | 从集合中获取指定位置元素 |
int indexOf(Object o) | 查找参数指定的对象 |
int lastIndexOf(Object o) | 反向查找参数指定的对象 |
E set(int index, E element) | 修改指定位置的元素 |
E remove(int index) | 删除指定位置的元素 |
List subList(int fromIndex, int toIndex) | 用于获取子List |
public static void main(String[] args) {
List list = new ArrayList();
list.add("one");
list.add("two");
list.add("three");
list.add("four");
System.out.println(list); //[one, two, three, four]
//子集合和当前集合共用一块内存空间
List subList = list.subList(1, 3); //[two, three]
System.out.println(subList);
list.remove(1);
System.out.println(list); //[one, three, four]
subList = list.subList(1, 3);
System.out.println(subList); //[three, four]
}
public static void main(String[] args) {
Stack stack = new Stack();
for (int i = 1; i < 6; i++) {
stack.push(i * 11);
}
System.out.println(stack);
System.out.println(stack.peek());
int len = stack.size();
for (int i = 0; i < len ; i++) {
Object pop = stack.pop();
System.out.println(pop);
}
}
方法名 | 功能介绍 |
---|---|
boolean offffer(E e) | 将一个对象添加至队尾,若添加成功则返回true |
E poll() | 从队首删除并返回一个元素 |
E peek() | 返回队首的元素(但并不删除) |
public static void main(String[] args) {
Queue queue = new LinkedList();
for (int i = 1; i <= 5; i++) {
boolean offer = queue.offer(i * 11);
System.out.println(queue);
}
//查看队首元素
System.out.println(queue.peek());
int len = queue.size();
//循环打印队列内元素
for (int i = 0; i < len; i++) {
System.out.println(queue.poll());
}
}
public static void main(String[] args) {
//菱形特性,后面<>里面的内容可以省略
List<Integer> list = new ArrayList<>();
list.add(1);
list.add("one"); //编译报错
list.add(new Person(1, "zhangfei")); //编译报错
}
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
List<Double> list1 = new ArrayList<>();
list1 = list; //Error
}
#### 底层原理
泛型的本质就是参数化类型,也就是让数据类型作为参数传递,其中E相当于形式参数负责占位,而使用集合时<>中的数据类型相当于实际参数,用于给形式参数E进行初始化,从而使得集合中所有的E被实际参数替换,由于实际参数可以传递各种各样广泛的数据类型,因此得名为泛型。
如:
//其中i叫做形式参数,负责占位 其中E叫做形式参数,负责占位
//int i = 10; E = String;
//int i = 20; E = Integer;
public static void show(int i) { public interface List {
… …
} }
//其中10叫做实际参数,负责给形式参数初始化 //其中String叫做实际参数
show(10); List lt1 = …;
show(20); List lt2 = …;
package com.lagou.generic;
/**
* 自定义泛型类Person,其中T相当于形式参数负责占位,具体数值由实参决定
* @param 看作是一种名字为T的数据类型
*/
public class Person<T> {
private String name;
private int age;
private T gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public T getGender() {
return gender;
}
public void setGender(T gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", gender=" + gender +
'}';
}
}
public class PersonTest {
public static void main(String[] args) {
Person person = new Person();
person.setGender("男");
Person<Integer> person1 = new Person<>();
person1.setGender(1);
person1.setGender("男"); //Error
}
}
//不保留泛型,且没有指定类型,此时Person类中的T默认为Object类型
//public class SubPerson extends Person {
//保留泛型且指定类型,此时Person类中的T是String类型
//public class SubPerson extends Person {
//保留父类的泛型,可以在构造对象时来指定T的类型
//public class SubPerson extends Person {
//保留父类泛型,且还可以自定义自己的泛型
public class SubPerson<T, T1> extends Person<T> {
}
public class SubPerson<T> extends Person<T> {
public static <T1> void printArray(T1[] arr) {
for (T1 t1 : arr) {
System.out.println(t1);
}
}
public static void main(String[] args) {
Integer[] arr = {11, 22, 33, 44, 55};
SubPerson.printArray(arr);
}
}
public class SubPerson<T> extends Person<T> {
public static void main(String[] args) {
List<SubPerson> subPerson = new ArrayList<>();
List<Person> person = new ArrayList<>();
//person = subPerson; //Error 类型之间不具备父子类关系
}
}
public class SubPerson<T> extends Person<T> {
public static void main(String[] args) {
List<SubPerson> subPerson = new ArrayList<>();
List<Person> person = new ArrayList<>();
//使用通配符作为泛型类型的父类
List<?> list = new ArrayList<>();
list = subPerson; //可以发生List类型到List>类型的转换
list = person; //可以发生List类型到List>类型的转换
list.add(new Person()); //Error 不能存放Person类型的对象
list.add(new SubPerson()); //Error 不能存放SubPerson类型的对象
list.get(0); //返回的是Object类型
}
}
public class SubPerson<T> extends Person<T> {
public static void main(String[] args) {
List<? extends Person> list1 = new ArrayList<>();
//不支持添加元素
list1.add(new SubPerson()); //Error
list1.add(new Person()); //Error
Person person1 = list1.get(0); //返回的是Person类型
List<? super Person> list2 = new ArrayList<>();
list2.add(new Person()); //可以添加
list2.add(new SubPerson()); //可以添加
list2.add(new Object()); //Error
Object obj = list2.get(0); //返回的是Object类型
}
}
public static void main(String[] args) {
Set<String> set = new HashSet<>();
boolean b1 = set.add("two");
System.out.println(b1); //打印true
b1 = set.add("two");
System.out.println(b1); //打印false
set.add("one");
set.add("three");
System.out.println(set); //打印[one, two, three] 无序
}
public static void main(String[] args) {
Set<String> set = new LinkedHashSet<>();
boolean b1 = set.add("two");
System.out.println(b1); //打印true
b1 = set.add("two");
System.out.println(b1); //打印false
set.add("one");
set.add("three");
System.out.println(set); //打印[two, one, three]
}
节点20叫做节点30的左子节点
节点40叫做节点30的右子节点
所有的左子节点都小于右子节点
所有的左子树内节点都小于根节点,所有的右子树内节点都大于根节点
红黑树是一种特殊的有序二叉树
由于TreeSet集合的底层采用红黑树进行数据的管理,当有新元素插入到TreeSet集合时,需要使用新元素与集合中已有的元素依次比较来确定新元素的合理位置。
比较元素大小的规则有两种方式:
使用元素的自然排序规则进行比较并排序,让元素类型实现java.lang.Comparable接口;
使用比较器规则进行比较并排序,构造TreeSet集合时传入java.util.Comparator接口;
自然排序的规则比较单一,而比较器的规则比较多元化,而且比较器优先于自然排序;
public static void main(String[] args) {
Set<String> set = new TreeSet<>();
set.add("aa");
set.add("cc");
set.add("bb");
//由于TreeSet底层是红黑树,因此元素有大小次序,默认从小到大打印
//ASCII码
System.out.println(set); //打印[aa, bb, cc]
}
}
public class Student implements Comparable<Student> {
private int age;
private String name;
public Student() {
}
public Student(int age, String name) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
@Override
public int compareTo(Student o) {
//String类已经重写了compareTo方法
//return this.getName().compareTo(o.getName()); //根据姓名比较
return this.getAge()-o.getAge(); //根据年龄比较
}
}
@Override
public int compareTo(Student o) {
return this.getName().compareTo(o.getName()) == 0 ?
this.getAge() - o.getAge() : this.getName().compareTo(o.getName());
}
Comparator<Student> comparator = (o1, o2) -> {
return o1.getName().compareTo(o2.getName()) == 0 ?
o1.getAge() - o2.getAge() : o1.getName().compareTo(o2.getName());
};
Set<Student> students1 = new TreeSet<>(comparator);
students1.add(new Student(18, "关羽"));
students1.add(new Student(17, "张飞"));
students1.add(new Student(30, "刘备"));
System.out.println(students1);
方法名 | 功能介绍 |
---|---|
V put(K key, V value) | 将Key-Value对存入Map,若集合中已经包含该Key,则替换该Key所对应的Value,返回值为该Key原来所对应的Value,若没有则返回null |
V get(Object key) | 返回与参数Key所对应的Value对象,如果不存在则返回null |
boolean containsKey(Object key); | 判断集合中是否包含指定的Key |
boolean containsValue (Object value); | 判断集合中是否包含指定的Value |
V remove(Object key) | 根据参数指定的key进行删除 |
Set keySet() | 返回此映射中包含的键的Set视图 |
Collection values() | 返回此映射中包含的值的Set视图 |
Set |
返回此映射中包含的映射的Set视图 |
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
System.out.println(map); //打印{1=one, 2=two, 3=three}
map.put("1","oneone");
System.out.println(map); //打印{1=oneone, 2=two, 3=three} 实现了元素的修改
}
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
Set<String> strings = map.keySet();
for (String string : strings) {
//one
//two
//three
System.out.println(map.get(string));
}
}
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
Collection<String> values = map.values();
System.out.println("values = " + values); //打印values = [one, two, three]
}
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
Set<Map.Entry<String, String>> entries = map.entrySet();
//打印entries = [1=one, 2=two, 3=three]
System.out.println("entries = " + entries);
for (Map.Entry<String, String> entry : entries) {
//1=one
//2=two
//3=three
System.out.println(entry);
}
}
方法名 | 功能介绍 |
---|---|
static |
根据元素的自然顺序返回给定集合的最大元素 |
static T max(Collection extends T> coll, Comparator super T> comp) | 根据指定比较器引发的顺序返回给定集合的最大元素 |
static |
根据元素的自然顺序返回给定集合的最小元素 |
static T min(Collection extends T> coll, Comparator super T> comp) | 根据指定比较器引发的顺序返回给定集合的最小元素 |
static void copy(List super T> dest, List extends T> src) | 将一个列表中的所有元素复制到另一个列表中 |
public static void main(String[] args) {
List<Integer> integerList = Arrays.asList(11,22,33,44,55);
System.out.println("最大值是:" + Collections.max(integerList)); //最大值是:55
System.out.println("最小值是:" + Collections.min(integerList)); //最大值是:11
}
方法名 | 功能介绍 |
---|---|
static void reverse(List> list) | 反转指定列表中元素的顺序 |
static void shuffle(List> list) | 使用默认的随机源随机置换指定的列表 |
static |
根据其元素的自然顺序将指定列表按升序排序 |
static void sort(List list, Comparator super T> c) | 根据指定比较器指定的顺序对指定列表进行排序 |
static void swap(List> list, int i, int j) | 交换指定列表中指定位置的元素 |
public static void main(String[] args) {
List<Integer> lt1 = Arrays.asList(11, 22, 33, 44, 55);
Collections.reverse(lt1);
System.out.println(lt1); //[55, 44, 33, 22, 11]
Collections.swap(lt1, 0, 4);
System.out.println(lt1); //[11, 44, 33, 22, 55]
Collections.sort(lt1);
System.out.println(lt1); //[11, 22, 33, 44, 55]
Collections.shuffle(lt1); //随机置换
System.out.println(lt1); //[22, 33, 44, 55, 11]
List<Integer> lt2 = Arrays.asList(new Integer[10]); //Source does not fit in dest
//表示将lt1中的内容copy到lt2中
Collections.copy(lt2, lt1);
System.out.println(lt2); //[55, 11, 33, 22, 44, null, null, null, null, null]
}