在13-集合框架1
课堂笔记在java代码中包含三种循环的方式
do...while
while
for
还有一种增强for循环的方式,可以简化循环的编写
所有的集合类都默认实现了Iterable的接口,实现此接口意味着具备了增强for循环的能力,也就是
for-each
增强for循环本质上使用的也是iterator的功能
方法:
iterator()
foreach()
在iterator的方法中,要求返回一个Iterator的接口子类实例对象
此接口中包含了
hasNext()
next()
在使用iterator进行迭代的过程中如果删除其中的某个元素会报错,并发操作异常,因此如果遍历的
同时需要修改元素,建议使用listIterator(),ListIterator迭代器提供了向前和向后两种遍历的方式
始终是通过cursor和lastRet的指针来获取元素值及向下的遍历索引
当使用向前遍历的时候必须要保证指针在迭代器的结果,否则无法获取结果值
1、set中存放的是无序,唯一的数据
2、set不可以通过下标获取对应位置的元素的值,因为无序的特点
3、使用Treeset底层的实现是Treemap,利用红黑树来进行实现
4、设置元素的时候,如果是自定义对象,会查找对象中的equals和hashcode的方法,如果没有,
比较的是地址
5、树中的元素是要默认进行排序操作的,如果是基本数据类型,自动比较,如果是引用类型的
话,需要自定义比较器
比较器分类:
内部比较器
定义在元素的类中,通过实现Comparable接口来进行实现
外部比较器
定义在当前类中,通过实现Comparator接口来实现,但是要将该比较器传递到集合中
注意:外部比较器可以定义成一个工具类,此时所有需要比较的规则如果一致的话,可以复用,而
内部比较器只有在存储当前对象的时候才可以使用。如果两者同时存在,使用外部比较器。当使用
比较器的时候,不会调用equals方法
作业public class IteratorDemo {
public static void main(String[] args) {
List list = new ArrayList();
list.add(1);
list.add("123");
list.add(true);
list.add(100L);
list.add(10.0d);
//遍历集合
// for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println("*******************");
//使用迭代器
// Iterator iterator = list.iterator();
ListIterator listIterator = list.listIterator();
while(listIterator.hasNext()){
// if(list.contains("123")){ 并发操作异常
// list.remove("123");
// }
// Object o = listIterator.next();
// if("123".equals(o)){
// listIterator.remove();
// }
System.out.println(listIterator.next());
}
// System.out.println(list);
// System.out.println("*******************");
// //增强for循环
// for(Object i :list){
// System.out.println(i);
// }
System.out.println("*********************************");
while(listIterator.hasPrevious()){
System.out.println(listIterator.previous());
}
}
}
public class LinkedListDemo {
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.add(1);
list.add("abc");
list.add(true);
list.add("abc");
list.add(100L);
System.out.println(list);
System.out.println(list.getFirst());
System.out.println(list.getLast());
list.addFirst("ok");
System.out.println(list);
// System.out.println(list.peek());
// System.out.println(list);
// System.out.println(list.poll());
// System.out.println(list);
// System.out.println(list.pop());
// System.out.println(list);
list.push("no");
System.out.println(list);
}
}
public class SetDemo implements Comparator {
public static void main(String[] args) {
// Set set = new HashSet();
// set.add(1);
// set.add("abc");
// set.add(true);
// set.add(100L);
// set.add("abc");
// System.out.println(set);
//遍历集合
// for (int i = 0; i < set.size(); i++) {
// System.out.println(set.get);
// }
//迭代器遍历
// Iterator iterator = set.iterator();
// while(iterator.hasNext()){
// Object obj = iterator.next();
// System.out.println(obj);
// }
//增强for循环
// for(Object o : set){
// System.out.println(o);
// }
// System.out.println("*******************************");
// for(Iterator iterator1 = set.iterator();iterator1.hasNext();){
// System.out.println(iterator1.next());
// }
// Set set = new TreeSet();
// set.add(1);
// set.add(123);
// set.add(5);
// set.add(20);
// set.add("abc");
// set.add("casd");
// set.add("dasd");
// set.add("bfh");
// System.out.println(set);
Set set = new TreeSet(new SetDemo());
set.add(new Person("zhangfei",19));
set.add(new Person("guanyu",20));
set.add(new Person("zhaoyun",18));
set.add(new Person("mashaladi",30));
System.out.println(set);
}
@Override
public int compare(Object o1, Object o2) {
Person p1 = (Person)o1;
Person p2 = (Person)o2;
if(p1.getAge() > p2.getAge()){
return -1;
}else if(p1.getAge() < p2.getAge()){
return 1;
}else{
return 0;
}
}
}
public class Cat implements Comparable {
private String name;
private int age;
public Cat() {
}
public Cat(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;
}
@Override
public String toString() {
return name + "t" + age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Cat cat = (Cat) o;
return age == cat.age &&
Objects.equals(name, cat.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public int compareTo(Object o) {
Cat cat = (Cat) o;
if (cat.name.length() >this.name.length()){
return 1;
}else if (cat.name.length() < this.name.length()){
return -1;
}else {
return 0;
}
}
}
public class TestCat {
public static void main(String[] args) {
HashSet cat = new HashSet();
cat.add(new Cat("美美",3));
cat.add(new Cat("丽丽",2));
cat.add(new Cat("亚亚",4));
System.out.println("昵称" + "t年龄");
//Collections.sort(cat);
for (Object o : cat){
System.out.println(o);
}
}
}
public class Employee {//员工类
private String id;//编号
private String name;//姓名
private String gender;//性别
private int age;//年龄
private String address;//籍贯
private double salary;//月薪
//空构造器
public Employee() {
}
//全参构造器
public Employee(String id, String name, String gender, int age, String address,double salary) {
this.id = id;
this.name = name;
this.gender = gender;
this.age = age;
this.address = address;
this.salary = salary;
}
//get、set方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
//重写toString方法
@Override
public String toString() {
System.out.println("【编号】t【姓名】t【性别】t【年龄】t【籍贯】t【月薪】");
return " "+id+"t"+" "+name+"t"+" "+" "+gender+" t"+" "+age+"tt"+address+"t"+salary;
}
}
public class Information {
public static ArrayList employees = new ArrayList();
//增加员工
public void addEmployee() {
Scanner input = new Scanner(System.in);
System.out.print("请输入新录入员工的编号:");
String gID = input.next();
System.out.print("请输入新录入员工的姓名:");
String gName = input.next();
System.out.print("请输入新录入员工的性别:");
String gGender = input.next();
System.out.print("请输入新录入员工的年龄:");
int gAge = input.nextInt();
System.out.print("请输入新录入员工的籍贯:");
String gAddress = input.next();
System.out.print("请输入新录入员工的月薪:");
double gPay = input.nextDouble();
Employee newOne = new Employee(gID, gName, gGender, gAge, gAddress, gPay);
employees.add(newOne);
System.out.println("添加成功!员工列表如下:");
for (Object o : employees) {
System.out.println(o);
}
}
public void delEmployee(){
Scanner input = new Scanner(System.in);
System.out.print("请输入要删除的员工对应的【员工编号】:");
String dID = input.next();
Iterator iterator = employees.iterator();
while(iterator.hasNext()){
Employee employee = (Employee)iterator.next();
if(dID.equals(employee.getId())){
System.out.print("你是否确认删除?");
String yn = input.next();
if(yn.equals("y")){
iterator.remove();
System.out.println("删除成功!员工列表如下:");
for(Object o : employees){
System.out.println(o);
}
break;
}else if(yn.equals("n")){
System.out.println("您已放弃删除");
break;
}else {
System.out.println("不存在编号:【"+dID+"】的员工!");
}
}
}
}
public void queryEmployee(){
for(Object o : employees){
System.out.println(o);
}
}
public void updateEmployee(){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入需要修改的员工对应的【员工编号】:");
String uID = scanner.next();
Iterator iterator = employees.iterator();
while(iterator.hasNext()){
Employee employee = (Employee)iterator.next();
if(uID.equals(employee.getId())){
employee.toString();
System.out.print("原有员工姓名是:【"+employee.getName()+"】请输入新的员工姓名:");
employee.setName(scanner.next());
System.out.print("原有员工性别是:【"+employee.getGender()+"】请输入新的员工性别:");
employee.setGender(scanner.next());
System.out.print("原有员工年龄是:【"+ employee.getAge()+"】请输入新的员工年龄:");
employee.setAge(scanner.nextInt());
System.out.print("原有员工籍贯是:【"+employee.getAddress()+"】请输入新的员工籍贯:");
employee.setAddress(scanner.next());
System.out.print("原有员工月薪是:【"+employee.getSalary()+"】请输入新的员工月薪:");
employee.setSalary(scanner.nextDouble());
System.out.println("修改成功!员工列表如下:");
for(Object o : employees){
System.out.println(o);
}
break;
}
}
}
}
public class TestEmployee {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true){
System.out.println("**********欢迎使用腾讯互联员工管理系统**********");
System.out.println("ttt操作码tt操作名称");
System.out.println("ttt1------------添加员工");
System.out.println("ttt2------------删除员工");
System.out.println("ttt3------------修改员工");
System.out.println("ttt4------------查询员工");
System.out.println("ttt5------------退出系统");
System.out.print("请输入操作码【操作码提示:必须是数字】:");
int num = scanner.nextInt();
Information information = new Information();
switch (num){
case 1:information.addEmployee();
System.out.println("操作码t操作名称");
System.out.println("1------继续添加");
System.out.println("2------返回上级菜单");
System.out.print("请输入操作码<必须是数字>:");
int aNum = scanner.nextInt();
if(aNum == 1){
information.addEmployee();
break;
}else if(aNum == 2){
break;
}else {
System.out.println("输入错误的操作码!强制返回上级菜单!");
}
case 2:information.delEmployee();
System.out.println("操作码t操作名称");
System.out.println("1------继续删除");
System.out.println("2------返回上级菜单");
System.out.println("请输入操作码<必须是数字>:");
int dNum = scanner.nextInt();
if(dNum == 1){
information.delEmployee();
break;
}else if(dNum == 2){
break;
}else {
System.out.println("输入错误操作码!强制返回上级菜单!");
break;
}
case 3:information.updateEmployee();
System.out.println("操作码t操作名称");
System.out.println("1------继续修改");
System.out.println("2------返回上级菜单");
System.out.println("请输入操作码<必须是数字>:");
int uNum = scanner.nextInt();
if(uNum == 1){
information.delEmployee();
break;
}else if(uNum == 2){
break;
}else {
System.out.println("输入错误操作码!强制返回上级菜单!");
break;
}
case 4:information.queryEmployee();
System.out.println("操作码t操作名称");
System.out.println("1------返回上级菜单");
System.out.println("请输入操作码<必须是数字>:");
int qNum = scanner.nextInt();
if(qNum == 1) {
information.delEmployee();
break;
}else {
System.out.println("输入错误操作码!强制返回上级菜单!");
break;
}
case 5:System.exit(0);
break;
}
}
}
}



