Java基础学习笔记(六)—— 常用API(2)

1 ArrayList类

数组的长度是固定的,无法适应数据变化的需求。为了解决这个问题,Java提供了另一个容器 java.util.ArrayList 集合类,让我们可以更便捷的存储和操作对象数据。

java.util.ArrayList 是大小可变的数组的实现,存储在内的数据称为元素。此类提供一些方法来操作内部存储的元素。ArrayList 中可不断添加元素,其大小也自动增长。

对于ArrayList来说,有一个尖括号<E>代表泛型。
泛型:也就是装在集合当中的所有元素,全都是统一的什么类型。

注意:

  • 泛型只能是引用类型(类、接口、数组、字符串),不能是基本类型
  • 直接打印对象 / 数组名,输出的是对象 / 数组的地址值,而对于ArrayList集合来说,直接打印得到的不是地址值,而是内容。如果内容是空,得到的是空的中括号:[]

1.1 创建ArrayList对象

// 格式
ArrayList<String> list = new ArrayList<>();

注意:

  • 从JDK 1.7+开始,右侧的尖括号内部可以不写内容,但是 <> 本身还是要写的。
  • 参数E e,在构造ArrayList对象时, <E> 指定了什么数据类型,那么 add(E e) 方法中,只能添加什么数据类型的对象。
  • 查看构造方法 public ArrayList() :构造一个内容为空的集合。

1.2 ArrayList对象常用操作

(1)public boolean add(E e) :将指定的元素添加到此集合的尾部,返回值代表添加的动作是否成功
(2)public E remove(int index) :移除此集合中指定位置上的元素。返回被删除的元素。
(3)public E get(int index) :返回此集合中指定位置上的元素。返回获取的元素。
(4)public int size() :返回此集合中的元素数。遍历集合时,可以控制索引范围,防止越界。
(5)遍历集合

 public static void main(String[] args) {
    
    
 		// ArrayList<String> list = new ArrayList<String>();
        ArrayList<String> list = new ArrayList<>();
        list.add("迪丽热巴");// 注意添加内容必须是字符串
        list.add("古力娜扎");
        list.add("玛尔扎哈");
        System.out.println(list); // [迪丽热巴, 古力娜扎, 玛尔扎哈]
		
        // 遍历集合
        for (int i = 0; i < list.size(); i++) {
    
     //list.fori+回车——>自动生成代码
            System.out.println(list.get(i));
        }
    }

注意:

  • 对于ArrayList集合来说,add添加动作一定是成功的,所以返回值可用可不用。但是对于其他集合来说,add添加动作不一定成功
  • 字符串.length()数组名.lengthArrayList集合名.size()

1.3 ArrayList存储基本数据类型

在这里插入图片描述

ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似 <int> 不能写,但是存储基本数据类型对应的包装类型是可以的。所以,想要存储基本类型数据,<> 中的数据类型,必须转换后才能编写,转换写法如下:
在这里插入图片描述
注意:

  • 我们发现,只有 IntegerCharacter 需要特殊记忆,其他基本类型只是首字母大写即可

装箱与拆箱

用Integer与 int为例:

装箱:基本数值---->包装对象

Integer i = new Integer(4);//使用构造函数函数 Integer iii = Integer.valueOf(4);//使用包装类中的valueOf方法

拆箱:包装对象---->基本数值

int num = i.intValue();

由于我们经常要做基本类型与包装类之间的转换,从JDK 1.5开始,基本类型与包装类的装箱、拆箱动作可以自动完成。
– 自动装箱:基本类型 --> 包装类型
– 自动拆箱:包装类型 --> 基本类型

Integer i = 4;//自动装箱。相当于Integer i = Integer.valueOf(4); i = i + 5;//等号右边:将i对象转成基本数值(自动拆箱) i.intValue() + 5; //加法运算完成后,再次装箱,把基本数值转成对象。

1.4 ArrayList案例

(1)数值添加到集合

需求:生成6个1~33之间的随机整数,添加到集合,并遍历集合。

public static void main(String[] args) {
    
    
	ArrayList<Integer> list = new ArrayList<>();
	Random r = new Random();
	for (int i = 0; i < 6; i++) {
    
    
		int num = r.nextInt(33) + 1;
		list.add(num);
	}
	// 遍历集合
	for (int i = 0; i < list.size(); i++) {
    
    
		System.out.println(list.get(i));
	}
}

