【JAVA入门】Day07 - ArrayList

【JAVA入门】Day07 - ArrayList



        集合看似与数组有密不可分的关系,但是集合和数组有两个非常明显的区别。

  • 其一,数组的长度是固定的,而集合的长度是可变的。
  • 其二,数组既可以存基本数据类型,又可以存引用数据类型;但是集合只能存储引用数据类型。

        集合在 Java 编程中有着非常重要的作用,Java 内置了很多种不同的集合,我们以最常用的集合 ArrayList 为引入,逐步拉开集合的幕布。

一、ArrayList 的创建

        ArrayList 是一个类,但是它的对象在创建时,引入了全新的概念——“泛型”

ArrayList<String> list = new ArrayList<String>();

        如上所示,尖括号中的内容就是对这个集合能存储的数据类型的一种限定,上面这个集合只能存储字符串类型的元素。注意:ArrayList<String>是一个整体。
        在 JDK7 以后,为了写起来省事,后方的尖括号内容可以省略,但是尖括号不能省。

ArrayList<String> list = new ArrayList<>();

        要打印 ArrayList ,也可以直接用 sout,此时会把集合中所有的数据用中括号包住打印出来,如果是空 ArrayList,则会打印 [ ] 。

ArrayList<String> list = new ArrayList<>();
System.out.println(list);   // []

二、ArrayList的成员方法

        主要用到的有增、删、改、查。

方法名说明
boolean add(E e)添加元素,返回值表示是否添加成功
boolean remove(E e)删除指定元素,返回值表示是否删除成功
E remove(int index)删除指定索引的元素,返回被删除的元素
E set(int index,E e)修改指定索引下的元素,返回原来的元素
E get(int index)获取指定索引的元素
int size()集合的长度,也就是集合中元素的个数

2.1 ArrayList的基本操作

        利用上面的方法,可以实现 ArrayList 的基本操作。

//1.创建一个集合
ArrayList<String> list = new ArrayList<>();

//2.添加几个元素
list.add("aaa");
list.add("bbb");
list.add("ccc");

System.out.println(list);

//3.删除元素
/* boolean result1 = list.remove("aaa");
System.out.println(result1);	//true
boolean result2 = list.remove("ddd");
System.out.println(result2);	//false */

//3.1 根据索引删除元素,还能返回被删除的元素
String str = list.remove(0);
System.out.println(str);	//aaa

//4.修改元素
list.set(1, "ddd");
System.out.println(list);  // aaadddccc

//5.查询元素
/* String s = list.get(0);
System.out.println(s); */

//遍历
for (int i = 0; i < list.size(); i++) {
	//i 索引
	//list.get(i) 元素
	String str = list.get(i);
	System.out.println(str);
}

1.集合的遍历1
需求:定义一个集合,添加字符串,并进行遍历。遍历格式参照——[元素1, 元素2, 元素3]。

public class Test1 {
	public static void main(String[] args) {
		//1.创建集合
		ArrayList<String> list = new ArrayList<>();
		
		//2.添加字符串
		list.add("aaa");
		list.add("bbb");
		list.add("ccc");
		list.add("ddd");

		//3.遍历
		System.out.print("[");
		for(int i = 0; i < list.size(); i++) {
			if(i == list.size() - 1) {
				System.out.print(list.get(i));
			}else{
				System.out.print(list.get(i) + ", ");
			}
		}
		System.out.print("]");
	}
}

2.集合的遍历2
需求:定义一个集合,添加数字,并进行遍历。遍历格式参照——[元素1, 元素2, 元素3]。

public class Test2 {
	public static void main(String[] args) {
		//1.创建集合
		ArrayList<Integer> list = new ArrayList<>();
		
		//2.添加字符串
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(4);

		//3.遍历
		System.out.print("[");
		for(int i = 0; i < list.size(); i++) {
			if(i == list.size() - 1) {
				System.out.print(list.get(i));
			}else{
				System.out.print(list.get(i) + ", ");
			}
		}
		System.out.print("]");
	}
}

