关于集合
1.在没有学习集合前,我们储存多个元素时按照以前所学,都是用数组来储存数据,但是数组有着很明显的弊端,就是它的长度创建完毕后,就固定不能变化了,所以这时候就要用到集合,集合和数组一样,也是一个容器,也可以用来存储多个数据,但是他的长度是可以发生变化的,能够自动扩容。对比数组,集合更加灵活,易于使用。集合有很多钟,以后用的最多的为ArrayList集合,也就是今天所学习的一种集合。
在使用集合前,我们首先要创建集合的对象
1.创建集合的对象:
ArrayList<E> list=new ArrayList<>();
其中,E代表泛型,泛型是指存入数据的类型。与数组不同的是,集合中不能存入基本数据类型,所以我们要把基本数据类型换为其对应的包装类
基本类 | 包装类 |
---|---|
short | Short |
byte | Byte |
char | Char |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
2.ArrayList成员方法
方法名 | 说明 |
---|---|
boolean add(E e) | 添加元素,返回值表示是否添加成功 |
boolean remove(E e) | 删除指定元素,返回值表示是否删除成功 |
E remove(int index) | 删除指定索引元素,返回被删除元素 |
removeAll() | 删除指定集合中所有元素(括号中为集合名) |
E set(int index,E e) | 修改指定索引的元素,返回原来元素 |
E get(int index) | 获取指定元素 |
int size() | 集合的长度 |
总结为“增、删、改 、查”。
3.演示
首先,我们要创建一个Student类,并且是标准的javabean。标准的javabean包括四点:
1.私有化成员
2.空参构造方法
3.带全部参数的构造方法
4.get/set方法
public class Student{
private String name;
private int age;
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;
}
}
然后我们再创建一个测试类Test`
public class Test {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();//创建泛型为Student的集合
//创建学生对象
Student s1 = new Student("张三", 20);
Student s2=new Student("李四",19);
//添加元素
list.add(s1);
list.add(s2);
//遍历集合
for (int i = 0; i < list.size(); i++) {
Student stu=list.get(i);//获取元素
System.out.println(stu.getName()+stu.getAge());//此处不能直接打印stu,不然会输出地址值
}
}
}
注意,当使用键盘输入学生信息时候,因为集合长度为0,所以要先设置好输入学生的个数。
当我们想要查找一个学生时,我们可以通过输入他的名字来获取他的信息,同样以上面的代码为例子
public class Test {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
Student s1 = new Student("张三", 20);
Student s2=new Student("李四",19);
Student s3=new Student("李四",22);
list.add(s1);
list.add(s2);
list.add(s3);
checkout(list,"李四" );//传递集合和所要查找的学生姓名
}
public static void checkout(ArrayList<Student> list,String name){
for (int i = 0; i < list.size(); i++) {
Student stu=list.get(i);
String na= stu.getName();//获取i索引下的名字,与传递过来的name进行判断
if (na.equals(name)){
System.out.println(stu.getName()+","+stu.getAge());
}
}
}
}
以上面为例,修改方法:
Student s4=new Student("王五",25);
list.set(1,s4);//1代表索引
修改前
4.使用迭代器来遍历集合
public class Test {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
Student s1 = new Student("张三", 20);
Student s2=new Student("李四",19);
Student s3=new Student("李四",22);
list.add(s1);
list.add(s2);
list.add(s3);
//获取迭代器对象
//迭代器好比是一个箭头,,默认指向集合的0索引处
Iterator<Student> it=list.iterator();
//判断当前位置是否有元素
while(it.hasNext){
String str=it.next();//获取当前对象并移动指针
System.out.println(str);
}
}
}
细节:迭代器遍历完毕,指针并不会复位,如果需要再次遍历,需要再次获取迭代器的对象。循环中只能用一次next方法。并且在
迭代器中,不能用集合方法去增加或删除,只能用迭代器提供的remove方法删除,目前添加木有办法。
结语
本文中仅演示了几个较为简单的关于ArrayList集合的使用,在往后的数据存储中,集合将会发挥出非常大的作用。
ArrayList集合底层原理
1.利用空参构造创建的集合,在底层创建一个默认长度为0的数组
2。添加第一个元素时,底层会创建一个新长度为10的数组
3.存满时,会扩容1.5倍
4.如果一次添加多个元素,1.5倍还放不下,则创建数组的长度以实际为准。
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
其中ArrayList的空参构造中的elementData其实就是一个数组而后面的 DEFAULTCAPACITY_EMPTY_ELEMENTDATA其实就是一个长度为0的数组。所以在创建对象时,在底层创建了一个长度为0的数组。