(2)对象添加到集合

需求:自定义4个学生对象,添加到集合,并遍历。

public static void main(String[] args) {
    
    
	ArrayList<Student> list = new ArrayList<>();

	Student one = new Student("洪七公", 20);
	Student two = new Student("欧阳锋", 21);
	Student three = new Student("黄药师", 22);
	Student four = new Student("段智兴", 23);

	list.add(one);
	list.add(two);
	list.add(three);
	list.add(four);

	// 遍历集合
	for (int i = 0; i < list.size(); i++) {
    
    
		Student stu = list.get(i);
		System.out.println("姓名:" + stu.getName() + ",年龄" + stu.getAge());
	}
}

(3)获取集合方法
需求:用一个大集合存入20个随机数字,然后筛选其中的偶数元素,放到小集合当中。要求使用自定义的方法来实现筛选。

public static void main(String[] args) {
    
    
	ArrayList<Integer> bigList = new ArrayList<>();
	Random r = new Random();
	for (int i = 0; i < 20; i++) {
    
    
		int num = r.nextInt(100) + 1; // 1~100
		bigList.add(num);
	}

	ArrayList<Integer> smallList = getSmallList(bigList);

	System.out.println("偶数总共有多少个:" + smallList.size());
	for (int i = 0; i < smallList.size(); i++) {
    
    
		System.out.println(smallList.get(i));
	}
}

// 这个方法,接收大集合参数,返回小集合结果
public static ArrayList<Integer> getSmallList(ArrayList<Integer> bigList) {
    
    
	// 创建一个小集合,用来装偶数结果
	ArrayList<Integer> smallList = new ArrayList<>();
	for (int i = 0; i < bigList.size(); i++) {
    
    
		int num = bigList.get(i);
		if (num % 2 == 0) {
    
    
			smallList.add(num);
		}
	}
	return smallList;
}

2 Arrays类

java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来 非常简单。

public static String toString(int[] a) :返回指定数组内容的字符串表示形式
public static void sort(int[] a) :对指定的 int 型数组按数字升序进行排序

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 = {
    
    2, 1, 3, 10, 6};
    Arrays.sort(array1);
    System.out.println(array1); // [I@1b6d3586
    System.out.println(Arrays.toString(array1)); // [1, 2, 3, 6, 10]

    String[] array2 = {
    
    "bbb", "aaa", "ccc"};
    Arrays.sort(array2);
    System.out.println(array2); // [Ljava.lang.String;@4554617c
    System.out.println(Arrays.toString(array2)); // [aaa, bbb, ccc]

注意:

  • 如果是数值,sort默认按照升序从小到大
  • 如果是字符串,sort默认按照字母升序
  • 如果是自定义的类型,那么这个自定义的类需要有Comparable或者Comparator接口的支持

案例:倒序打印字符串
需求:请使用 Arrays 相关的API,将一个随机字符串中的所有字符升序排列,并倒序打印。

public static void main(String[] args) {
    
    
	String str = "asv76agfjh";

	// 如何进行升序排列:sort
	// 必须是一个数组,才能用Arrays.sort方法
	// String --> 数组,用toCharArray
	char[] chars = str.toCharArray();
	Arrays.sort(chars); // 对字符数组进行升序排列

	// 需要倒序遍历
	for (int i = chars.length - 1; i >= 0; i--) {
    
    
		System.out.print(chars[i]+" "); // v s j h g f a a 7 6
	}
}

3 Math类

java.lang.Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。类似这样的工具 类,其所有方法均为静态方法,并且不会创建对象,调用起来非常简单

public static double abs(double a) :返回 double 值的绝对值
public static double ceil(double a) :返回大于等于参数的最小的整数
public static double floor(double a) :返回小于等于参数最大的整数
public static long round(double a) :返回最接近参数的 long。(相当于四舍五入方法)
Math.PI代表近似的圆周率常量(double)

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.floor(30.1)); // 30.0
	System.out.println(Math.floor(30.9)); // 30.0
	System.out.println(Math.floor(31.0)); // 31.0
	System.out.println("================");

	System.out.println(Math.round(20.4)); // 20
	System.out.println(Math.round(10.5)); // 11
}

猜你喜欢

转载自blog.csdn.net/hu_wei123/article/details/125268364