【补充】基本数据类型的包装类

        在 Java 中,基本数据类型都有一个对应的包装类。因为一个集合只能添加引用类型的元素,这个时候基本数据类型就不能直接用 add() 函数添加了,但是我们可以在<>中指定这些数据类型对应的包装类进行添加。

基本数据类型对应的包装类
byteByte
shortShort
charCharacter
intInteger
longLong
floatFloat
doubleDouble
booleanBoolean
ArrayList<Character> list = new ArrayList<>();
list.add('a');
list.add('b');
list.add('c');

3.集合的遍历3
需求:定义一个集合,添加一些学生对象,并进行遍历。学生类的属性为:姓名,年龄。

public class Student {
	//1.私有化成员变量
	//2.空参构造方法
	//3.带全部参数的构造方法
	//4.set/get方法
	
	private String name;
	private int	age;
	
	public Student() {
	}
	
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	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 class Test3 {
	public static void main(String[] args) {
		//1.创建集合
		ArrayList<Student> list = new ArrayList<>();
		//2.创建学生对象
		Student s1 = new Student("zhangsan", 23);
		Student s2 = new Student("lisi", 23);
		Student s3 = new Student("wangwu", 25);
	}
		//3.添加元素
		list.add(s1);
		list.add(s2);
		list.add(s3);

		//4.遍历集合
		for(int i = 0; i < list.size(); i++) {
			Student stu = list.get(i);  // 由于是我们自己定义的对象,不能直接println,所以手写一下输出
			System.out.println(stu.getName() + ", " + stu.getAge());
		}

4.集合的遍历4
需求:定义一个集合,添加一些学生对象,并进行遍历。学生类的属性为:姓名,年龄。(要求键盘录入)

public class Student {
	//1.私有化成员变量
	//2.空参构造方法
	//3.带全部参数的构造方法
	//4.set/get方法
	
	private String name;
	private int	age;
	
	public Student() {
	}
	
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	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 class Test4 {
	public static void main(String[] args) {
		//1.创建集合
		ArrayList<Student> list = new ArrayList<>();
		//2.键盘录入学生信息创建对象并添加到集合中
		Scanner sc = new Scanner(System.in);
		for(int i =0; i < 3; i++) {
			Student s = new Student();
			System.out.println("请输入第" + (i+1) + "位学生的姓名");
			String name = sc.next();
			System.out.println("请输入第" + (i+1) + "位学生的年龄");
			int age = sc.nextInt();
			//把name和age赋值给学生对象
			s.setName(name);
			s.setAge(age);
			//把学生对象添加到集合中
			list.add(s);
		}

		//4.遍历集合
		for(int i = 0; i < list.size(); i++) {
			Student stu = list.get(i);  // 由于是我们自己定义的对象,不能直接println,所以手写一下输出
			System.out.println(stu.getName() + ", " + stu.getAge());
		}

5.添加用户对象并判断是否存在
需求:main方法定义一个集合,存入三个用户对象。用户属性:id, username, password。定义一个方法,根据 id 查找对应的用户信息,如果存在返回 true,如果不存在,返回 false。

public class User {
	//1.私有化成员变量
	//2.空参构造方法
	//3.带全部参数的构造方法
	//4.set/get方法
	
	private int id;
	private String username;
	private String password;
	
	public User() {
	}
	
	public User(int id, String username, String password) {
		this.id = id;
		this.username = username;
		this.password = password;
	}

	public int getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}

public class Test5 {
	public static void main(String[] args) {
		ArrayList<User> list = new ArrayList<>();
		User u1 = new User(1, "zhangsan", "123456");
		User u2 = new User(2, "lisi", "aaabbbccc");
		User u3 = new User(3, "wangwu", "hahahahah");
		list.add(u1);
		list.add(u2);
		list.add(u3);

		Scanner sc = new Scanner(System.in);
		int id = sc.nextInt();
		boolean result = contains(list, id);

		System.out.println(result);
	}
	
	public static boolean contains(ArrayList<User> list, int id) {
		for(int i = 0; i < list.size(); i++) {
			if(list.get(i).getId() == id) {
				return true;
			}
			return false;
		}
	}
}

5.5 添加用户对象并判断是否存在(根据索引)
需求:main方法定义一个集合,存入三个用户对象。用户属性:id, username, password。定义一个 getIndex() 方法,根据 id 查找对应的用户信息,如果存在返回其索引值,如果不存在返回 -1。利用 getIndex() 方法复写 contains() 方法。

public class Test6 {
	public static void main(String[] args) {
		ArrayList<User> list = new ArrayList<>();
		User u1 = new User(1, "zhangsan", "123456");
		User u2 = new User(2, "lisi", "aaabbbccc");
		User u3 = new User(3, "wangwu", "hahahahah");
		list.add(u1);
		list.add(u2);
		list.add(u3);

		Scanner sc = new Scanner(System.in);
		String id = sc.next();
		boolean result = contains(list, id);

		System.out.println(result);
	}

	public static int getIndex(ArrayList<User> list, String id) {
		for(int i = 0; i < list.size(); i++) {
			User u = list.get(i)
			String uid = u.getId();
			if(uid.equals(id)) {
				return i;
			}
		}
		return -1;
	}


	public static boolean contains(ArrayList<User> list, String id) {
			//利用getIndex()方法复写contains()方法
			if(getIndex(list, id) >= 0){
				return true;
			}else{
				return false;
			}
	}
}

6.添加手机对象并返回要求的数据。
需求:定义 JavaBean 类:Phone。属性:品牌,价格。main 方法中定义一个集合,存入3个手机对象,分别为:“小米”,1000;“苹果”,8000;“锤子”,2999。定义一个方法,将价格低于3000的手机信息返回。

public class Phone {
	private String band;
	private int price;
	
	public Phone() {
	}

	public Phone(String band, int price) {
		this.band = band;
		this.price = price;
	}
	
	public static void setBand(String band) {
		this.band = band;
	}

	public static String getBand() {
		return band;
	}
	
	public static void setPrice(int price) {
		this.price = price;
	}

	public static int getPrice() {
		return price;
	}
}

public class Test7 {
	public static void main(String[] args) {
		ArrayList<Phone> list = new ArrayList<>();
		Phone p1 = new Phone("小米", 1000);
		Phone p2 = new Phone("苹果", 8000);
		Phone p3 = new Phone("锤子", 2999);
		list.add(p1);
		list.add(p2);
		list.add(p3);
		
		ArrayList<Phone> phoneInfoList = getPhoneInfo(list);

		for(int i = 0; i < phoneInfoList.size(); i++) {
		Phone phone = new Phone();
			System.out.println(phone.getBand()+ ", " + phone.getPrice());
		}
		
	}
	public static ArrayList<Phone> getPhoneInfo(ArrayList<Phone> list) {
		ArrayList<Phone> resultlist = new ArrayList<>();
		for(int i = 0; i < list.size(); i++) {
			Phone p = list.get(i);
			int price = p.getPrice();
			if(price < 3000) {
			//System.out.println(p.getBand()+ ", " + p.getPrice());
			resultlist.add(p);
			}
		}
	}
}
### 回答1: ArrayListJava中的一个类,它可以动态地存储一组元素,可以根据需要动态增加或减少元素的数量,是一种非常方便的数据结构。 ArrayList的基本用法包括创建ArrayList对象、添加元素、获取元素、修改元素、删除元素等。首先,可以使用如下代码创建一个空的ArrayList对象: ```java ArrayList<String> list = new ArrayList<String>(); ``` 上面代码创建了一个类型为String的ArrayList对象,该对象初始为空。然后,可以使用add()方法向ArrayList中添加元素,例如: ```java list.add("apple"); list.add("banana"); list.add("orange"); ``` 上述代码向list中添加了三个字符串元素。可以使用get()方法获取ArrayList中的元素,例如: ```java String first = list.get(0); // 获取第一个元素 ``` 可以使用set()方法修改ArrayList中的元素,例如: ```java list.set(1, "pear"); // 将第2个元素改为"pear" ``` 可以使用remove()方法删除ArrayList中的元素,例如: ```java list.remove(2); // 删除第3个元素 ``` 以上就是ArrayList的基本用法。需要注意的是,ArrayList中的索引从0开始。 ### 回答2: ArrayListJava中非常常用的数据结构。它提供了一个可以动态添加、删除、修改的可变长度的序列。 使用ArrayList时,首先需要引入它的包:java.util。然后可以使用如下语法创建一个ArrayList对象: ```java ArrayList<String> list = new ArrayList<String>(); ``` 这里的`<String>`说明了这个ArrayList中的元素类型是String。当然,也可以使用其他类型作为元素类型。例如: ```java ArrayList<Integer> numbers = new ArrayList<Integer>(); ArrayList<Double> prices = new ArrayList<Double>(); ``` 可以使用`add()`方法来向ArrayList中添加元素: ```java list.add("apple"); list.add("orange"); list.add("banana"); ``` 可以使用`get()`方法来获取指定位置的元素: ```java String fruit = list.get(1); //获取第二个元素,即"orange" ``` 可以使用`size()`方法来获取ArrayList中元素的个数: ```java int size = list.size(); //获取ArrayList中元素的个数 ``` 可以使用`set()`方法来修改指定位置的元素: ```java list.set(1, "pear"); //将第二个元素修改为"pear" ``` 可以使用`remove()`方法来删除指定位置的元素: ```java list.remove(2); //删除第三个元素,即"banana" ``` 需要注意的是,ArrayList中的元素是有序的,且可以重复。因此,可以使用循环来遍历ArrayList中的元素: ```java for(int i=0; i<list.size(); i++){ String fruit = list.get(i); System.out.println(fruit); } ``` 或者使用增强型循环(foreach): ```java for(String fruit : list){ System.out.println(fruit); } ``` 总之,使用ArrayList可以方便地处理可变长度的序列。在实际开发中,它有着广泛的应用场景,例如处理文件或数据库中的数据,实现算法或数据结构等。 ### 回答3: ArrayListJava中一个非常常用的容器类。他的优点是可以存储任意类型的对象,可以动态扩容,因此在使用上非常的方便。 使用ArrayList需要在代码中首先调用import java.util.ArrayList进行导入,随后可以通过ArrayList<类型> name = new ArrayList<类型>()这个语句声明一个ArrayList,并将其命名为name,同时指定ArrayList中存储的对象类型为类型。当我们需要添加元素时,可以通过name.add(element)将元素添加到ArrayList中。我们也可以通过name.get(index)方法获取ArrayList中指定位置的元素,通过name.set(index,value)方法将ArrayList中某个位置的元素替换为新的元素。同时,我们也可以调用name.size()方法获取ArrayList中元素的数量。 值得注意的是,ArrayList中的元素是以索引的方式存储的,这意味着我们可以根据元素的位置进行添加、修改、删除等操作。而且,由于ArrayList的容量是可变的,因此其内部必须动态地管理数据的内存,这会影响到ArrayList的性能。当然,这个影响是很小的,不会对代码的运行产生显著的影响。 总之,ArrayListJava中非常常用的容器类,其可以存储任意类型的对象,同时调用也非常方便。但在使用时需要注意其操作的复杂度,以及不能存储基本数据类型。如果需要在ArrayList中存储基本数据类型,需要借助Boxing和Unboxing机制将其转换为对应的包装类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值