(1)集合框架概述
Java集合大致分为List、Set、Map和Queue Collection是一个顶级接口,其子接口有,List、Set、Queue List:有序(存放和取出顺序是一致的)、有索引、可重复 Set:无序、无索引、不可重复
(2)ArrayList
ArrayList初始化长度为10,扩容为原来的1.5倍 构造方法: public ArrayList(int initialCapacity) :创建给定容量的ArrayList,initialCapacity的值不能小于0,不能大于Integer能表示的最大值 public ArrayList():创建ArrayList对象,默认创建一个空数组。 public ArrayList(Collection<? extends E> c):传入一个集合,以集合中元素为初始元素创建对象 常用方法 add(Object o) 添加数据 add(int index,Object o) 在制定索引处添加元素 size() 获取元素个数 get(int index) 获取索引处的元素 isEmpty() 判断集合是否为空 indexOf(Object o) 判断某个元素第一次出现的位置 E remove(int index) 移除索引处元素,并返回该元素 boolean remove(Object o) 移除元素 clear() 清空元素 set(int index ,E e) 修改索引处的元素 iterator() 获取迭代器 trimToSize() 减少容量至当前元素个数 contains(Object o) 判断是否包含某个元素 lastIndexOf(Object o) 判断某个元素最后一次出现的位置 toArray() 将集合转换为数组 addAll(Collection<? extends E> c) 集合中添加集合 addAll(int index, Collection<? extends E> c) 索引处添加集合 retainAll(Collection c) 求两个集合的交集 removeAll(Collection<?> c) 移除传入集合内的元素 subList(int fromIndex, int toIndex) 获取子集合
/**
-
ArrayList练习 */
public class ArrayListDemo {
public static void main(String[] args){
//初始化list对象
List<String> list = new ArrayList<>();
//添加String对象
list.add("孙少安");
list.add("孙少平");
list.add("田润叶");
list.add("田润生");
list.add("孙少安");
list.add("路遥");
//List的若干遍历方式 System.out.println("----------------------"); //for循环 for(int i = 0;i<list.size();i++){ System.out.println(list.get(i)); } System.out.println("----------------------"); //foreach遍历 for(String s :list){ System.out.println(s); } System.out.println("----------------------"); //迭代器遍历 Iterator<String> iterator = list.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } System.out.println("----------------------"); ListIterator<String> listIterator = list.listIterator(); while(listIterator.hasNext()){ //从头到尾遍历 System.out.print(listIterator.nextIndex()); System.out.println((String)listIterator.next()); } System.out.println("----------------------"); while(listIterator.hasPrevious()){ System.out.println(listIterator.nextIndex()); System.out.println((String)listIterator.previous()); } System.out.println("----------------------"); //lambda表达式 list.forEach(s -> System.out.println(s));
// List list = null; // list.size(); 空指针异常
System.out.println("----------------------"); //删除元素 //注意!!!遍历时,集合list的容量会不断改变,会导致元素删除不干净
// for(int i = 0;i<list.size();i++){ // list.remove(i); // } // list.forEach(s -> System.out.println(s));
// for(int i = list.size()-1;i>=0;i--){ // list.remove(i); // } // System.out.println(list.size());//删除成功 // // System.out.println("----------------------");
// Iterator<String> iterator1 = list.iterator(); // while(iterator1.hasNext()){ // iterator1.next(); // iterator1.remove(); // } // for(int i = list.size()-1;i>=0;i--){ // list.remove(i); // } // System.out.println(list.size());//删除成功
//list.clear();//最简单粗暴的方式 //获取 list 对应索引的对象 System.out.println(list.get(2)); //判断集合是否为空 System.out.println(list.isEmpty()); //判断某个元素第一次出现的位置 System.out.println(list.indexOf("孙少安")); }
}
课后习题
定义一个学生类,类中包含如下成员变量 学生Id(studentId) 学生姓名(studentName) 学生年龄(studentAge) 学生性别(studentGender) 定义一个List,其中只能保存Student类型 1.定义add()方法,用户依次输入学生id,姓名,年龄,性别,并将该学生保存进List 2.定义remove()方法,用户输入id,可将对应的学生从list中删除 3.定义set()方法,用户输入学生编号,修改对应学生信息 4.定义find()方法,显示所有学生信息
/**
-
学生类 */ public class Student { /**
-
学生编号 */ protected int studentId;
/**
-
学生姓名 */ protected String studentName; /**
-
学生年龄 */ protected String studentAge; /** *学生性别 */ protected String studentGender;
/**
-
List集合存储学生信息 属于学生类 */ protected static List<Student> studentList = new ArrayList<>();
/**
-
实例化学生对象 */ public Student(){
}
/**
-
实例化学生对象 本例中主要用于完成添加学生功能
-
@param studentId
-
@param studentName
-
@param studentAge
-
@param studentGender */ public Student(int studentId,String studentName,String studentAge,String studentGender){ this.studentId = studentId; this.studentName = studentName; this.studentAge = studentAge; this.studentGender = studentGender; }
/**
-
添加学生
-
@return */ public boolean add(){ studentList.add(this); return true; }
/**
-
删除指定的学生对象
-
@param student
-
@return */ public boolean remove(Student student){ if(student ==null){ return false; } for (int i = 0;i<studentList.size();i++){ if(studentList.get(i).studentId == student.studentId) { studentList.remove(i); } } return true; }
/**
-
修改指定的学生对象
-
@param student
-
@return */ public boolean set(Student student){ if(student ==null){ return false; } for (int i = 0;i<studentList.size();i++){ if(studentList.get(i).studentId == student.studentId) { studentList.get(i).studentName = student.studentName; studentList.get(i).studentAge = student.studentAge; studentList.get(i).studentGender = student.studentGender; } } return true; }
/**
-
显示所有的学生信息 */ public void find(){ for (int i = 0;i<studentList.size();i++){ System.out.println(studentList.get(i).studentId+","+studentList.get(i).studentName+","+studentList.get(i).studentAge+","+studentList.get(i).studentGender); } } }
-
/**
-
测试类 */ public class Test { public static void main(String[] args) { int flag = 1; while (flag == 1){ Scanner scanner = new Scanner(System.in); System.out.println("----------------------"); System.out.println("-----1.添加学生-----"); System.out.println("-----2.删除学生-----"); System.out.println("-----3.修改学生-----"); System.out.println("-----4.查找学生-----"); System.out.println("----------------------"); System.out.println("----请输入对应的操作编号----"); int operationNum = scanner.nextInt(); switch(operationNum) { case 1: System.out.println("请输入学生信息:"); System.out.println("学生编号:"); int studentId = scanner.nextInt(); System.out.println("学生姓名:"); String studentName = scanner.next(); System.out.println("学生年龄:"); String studentAge = scanner.next(); System.out.println("学生性别:"); String studentGender = scanner.next(); Student student = new Student(studentId,studentName,studentAge,studentGender); if(student.add()){ System.out.println("学生添加成功!"); }else{ System.out.println("学生添加失败!"); } break; case 2: System.out.println("请输入要删除的学生编号:"); int studentId1 = scanner.nextInt(); Student student1 = new Student(); student1.studentId = studentId1; if(student1.remove(student1)){ System.out.println("学生信息删除成功!"); }else{ System.out.println("学生信息删除失败!"); } break; case 3: System.out.println("请输入要修改的学生编号:"); int studentId2 = scanner.nextInt(); System.out.println("请输入修改的学生信息:"); System.out.println("学生姓名:"); String studentName2 = scanner.next(); System.out.println("学生年龄:"); String studentAge2 = scanner.next(); System.out.println("学生性别:"); String studentGender2 = scanner.next(); Student student2 = new Student(); student2.studentId = studentId2; student2.studentName = studentName2; student2.studentAge = studentAge2; student2.studentGender = studentGender2; if(student2.set(student2)){ System.out.println("学生信息修改成功!"); }else{ System.out.println("学生信息修改失败!"); } break; case 4: System.out.println("所有学生信息如下:"); Student student3 = new Student(); student3.find(); break; default: System.out.println("无对应的操作编号!"); break; } System.out.println("输入0退出操作"); System.out.println("输入1继续操作"); flag = scanner.nextInt(); } } }