为什么要有集合:集合会自动扩容
集合不能存基本数据类型(基本数据类型是存放真实的值,而引用数据类型是存放一个地址,这个地址存放在栈区,地址所指向的内容存放在堆区)
数组和集合的对比:
集合的长度:自动伸缩,可长可短,但是只能存放引用数据类型
数组:是固定的,既可以存放基本数据类型,又可以存放引用数据类型
ArrayList集合:
泛型:限定集合中的贮存数据的类型
创建ArrayLiest的方式:ArrayList<String> List = new ArrayList<>();
前面的尖括号就是声明泛型的方式,前面的已经写了String所以后面就不需要再写String。
注意这个尖括号里面是不能存放int这种基本数据类型的,只能是存放类。
构造方法:
当为空的时候会自动创建一个空间大小为10的集合
成员方法
对于集合的操作就是增删改查。
分别提供了几种函数先对于增来说函数名字就是叫做add 这个方法的用法有点类似于前面对字符串append的用法一致
import java.util.ArrayList;public class ArrayListd_emo1 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();//由于这个list.add的方法返回值类型是boolean类型所以我们可以不用一个变量来承接这个函数的返回值,直接用即可//1.这个add方法就是增方法list.add("abc");list.add("vvv");System.out.println(list);}}
接下来就是删除元素
remove()
可以看到这个删除元素右两种方法,第一种就是通过元素进行删除元素,第二种就是通过下标进行删除元素
删除元素的第一种方式如果删除成功那么就会返回true 如果删除失败(当要删除的对象再集合里面不存在的时候)就会返回false
按照下标进行删除元素:如果我们使用一个String类型的字符串来接收这个要删除的字符串,这个定义的字符串就会被赋这个删除了的元素。
然后在集合中这个字符串已经被删除了。
import java.util.ArrayList;public class ArrayListd_emo1 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();//由于这个list.add的方法返回值类型是boolean类型所以我们可以不用一个变量来承接这个函数的返回值,直接用即可//1.这个add方法就是增方法list.add("abc");list.add("vvv");list.add("关岁安");list.add("guansuian1");System.out.println(list);//2.remove就是删除元素的方法list.remove("abc");System.out.println(list);String str = list.remove(2);System.out.println(str);System.out.println(list);}}
修改方法:set
使用的时候是将需要替换的元素下标卸载第一位,第二位就写想要替换在集合里面的字符串
这个方法返回的是已经被替换的字符串,我们可以使用一个字符串进行接收。
import java.util.ArrayList;public class ArrayListd_emo1 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();//由于这个list.add的方法返回值类型是boolean类型所以我们可以不用一个变量来承接这个函数的返回值,直接用即可//1.这个add方法就是增方法list.add("zhengmeiling");list.add("vvv");list.add("关岁安");list.add("guansuian");
// System.out.println(list);
// //2.remove就是删除元素的方法
//
// list.remove("abc");
// System.out.println(list);
//
// String str = list.remove(2);
// System.out.println(str);
// System.out.println(list);//修改元素//会将被覆盖元素进行一个返回,使用时是下标加上想要替换的字符串System.out.println(list);String result = list.set(1,"郑美玲");System.out.println(result);System.out.println(list);}}
运行结果如下:
第三个查询;
Get 这个常常和size()搭配使用
常常用于遍历集合
import java.util.ArrayList;public class ArrayListd_emo1 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();//由于这个list.add的方法返回值类型是boolean类型所以我们可以不用一个变量来承接这个函数的返回值,直接用即可//1.这个add方法就是增方法list.add("zhengmeiling");list.add("vvv");list.add("关岁安");list.add("guansuian");
// System.out.println(list);
// //2.remove就是删除元素的方法
//
// list.remove("abc");
// System.out.println(list);
//
// String str = list.remove(2);
// System.out.println(str);
// System.out.println(list);//修改元素//会将被覆盖元素进行一个返回,使用时是下标加上想要替换的字符串System.out.println(list);String result = list.set(1,"郑美玲");System.out.println(result);System.out.println(list);System.out.println();for (int i = 0; i < list.size(); i++) {String str = list.get(i);System.out.println(str);}}}
运行结果
我们使用StringJoiner和这个集合操作进行拼接:
import java.util.ArrayList;
import java.util.StringJoiner;public class ArrayListd_emo1 {public static void main(String[] args) {ArrayList<String> list = new ArrayList<>();list.add("活");list.add("在");list.add("当");list.add("下");StringJoiner sj = new StringJoiner(", ","[","]");for (int i = 0; i < list.size(); i++) {sj.add(list.get(i));}System.out.println(sj);}
}
我们首先创建一个集合然后使用集合添加这个,这个主要是为了获取集合中的元素,然后通过标准输出
为了能在集合中存贮基本数据类型我们需要基本数据类型转化为包装类。
练习:将一个含有数字的集合输出
需要用到我们的Integer类型来进行输出
import java.util.ArrayList;
import java.util.StringJoiner;public class ArrayListd_emo1 {public static void main(String[] args) {//创建集合ArrayList<Integer> list = new ArrayList<>();//添加元素list.add(1);list.add(2);list.add(3);list.add(4);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.println("]");}
}
我们想通过循环来输入对象,这其实是不对的,因为集合的长度是可以变的,所以我们不能使用list.size()来遍历这个数组。
学生身份记录程序:
我犯下的错误:需要将这个创建学生对象放在循环里面不然的话,就看下面这一张图片
如果放在循环里面的话:
这个是Student的类
public class Student {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 String toString() {return "Student{name = " + name + ", age = " + age + "}";}
}
这个含主函数的主类
import com.sun.xml.internal.ws.addressing.WsaTubeHelper;import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringJoiner;public class ArrayListd_emo1 {public static void main(String[] args) {ArrayList<Student> list=new ArrayList<>();Scanner sc = new Scanner(System.in);for(int i = 0;i<3;i++){Student s = new Student();System.out.println("请输入名字");String name = sc.next();System.out.println("请输入年龄");int age = sc.nextInt();s.setName(name);s.setAge(age);list.add(s);}for(int i = 0;i<3;i++){Student stu = list.get(i);System.out.println(stu.getName() + " " + stu.getAge());}}
}
小技巧:当我们在创建对象的时候,,我们使用构造器的时候不记得应该填入变量的顺序的·时候我们可以点击小括号,然后点击ctrl + p就可以看应该填入变量的顺序了