1:集合的概念
多个元素组成单元对象
数组主要特征:
长度固定
只能放同一种类型的元素
集合:
用来存放元素
长度不固定
可以是任何类型(同一个集合存放元素的类型可以不同)
提供一系列的方法完成元素的操作(插入、修改、删除、更新。。。)
提高编程效率
提供了很多优秀的算法和数据结构
2:接口实现
List接口实现:
ArrayList: 动态数组方式存储元素,元素也是有序的、可重复的,顺序为添加时的顺序。
查询效率高。
LinkedList: 链表方式存储元素。
插入、删除效率高。
add():添加元素
remove():删除元素
set():替换
get(int i): 根据元素下标得到元素
size(): 得到集合的长度
isEmpty():判断集合中是否存放元素,没有存放元素则返回true;否则返回false
clear():清除集合中所有的元素
package com.newer.demo;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* 演示List
* @author Administrator
*
*/
public class ListDemo {
public static void main(String[] args) {
//1、创建List实例
List<String> ls=new LinkedList<>();
//2、向集合中添加元素
ls.add("Java");
ls.add("C++");
ls.add("JavaScript");
//添加指定元素
ls.add(1, "HTML");
//3、读取集合中的元素
String e=ls.get(0);
System.out.println(ls);
System.out.println(e);
System.out.println(ls.get(2));
//3、集合是否为空
System.out.println(ls.isEmpty());//false
//4、集合中是否包含某个元素
System.out.println(ls.contains("C++"));//true
//5、集合的长度
System.out.println(ls.size());
//6、删除元素
ls.remove(2);
//ls.remove("JavaScript");
System.out.println(ls);
//5、替换元素
ls.set(1, "HTML");
System.out.println(ls);
//6、清除所有元素
ls.clear();
System.out.println(ls);
System.out.println(ls.isEmpty());//true
List<String> ls2=new ArrayList<>();
ls2.add("Hello");
ls2.add("Welcome");
//7、addAll
ls.addAll(ls2);
System.out.println(ls);
//8、遍历集合
for(int i=0;i<ls.size();i++) {
System.out.println(ls.get(i));
}
//遍历集合2:使用foreach语句
for(String str:ls) {
System.out.println(str);
}
int[] arr= {10,20,30,40};
for (int i : arr) {
System.out.println(i);
}
}
}
3:List接口:
继承Collection接口
特点:
采用线性列表的方式存储数据
可以存储任何元素,并且元素可以重复
元素的存放顺序为添加的是顺序
常用方法:
boolean add(E e) :在集合中已有元素的尾部添加元素
void clear() :讲集合中所有的元素删除掉
boolean contains(Object o):检查集合中是否包含某个元素
E get(int index) : 用来读取集合中的元素
参数为集合元素的下标,从0开始。
boolean isEmpty() :检查集合中是否包含元素,如果不包含,则返回true
E remove(int index) : 删除元素
E set(int index, E element) : 用element替换index位置处的元素
int size():得到集合中元素的个数
Object[] toArray() :将集合转换为数组
List接口主要实现类:
ArrayList:采用数组方式存储元素,长度是可变的,且长度不限,也称动态数组。
它是非线程安全的。
LinkedList: 采用链表(双向链表)方式实现数据存储。
非线程安全的。
如果集合中查询数据比较频繁,则使用ArrayList
如果集合中插入、删除操作比较频繁,则使用LinkedList
求最大最小分
package com.newer.demo;
public class Student {
private String name;
private int score;
private String id;
public Student() {
}
public Student(String name, int score, String id) {
super();
this.name = name;
this.score = score;
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getScore() {
return score;
}
public void setScore(int score) {
this.score = score;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
package com.newer.demo;
import java.util.ArrayList;
import java.util.List;
public class StudentDemo {
public static void main(String[] args) {
List<Student> stus=new ArrayList<>();
//创建多名学生,并添加至集合中
Student stu=new Student("张三",90,"1001");
stus.add(stu);
stu=new Student("李四",80,"1002");
stus.add(stu);
stu=new Student("王五",94,"1003");
stus.add(stu);
//求平均成绩
int total=0;
//求最大分数
int max=stus.get(0).getScore();
//求最小分数
int min=stus.get(0).getScore();
for (Student s : stus) {
int score=s.getScore();
total+=score;
if(max<score) {
max=score;
}
if(min>score) {
min=score;
}
}
System.out.println("平均成绩:"+total/stus.size());
System.out.println("最高成绩:"+max);
System.out.println("最低成绩:"+min);
}
}
学生管理
package com.newer.demo2;
import java.util.ArrayList;
import java.util.List;
import com.newer.demo.Student;
/**
* 完成学生信息的操作:<br>
* 1、注册学生<br>
* 2、查询所有的学生信息<br>
* 3、根据学号查询某个具体的学生信息<br>
* 4、根据学号删除某个学生信息<br>
* 5、修改某个学生信息<br>
* 6、显示所有的学生信息<br>
* 7、根据学号显示具体的某个学生信息
*
* @author Administrator
*
*/
public class StudentManager {
private List<Student> stus;
public StudentManager() {
stus = new ArrayList<>();
}
public StudentManager(List<Student> stus) {
this.stus = stus;
}
/**
* 注册一名学生
*
* @param student
*/
public void addStudent(Student student) {
stus.add(student);
}
/**
* 查询所有的学生信息
*
* @return
*/
public List<Student> query() {
return stus;
}
/**
* 根据学号查询某个具体的学生信息
*
* @param id
* @return 如果没有查到,则返回null
*/
public Student query(String id) {
// for (Student student : stus) {
// String id_=student.getId();
// if(id_.equals(id)){
// return student;
// }
// }
// return null;
//
// 或这样写:
Student stu = null;
for (Student student : stus) {
String id_ = student.getId();
if (id_.equals(id)) {
stu = student;
break;
}
}
return stu;
}
/**
* 根据学号删除某个学生信息
*
* @param id
*/
public void delStudent(String id) {
int index = -1;
for (int i = 0; i < stus.size(); i++) {
Student stu = stus.get(i);
if (stu.getId().equals(id)) {
index = i;
break;
}
}
if (index > -1) {
stus.remove(index);
}
}
/**
* 修改某个学生信息
*
* @param student
*/
public void updateStudent(Student student) {
String id = student.getId();
int index = -1;
for (int i = 0; i < stus.size(); i++) {
Student s = stus.get(i);
if (s.getId().equals(id)) {
// 说明找到了
index = i;
break;
}
}
// 更新
if (index > -1) {
stus.set(index, student);
}
// 还可这样写:
// for (int i = 0; i < stus.size(); i++) {
// Student s = stus.get(i);
// if (s.getId().equals(id)) {
// s.setId(student.getId());
// s.setName(student.getName());
// s.setScore(student.getScore());
// break;
// }
// }
}
/**
* 显示具体的某名学生信息
*
* @param stu
*/
public void display(Student stu) {
if (stu == null) {
System.out.println("没有查到相关的学生信息");
} else {
System.out.println("id:" + stu.getId());
System.out.println("name:" + stu.getName());
System.out.println("score:" + stu.getScore());
System.out.println("------------------------------");
}
}
/**
* 显示所有的学生信息
*/
public void display() {
for (Student s : stus) {
display(s);
}
}
}
package com.newer.demo2;
import java.util.LinkedList;
import java.util.List;
import com.newer.demo.Student;
public class StudentTest {
public static void main(String[] args) {
List<Student> stus=new LinkedList<>();
StudentManager mgr = new StudentManager(stus);
// 1、注册一名学生
Student s = new Student("张三", 90, "1001");
mgr.addStudent(s);
s = new Student("李祥", 90, "1002");
mgr.addStudent(s);
s = new Student("陈博", 98, "1003");
mgr.addStudent(s);
// 2、显示所有的学生信息
mgr.display();
System.out.println("*********************************************************");
// 3、又注册一名学生
s = new Student("麻六", 94, "1004");
mgr.addStudent(s);
mgr.display();
System.out.println("*********************************************************");
// 4、查找某名学生
Student ss = mgr.query("1009");
// 将结果显示出来
mgr.display(ss);
System.out.println("*********************************************************");
// 5、修改
// 首先要将修改的学生信息查询出来
Student stu = mgr.query("1004");
stu.setName("隔壁老王");
stu.setScore(30);
mgr.updateStudent(stu);
// 6再次查询,确认是否已修改成功
stu = mgr.query("1004");
mgr.display(stu);
System.out.println("*********************************************************");
//7、显示所有
mgr.display();
System.out.println("*********************************************************");
//8、删除隔壁老王
mgr.delStudent("1004");
mgr.display();
}
}