2021-04-07复习java基础
ArrayList数组
- 数组的长度不可以发生改变。
- 但是ArrayList集合的长度是可以随意变化的。
- 对于Arraylist来说,有一个尖括号代表泛型。
- 泛型:也就是装在集合当中的所有元素,全都是统一的什么类型。注意:泛型只能是引用类型,不能是基本类型。
public static void main(String[]args){
///创建了一个ArrayList集合,集合的名称是list,里面装的全都是string字符串类型的数据
//右侧的尖括号内部可以不写内容,但是<>本身还是要写的。
ArrayList<String> list = new ArrayList<>();
System. out. println( list); // []
//向集合当中添加—些数据,需要用到add方法。
list.add("王八蛋");
System.out.println(list);
注意:
泛型只能是引用类型,不能是基本类型
ArrayList当中的常用方法有:
- public boolean add(E e):向集合当中添加元素,参数的类型和泛型一致。返回值代表添加成功
- public E get(int index):从集合当中获取元素,参数是索引编号,返回值就是对应位置的元素。
- public E remove(int index): 从集合当中删除元素,参数是索引编号,返回值就是被删除掉的元素。
- public int size(): 获取集合的尺寸长度,返回值是集合中包含的元素个数。
public static void main(String[]args) {
ArrayList<String> list = new ArrayList<>();
System.out.println(list); // []
//向集合中添加元素:add
boolean success = list.add(“柳岩");
System.out.println(list); //[柳岩j
System.out.println(“添加的动作是否成功:" + success); // true
list.add("高圆圆");
list.add("赵又廷");
list.add("李小璐");
list.add("贾乃亮");
System.out.println(list); //[柳岩,高圆圆,赵又廷,李小璐,贾乃亮
//从集合中获取元素: get。索引值从e开始
String name = list.get(2);
system.out.println("第2号索引位置:" + name);//赵又廷
//从集合中删除元素: remove。索引值从e开始。
String whoRemoved = list.remove( index: 3);
system.out.println(“被删除的人是:" +whoRemoved);l/李小璐System.out.println(list); //[柳岩,高圆圆,赵又廷,贾乃亮]
//获取集合的长度尺寸,也就是其中元素的个数
int size = list.size();
System.out.println(“集合的长度是:" + size);
}
遍历集合
public static void main(String[]args) {
ArrayList<String> list = new ArrayList<>();
list.add(“迪丽热巴");
list.add("古力娜扎");
list.add("玛尔扎哈");
//遍历集合
for (int i = o; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
解决集合存入数字问题_包装类
如果希望向集合ArrayList当中存储基本类型数据,必须使用基本类型对应的“包装类”。
基本类型 | 包装类(引用类型,包装类都位于java.lang包下) |
---|---|
byte | Byte |
short | Short |
int | Integer【特殊】 |
long | Long |
fLoat | FLoat |
double | Double |
char | Character【特殊】 |
booLean | BooLean |
演示如下
public static void main(String[]args) {
ArrayList<Integer> listc = new ArrayList<>();listC.add( 100);
listC.add(200);
System.out.println(listc); // [100,200]
//这里实现了自动拆箱的功能
int num = listC.get(1);
System.out.print1n(“第1号元素是:" +num);
}
字符串
java .lang. String类代表字符串。
API当中说: Java程序中的所有字符串字面值(如“abc”)都作为此类的实例实现。
其实就是说:程序当中所有的双引号字符串,都是string类的对象。(就算没有new,也照样是。)
字符串的特点:
- 字符串的内容永不可变。【重点】
- 正是因为字符串不可改变,所以字符串是可以共享使用的。
- 字符串效果上相当于是char[ ]字符数组,但是底层原理是byte[ ]字节数组。
三种构造方法:
5. public String():创建一个空白字符串,不含有任何内容。
6. public String(char[ ] array):根据字符数组的内容,来创建对应的字符串。
7. public String(byte[ ] array):根据字节数组的内容,来创建对应的字符串。
—种直接创建:
String str = “HeLlo”; 右边直接用双引号
public static void main(String[]args) {
//使用空参构造
String str1 = new String();//小括号留空,说明字符串什么内容都没有。
system.out.print1n("第1个字符串:" + str1);
//根据字符数组创建字符串
char[]charArray = i 'A','B', 'C'};
String str2 = new string(charArray ) ;
System.out.println(“第2个字符串:“ + str2);
//根据字节数组创建字符串
byte[] byteArray = i 97,98,99 };
String str3 = new String(byteArray ) ;
System.out.println("第3个字符串:" + str3);
//直接创建
String str4 = "He1lo" ;
System.out.println(“第4个字符串:" + str4);
}
字符串常量池内存图分析
注意:
1.对于引用类型来说,==进行的是地址值的比较。
2.双引号直接写的字符串在常量池当中,new的不在池当中。
==是进行对象的地址值比较,如果确实需要字符串的内容比较
可以使用两个方法:
- public boolean equals(Object obj):参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true,否则返回false。备注:任何对象都能用object进行接收。
- public boolean equalsIgnoreCase(String str):忽略大小写,进行内容比较。|
String strA = "ava" ;
String strB = "java" ;
System.out.println(strA.equals(strB)); // false,严格区分大小写
System.out.println(strA.equalsIgnoreCase(strB)); // true,忽略大小写Ⅰ
注意事项:
1.任何对象都能用object进行接收。
2. equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。
3. 如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
推荐:"abc ".equals(str)不推荐:str.equals( “abc”)【后面这个容易报空指针异常】
String str5 = null;
System.out.println("abe".equals(str5));//推荐:false
system.out.printLn(str5.equals( " abc"));//不推荐:报错,空指针异常NuLLPointerException
String当中与获取相关的常用方法有:
- public int length( ):获取字符串当中含有的字符个数,拿到字符串长度。
- public String concat(String str):将当前字符串和参数字符串拼接成为返回值新的字符串。
- public char charAt(int index):获取指定索引位置的单个字符。(索引从0开始。)
- public int index0f (String str):查找参数字符串在本字符串当中首次出现的索引位置,如果没有返回-1值。
public static void main(String[] args) {
//获取字符串的长度
int length = "asdasfeutrvauevbueyvb" .length( );
System.out.println("字符串的长度是:" + length);//拼接字符串
String str1 = "He1lo";
String str2 ="wor1d" ;
String str3 = str1.concat(str2);
System.out.println(str3); // Helloworld,新的字符串
System.out.print1n( "========");
//获取指定索引位置的单个字符
char ch = "He11o".charAt(1);
System.out.println("在1号索引位置的字符是:" + ch);
System.out.println("=========");
//获取指定索引位置的单个字符
char ch = "He11o".charAt(1);
System.out.println(“在1号索引位置的字符是:" +ch);
System.out.println( "=========");
//查找参数字符串在本来字符串当中出现的第一次索引位置i
//如果根本没有,返回-1值
String original = "He1lowor1dHe1lowor1d" ;
int index = original.indexOf("11o");
System.out.print1n(“第一次索引值是:“ + index); // 2
System.out.println("He1lowor1d".indexOf( "abc")); // -1
}
String当中与转换相关的常用方法有:
- public char[ ] toCharArray():将当前字符串拆分成为字符数组作为返回值。
- public byte[] getBytes()。获得当前字符串底层的字节数组。
- public String replace(CharSequence oldString,CharSequence
newString):将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串。
public static void main(String[]args) {
//转换成为字符数组
char[] chars = "He11o".toCharArray();
System.out.println( chars[o]);// H
System.out.println(chars. length); // 5
System.out.println("==============");
//转换成为字节数组
byte[] bytes = "abc".getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
System.out- println( "==============");
//字符串的内容替换
String str1 = "How do you do?" ;
String str2 = str1.replace( target: "o",replacement:“*");
system.out.println(str1); // How do you do?
System.out.println(str2); // H*w d* y*u d*?
System.out.println("==============" );
String lang1 = "会不会玩儿呀!你大爷的!你大爷的!你大爷的!! ! ";
String lang2 = lang1.replace( target: “你大爷的",replacement:“****");
System.out.println(lang2);//会不会玩儿呀!****!****!****! ! !
}
分割字符串的方法:
- public String[ ] split(String regex):按照参数的规则,将字符串切分成为若干部分。
public static void main(String[]args) {
String str1 = "aaa,bbb,ccc";
String[]array1 = str1.split( regex: ",");
for (int i = 0; i < array1. length; i++) {
System.out.println(array1[i]);
}
}
静态内存图:
注意:
根据类名称访问静态成员变量的时候,全程和对象就没关系,只和类有关系。
静态代码块的格式是:
public class类名称{
static {
//静态代码块的内容
}
}
特点:
- 当第一次用到本类时,静态代码块执行唯一的一次。
- 静态内容总是优先于非静态,所以静态代码块比构造方法先执行。
- 静态代码块的典型用途:用来—次性地对静态成员变量进行赋值。
Arrays工具类
Arrays是一个与数组相关的工具类,里面提供了大量静态方法
用来实现数组常见的操作:
- public static String
toString(数组):将参数数组变成字符串(按照默认格式:[元素1,元素2,元素3…]) - public static void sort(数组):按照默认升序(从小到大)对数组的元素进行排序。
public static void main(String[]args) {
int[]intArray = {10,20, 30};
//将int[]数组按照默认格式变成字符串
String intStr = Arrays.toString(intArray );
System.out.println(intStr); / / [10,20,30]
int[]array1 = i2,1,3,10,6};
Arrays.sort( array1);
System.out.println(Arrays.toString(array1));// [1,2,3,6,10]
String[array2 = { "bbb", "aaa", "ccc"};
Arrays.sort(array2);
System.out.printin(Arrays.toString(array2)); // [aaa,bbb,ccc]
}
注意事项:
- 如果是数值,sort默认按照升序从小到大
- 如果是字符串,sort默认按照字母升序
- 如果是自定义的类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持。
*题目:
请使用Arrays相关的API,将一个随机字符串中的所有字符升序排列,并倒序打印。
public static void main(String[] args) {
String str = "asv76agfqwdfvasdfvjh";
//如何进行升序排列:sort
//必须是一个数组,才能用Arrays.sort方法
// String -->数组,用toCharArray
char[]chars = str.toCharArray();
Arrays.sort( chars); //对字符数组进行升序排列
//需要倒序遍历
for (int i = chars. length - 1; i >= 0; i--) {
System.out.println(chars[i]);
}
}
数学工具类Math
java.util.Math类是数学相关的工具类,里面提供了大量的静态方法,
完成与数学运算相关的操作:
- public static double abs( double num):获取绝对值。有多种重载。
- public static double ceil (double num):向上取整。
- pblic static double floor( double num):向下取整。
- public static long round(double num):四舍五入。
- Math.PI代表近似的圆周率常量。
public static void main(String[ ] args) {
//获取绝对值
System.out.println(Math.abs(3.14));//3.14
System.out.println(Math.abs(0));//0
System.out.println(Math.abs(-2.5)); // 2.5
System.out.println( "================");
//向上取整
System.out.println(Math.ceil(3.9)); // 4.0
System.out.println(Math.ceil(3.1)); // 4.0
System.out.println(Math.ceil(3.0)); // 3.0
//四舍五入
System.out.println( "================");
System.out.println(Math.round( 20.4));// 20
System.out.println(Math.round( 10.5)); // 11