集合和数组对比
- 长度
数组长度固定
集合长度可变
- 存储类型
数组可存基本数据以及引用数据类型
集合只能存引用数据类型,存基本数据类型需要使用包装类
成员方法
boolean add(E e) 添加元素,返回值表示是否添加成功
boolean remove(E e)删除指定元素,返回值表示是否删除成功
E remove(int index) 删除指定索引元素,返回被删除元素
E set(int index,E e) 修改指定索引下的元素,返回原来的元素
E get(int index) 获取指定索引的元素
int size() 集合的长度,也就是集合中元素的个数
使用
//创建集合
ArrayList<String> list = new ArrayList<>(
//添加元素,无论添加什么都会成功
list.add("abc");
list.add("def");
list.add("efg");
list.add("hij"
//删除元素,当删除的元素不存在时,删除失败。
/*list.remove("abc");
//按照指定索引删除元素
String result = list.remove(0);
System.out.println(remove);//abc
//修改元素
/*String result = list.set(1, "aaa");
System.out.println(result);//def
//获取元素
/*String result = list.get(0);
System.out.println(result);//abc
//遍历:先获取长度
/*for (int i = 0; i < list.size(); i++) {//i索引 list.get(i) 获取
System.out.print(list.get(i) + " ");//abc def efg hij
}
System.out.println();
for (String str: list) {
System.out.print(str + " ");
}*/
System.out.println(list);
按照"["a","b"]"格式遍历集合
//创建集合
ArrayList<String> list = new ArrayList<>()
//添加
list.add("abc");
list.add("def");
list.add("ghi");
list.add("jkl")
//遍历
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("]");
基本数据类型包装类
byte Byte
short Short
char Character
int Integer
long Long
float Float
double Double
boolean Boolean
自建对象包装类,使用集合
自建一个JavaBean类的Student对象
//JavaBean
//成员变量私有化
//空参构造方法
//全参构造方法
//get/set方法
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;
}
创建集合
//创建集合
ArrayList<Student> listStu = new ArrayList<>();
//调用全参构造函数创建学生对象
Student s1 = new Student("zhangsan",18);
Student s2 = new Student("lisi",19);
Student s3 = new Student("wangwu",20);
Student s4 = new Student("zhhaoliu",21);
//把学生对象添加到list集合
listStu.add(s1);
listStu.add(s2);
listStu.add(s3);
listStu.add(s4);
//遍历
for (int i = 0; i < listStu.size(); i++) {
Student stu = listStu.get(i);
System.out.println(stu.getName() +"," + stu.getAge());
}
//创建集合
ArrayList<Student> listStu = new ArrayList<>();//当前长度为0
//键盘录入学生的信息并添加到集合当中,注意:当list没有数据时,循坏不执行;
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();
//把name和age赋值给学生对象
s.setName(name);
s.setAge(age);
listStu.add(s);//每次添加的都是指向新的地址添加
}
for (int i = 0; i < listStu.size(); i++) {
//获取学生对象
Student stu = listStu.get(i);
System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());
}
System.out.println(listStu);//[edu.ListStudy.Student@2d38eb89, edu.ListStudy.Student@5fa7e7ff, edu.ListStudy.Student@4629104a]
//创建集合
ArrayList<Student> listStu = new ArrayList<>();//当前长度为0
//键盘录入学生的信息并添加到集合当中,注意:当list没有数据时,循坏不执行;
Scanner sc = new Scanner(System.in);
Student s = new Student();//只创建了一个对象,每次添加都是往他所在的地址添加,覆盖了前面添加的数据,所以最后都是同一个数据
for (int i = 0; i < 3; i++) {
System.out.println("请输入学生姓名:");
String name = sc.next();
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
//把name和age赋值给学生对象
s.setName(name);
s.setAge(age);
listStu.add(s);
}
for (int i = 0; i < listStu.size(); i++) {
//获取学生对象
Student stu = listStu.get(i);//去找的对象都是同一个地址下的值,所以遍历出来的数据是一样的
System.out.println("姓名:" + stu.getName() + ",年龄:" + stu.getAge());
}
System.out.println(listStu);//[edu.ListStudy.Student@2d38eb89, edu.ListStudy.Student@2d38eb89, edu.ListStudy.Student@2d38eb89]
判断对象中的id是否存在
//创建集合
ArrayList<User> listUser = new ArrayList<>()
//创建三个用户对象
User p1 = new User(1,"zs123","123456");
User p2 = new User(2,"ls123","654321");
User p3 = new User(3,"ww123","ww1234");
//把用户对象添加到集合中
listUser.add(p1);
listUser.add(p2);
listUser.add(p3);
//调用方法查看id是否唯一
boolean flag = isExist(listUser, 10)
System.out.println(flag);
}
public static boolean isExist(ArrayList<User> listUser,int id){
for (int i = 0; i < listUser.size(); i++) {
if (listUser.get(i).getId() == id){
//找到直接返回true
return true;
}
}
//循坏结束集合里所有元素都已经比较完毕,还没有一样,就返回false
return false;
}
获取对象中指定id的索引值
//创建集合
ArrayList<User> listUser = new ArrayList<>(
//创建三个用户对象
User p1 = new User(1,"zs123","123456");
User p2 = new User(2,"ls123","654321");
User p3 = new User(3,"ww123","ww1234");
//把用户对象添加到集合中
listUser.add(p1);
listUser.add(p2);
listUser.add(p3);
//查找索引
int index = getIndex(listUser, 2);
System.out.println(index);
}
public static boolean isExist(ArrayList<User> listUser,int id){
return getIndex(listUser,id) >= 0;
}
public static int getIndex(ArrayList<User> listUser,int id){
for (int i = 0; i < listUser.size(); i++) {
User user = listUser.get(i);
if (user.getId() == id){
return i;
}
}
return -1;
}