南昌优化网站排名,国外比较好的建筑设计网站,郑州 做网站,卖机票的网站怎么做感谢Java软件结构与数据结构 John Lewis Joseph chase 著 金名译 0. 迭代器关键概念#xff08;补充理解#xff09; 【1】迭代器是一个对象#xff0c;它提供了一种依次访问集合中每个元素的方式。 【2】经常把集合定义为Iterable的#xff0c;说明需要时可以提供一个迭代… 感谢Java软件结构与数据结构 John Lewis Joseph chase 著 金名译 0. 迭代器关键概念补充理解 【1】迭代器是一个对象它提供了一种依次访问集合中每个元素的方式。 【2】经常把集合定义为Iterable的说明需要时可以提供一个迭代器。 【3】迭代器可选方法remove使得它可以remove一个元素而无需再遍历集合。 【4】大多数迭代器是fail-fast的当迭代器人在使用之时如果修改集合将抛出一个异常。 【5】不能假设迭代器访问元素的顺序除非显式声明。 【6】迭代器往往实现为它所属的集合的内部类。 【7】迭代器检查修改技术以确保与集合的修改计数保持一致。 【8】for-each循环只能够用于实现了iterator接口的集合中 【9】如果不是要处理集合中的所有元素或者如果要使用迭代器的remove方法可以使用显式迭代器而不是for-each循环。 【10】如果底层集合不是由迭代器本身进行修改的fail-fast迭代器将快速而清晰地发生失败。 【11】fail-fast的实现在后继的操作中迭代器会通知集合的修改计数确保该值不会被修改。如果改了迭代器就会抛出ConcurrentModificationException异常。 2. Java集合API列表 Java集合API提供的列表类主要是支持索引列表。在一定程度上这些类同无序列表是重叠的。JavaAPI中没有实现事实上的有序列表。 【1】ArrayList是实现了基于动态数组的数据结构LinkedList基于链表的数据结构。 【2】对于随机访问get和setArrayList觉得优于LinkedList因为LinkedList要移动指针。 【3】对于新增和删除操作add和removeLinedList比较占优势因为ArrayList要移动数据。 ArrayList和LinkedList都实现了java.util.List接口。 3. 使用无序列表学习计划 Course.java package ds.java.ch06;import java.io.Serializable;/** * author LbZhang* version 创建时间2015年11月18日 上午10:19:57 * description 类说明*/
public class Course implements Serializable{private String prefix;private int number;private String title;private String grade;public Course(String prefix, int number, String title, String grade) {super();this.prefix prefix;this.number number;this.title title;if(gradenull){this.grade ;}else{this.grade grade;}}public Course(String prefix, int number, String title){this(prefix, number, title, );}public String getPrefix() {return prefix;}public void setPrefix(String prefix) {this.prefix prefix;}public int getNumber() {return number;}public void setNumber(int number) {this.number number;}public String getTitle() {return title;}public void setTitle(String title) {this.title title;}public String getGrade() {return grade;}public void setGrade(String grade) {this.grade grade;}/*** Returns true if this course has been taken * * return true if this course has been taken and false otherwise*/public boolean taken(){return !grade.equals();}public boolean equals(Object other){boolean result false;if (other instanceof Course){Course otherCourse (Course) other;if (prefix.equals(otherCourse.getPrefix()) number otherCourse.getNumber())result true;}return result;}public String toString(){String result prefix number : title;if (!grade.equals())result [ grade ];return result;}}ProgramOfStudy.java package ds.java.ch06;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;/*** author LbZhang* version 创建时间2015年11月17日 上午11:30:41* description 类说明*/
public class ProgramOfStudy implements IterableCourse, Serializable {private ListCourse list;public ProgramOfStudy() {list new LinkedListCourse();}public void addCourse(Course course) {if (course ! null)list.add(course);}public Course find(String prefix, int number) {for (Course course : list)if (prefix.equals(course.getPrefix()) number course.getNumber())return course;return null;}/*** 在某个元素之后添加元素* param target* param newCourse*/public void addCourseAfter(Course target, Course newCourse) {if (target null || newCourse null)return;int targetIndex list.indexOf(target);//获取索引if (targetIndex ! -1)list.add(targetIndex 1, newCourse);}public void replace(Course target, Course newCourse) {if (target null || newCourse null)return;int targetIndex list.indexOf(target);if (targetIndex ! -1)list.set(targetIndex, newCourse);}public String toString() {String result ;for (Course course : list)result course \n;return result;}public IteratorCourse iterator() {return list.iterator();}public void save(String fileName) throws IOException {FileOutputStream fos new FileOutputStream(fileName);ObjectOutputStream oos new ObjectOutputStream(fos);oos.writeObject(this);oos.flush();oos.close();}public static ProgramOfStudy load(String fileName) throws IOException,ClassNotFoundException {FileInputStream fis new FileInputStream(fileName);ObjectInputStream ois new ObjectInputStream(fis);ProgramOfStudy pos (ProgramOfStudy) ois.readObject();System.out.println(pos);ois.close();return pos;}}POSTester.java package ds.java.ch06;
import java.io.IOException;/*** author LbZhang* version 创建时间2015年11月18日 上午9:46:48* description 类说明*/
public class POSTester {public static void main(String[] args) throws IOException,ClassNotFoundException {ProgramOfStudy pos new ProgramOfStudy();pos.addCourse(new Course(CS, 101, Introduction to Programming, A-));pos.addCourse(new Course(ARCH, 305, Building Analysis, A));pos.addCourse(new Course(GER, 210, Intermediate German));pos.addCourse(new Course(CS, 320, Computer Architecture));pos.addCourse(new Course(THE, 201, The Theatre Experience));Course arch pos.find(CS, 320);pos.addCourseAfter(arch, new Course(CS, 321, Operating Systems));Course theatre pos.find(THE, 201);theatre.setGrade(A-);Course german pos.find(GER, 210);pos.replace(german, new Course(FRE, 110, Beginning French, B));System.out.println(pos);pos.save(ProgramOfStudy);
// pos pos.load(ProgramOfStudy);
// System.out.println(pos);}}4. 约瑟夫问题 4.1 索引列表实现 package ds.java.ch06;import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** author LbZhang* version 创建时间2015年11月18日 上午11:18:20* description 约瑟夫问题* */
public class Josephus {public static void main(String[] args) {int numPeople, skip, targetIndex;ListString list new ArrayListString();Scanner in new Scanner(System.in);// get the initial number of soldiersSystem.out.print(Enter the number of soldiers: );numPeople in.nextInt();in.nextLine();// get the number of soldiers to skipSystem.out.print(Enter the number of soldiers to skip: );skip in.nextInt();if(numPeopleskip){System.out.println(**不能进行约瑟夫环**);return ;}// load the initial list of soldiersfor (int count 1; count numPeople; count) {list.add(Soldier count);}//now location indextargetIndex skip;System.out.println(The order is: );// Treating the list as circular, remove every nth element// until the list is emptywhile (list.size()2) {System.out.println(list.remove(targetIndex));if (list.size() 0)targetIndex (targetIndex skip) % list.size();}System.out.println(list);}}4.2 数组实现 package ds.java.ch06;import java.util.Scanner;/*** author LbZhang* version 创建时间2015年11月18日 下午12:23:55* description 类说明*/
public class MyJosephus {private int total;// 总人数private int numCount;// 从当前开始第几个出列private int beginNum;// 开始编号private int[] solider;// 士兵队列private int[] outSequence;// 出队次序public MyJosephus(int total, int numCount, int beginNum) {super();this.total total;this.numCount numCount;this.beginNum beginNum;this.solider new int[total];// 初始化for (int i 0; i solider.length; i) {solider[i] i;}this.outSequence new int[total];}public void exec() {int counter 0;// /标价变量int i this.beginNum;int j 0;int killperson 0;while (true) {if (solider[i] ! -1) {// pserson[i]的值是-1代表出环// 没有出环计数器加1counter;// 判定是否数目达到numCountif ((counter) % numCount 0) {outSequence[j] i 1;// 填入队列killperson;solider[i] -1;// 杀死当前编号士兵}}i (i 1) % total;// 向后遍历if (killperson total) {break;}}System.out.println(出环按顺序为);for (int k 0; k outSequence.length; k) {// 输出出环顺序System.out.print(outSequence[k] );}}public static void main(String[] args) {int total 0;int numCount 0;int begin 0;Scanner scn new Scanner(System.in);while (true) {System.out.println(Input total num:);total scn.nextInt();System.out.println(Input numCount:);numCount scn.nextInt();System.out.println(Input begin:);begin scn.nextInt();if (total ! 0 numCount ! 0 total numCount) {MyJosephus mj new MyJosephus(total, numCount, begin);mj.exec();break;} else {System.out.println(您输入的数据不合理请重试);}}}}输出结果 转载于:https://www.cnblogs.com/mrzhang123/p/5365834.html