一、ArrayList
首先,我们先看看jdk帮助文档是怎么概述ArrayList的:
可调整大小的数组的实现List接口。 实现所有可选列表操作,并允许所有元素,包括null 。 除了实现List 接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组的大小。 (这个类是大致相当于Vector,不同之处在于它是不同步的)。
该size,isEmpty,get,set,iterator和listIterator操作在固定时间内运行。 add操作以摊余常数运行 ,即添加n个元素需要O(n)个时间。 所有其他操作都以线性时间运行(粗略地说)。 与LinkedList实施相比,常数因子较低。
每个ArrayList实例都有一个容量 。 容量是用于存储列表中的元素的数组的大小。 它总是至少与列表大小一样大。 当元素添加到ArrayList时,其容量会自动增长。 没有规定增长政策的细节,除了添加元素具有不变的摊销时间成本。
应用程序可以添加大量使用ensureCapacity操作元件的前增大ArrayList实例的容量。 这可能会减少增量重新分配的数量。
构造方法
ArrayList()
构造一个初始容量为十的空列表。
ArrayList(Collection<? extends E> c)
构造一个包含指定集合的元素的列表,按照它们由集合的迭代器返回的顺序。
ArrayList(int initialCapacity)
构造具有指定初始容量的空列表。
arraylist的创建、添加和集合索引越界:
public class ArrayListDemo01 {
public static void main(String[] args) {
//ArrayList<String> arrayList = new ArrayList<>();
ArrayList<String> arrayList1 = new ArrayList<String>();
arrayList1.add("hello");
arrayList1.add("world");
//指定位置添加,原位置的元素往后移动
arrayList1.add(0,"天龙真人");
/*
* 集合的索引越界 IndexOutOfBoundsException: Index: 3, Size: 2
* 这里集合的长度就只有2,在第三位添加元素,是错误的操作!
* */
// arrayList1.add(3,"java");//报错 ndexOutOfBoundsException: Index: 3, Size: 2
System.out.println(arrayList1);
}
}
用指定的元素替换列表中指定位置的元素:
public class ArrayListDemo01 {
public static void main(String[] args) {
//ArrayList<String> arrayList = new ArrayList<>();
ArrayList<String> arrayList1 = new ArrayList<String>();
arrayList1.add("hello");
arrayList1.add("world");
//指定位置添加,原位置的元素往后移动
arrayList1.add(0, "天龙真人");
/*
* 集合的索引越界 IndexOutOfBoundsException: Index: 3, Size: 2
* 这里集合的长度就只有2,在第三位添加元素,是错误的操作!
* */
// arrayList1.add(3,"java");//报错 ndexOutOfBoundsException: Index: 3, Size: 2
System.out.println("替换前:" + arrayList1);
arrayList1.set(0, "java");//用指定的元素替换此列表中指定位置的元素。
System.out.println("替换后:" + arrayList1);
}
}
替换前:[天龙真人, hello, world]
替换后:[java, hello, world]
删除:
//删除操作~
// 直接删除 || 按索引删除
arrayList1.remove("hello");
System.out.println("直接删除后是:"+arrayList1);
arrayList1.remove(1);//删除的是索引1的位置
System.out.println("按索引删除后是:"+arrayList1);
操作前:[天龙真人, hello, world]
直接删除后是:[天龙真人, world]
按索引删除后是:[天龙真人]
get:
//查:返回指定索引处的元素
System.out.printf("返回:"+arrayList1.get(2));
二、存储字符串并且遍历
遍历集合
直接上代码:
public class ArrayListDemo02 {
public static void main(String[] args) {
//创建一个新的集合对象
ArrayList<String> arrayList = new ArrayList<String>();
arrayList.add("我是1");
arrayList.add("我是2");
arrayList.add("我是3");
//遍历集合的通用格式
for (int i = 0; i < arrayList.size(); i++) {
System.out.println("第"+(i+1)+"个元素是:"+arrayList.get(i));
}
}
}
第1个元素是:我是1
第2个元素是:我是2
第3个元素是:我是3
遍历集合的通用格式
//遍历集合的通用格式
for (int i = 0; i < arrayList.size(); i++) { System.out.println("第"+(i+1)+"个元素是:"+arrayList.get(i)); //加一个对象 //遍历集合的通用格式2
for (int i = 0; i < arrayList.size(); i++) {
String s = arrayList.get(i);
System.out.println("第"+(i+1)+"个元素是:"+s); }
学生信息实例1:
先创建一个学生类:
package com.niit.Collection.List.ArrayList;
/**
* @author 天龙大帅比
* @data 2021/6/28 19:05
*/
//学生类
public class StudentDemo {
int id;
String name;
int age;
public StudentDemo() {
}
public StudentDemo(int id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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 ArrayListDemoStudentInfo {
public static void main(String[] args) {
ArrayList<StudentDemo> arrayList = new ArrayList<StudentDemo>();
StudentDemo s1 = new StudentDemo(1,"天龙真人",21);
StudentDemo s2 = new StudentDemo(1,"小弟1号",20);
StudentDemo s3 = new StudentDemo(1,"小弟2号",23);
arrayList.add(s1);
arrayList.add(s2);
arrayList.add(s3);
//new printArrayList(arrayList);
for (int i = 0; i <arrayList.size() ; i++) {
StudentDemo s = arrayList.get(i);
System.out.println("id:"+ s.getId() +",name:"+ s.getName() +",age:"+ s.getAge());
}
}
}
id:1,name:天龙真人,age:21
id:1,name:小弟1号,age:20
id:1,name:小弟2号,age:23
学生信息实例2
创建学生信息类:
package com.niit.Collection.List.ArrayList;
/**
* @author 天龙大帅比
* @data 2021/6/28 19:33
*/
public class StudentInfo {
String name;
String age;
public StudentInfo(){
}
public StudentInfo(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
再创建集合,添加键盘输入的元素,再遍历:
public class StudentInfoDemo {
public static void main(String[] args) {
ArrayList<StudentInfo> arrayList = new ArrayList<>();
/*
for (int i = 0; i <3 ; i++) {
System.out.println("请输入学生"+(i+1)+"的姓名:");
String name = scanner.nextLine();
System.out.println("请输入学生"+(i+1)+"的年龄:");
String age = scanner.nextLine();
StudentInfo s = new StudentInfo();
s.setName(name);
s.setAge(age);
//把信息添加进集合
arrayList.add(s);
}*/
addStudentInfo(arrayList,3);
printArrayList(arrayList);
}
//写一个方法,把输入的代码放到方法里,提高代码的复用性
public static void addStudentInfo(ArrayList<StudentInfo> arrayList,int i) {
Scanner scanner = new Scanner(System.in);
for (int j = 0; j <i ; j++) {
System.out.println("请输入学生" + (j + 1) + "的姓名:");
String name = scanner.nextLine();
System.out.println("请输入学生" + (j + 1) + "的年龄:");
String age = scanner.nextLine();
StudentInfo s = new StudentInfo();
s.setName(name);
s.setAge(age);
//把信息添加进集合
arrayList.add(s);
}
}
//遍历集合的通用格式
public static void printArrayList(ArrayList<StudentInfo> arrayList) {
System.out.println("遍历的学生信息如下:");
for (int i = 0; i <arrayList.size() ; i++) {
StudentInfo s = arrayList.get(i);
System.out.println("name:"+ s.getName() +",age:"+ s.getAge());
}
}
}
运行结果:
请输入学生1的姓名:
天龙真人
请输入学生1的年龄:
21
请输入学生2的姓名:
小弟一号
请输入学生2的年龄:
20
请输入学生3的姓名:
小弟二号
请输入学生3的年龄:
21
name:天龙真人,age:21
name:小弟一号,age:20
name:小弟二号,age:21
三、一个简单的学生信息管理系统
这个小项目修修改改的弄了一晚上,也算是大致完成了,加深了集合的使用,也复习了之前的一些内容。
首先,肯定要创建一个学生类
这里很简单,就直接上代码了!
package com.niit.Collection.StudentManage;
/**
* @author 天龙大帅比
* @data 2021/6/28 20:58
*/
public class Student {
String sid;
String name;
String age;
String address;
public Student() {
}
public Student(String sid, String name, String age, String address) {
this.sid = sid;
this.name = name;
this.age = age;
this.address = address;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
下面写我们的main方法
思路:
首先,肯定是要把我们学生管理系统的主界面写出来,简单的几个“sout”就行了。然后要给他实现重复选择,加个while循环,当选择“退出系统”的时候跳出while循环。里面放switch方法。之后,写几个静态类方法-分别实现增 删 改 查,放在switch方法调用就行了!
开整开整!!
本来是前一天发的,然后寝室断电没网了,就没发,我再总结一下,然后写一篇单独的博客