Java链表之基础应用
来源:互联网 发布:名片app软件 编辑:程序博客网 时间:2024/06/05 02:28
class Book{ //创建book 类private String title;private double price;public Book(String title, double price){this.title = title;this.price = price;}public String getInfo(){return "图书名称:" + this.title + ",图书价格:" + this.price;}public boolean compare(Book book){ //比较方法if(this == book){return true;}if(book == null){return false;}if(this.title.equals(book.title) && this.price == book.price){return true;}return false;}}class Link{private class Node{private Book data;private Node next;public Node(Book data){this.data = data;}public void addNode(Node newNode){ //增加方法if(this.next == null){this.next = newNode;}else{this.next.addNode(newNode);}}public boolean containsNode(Book data){ //根据内容查询数据if(data.compare(this.data)){return true; //后面不再查询}else{if(this.next != null){//有后续节点,继续查询return this.next.containsNode(data);}// 没有后续节点 , 返回falseelse{return false;}}}public Book getNode(int index){//查询指定索引内容if(Link.this.foot++ == index){ //不相等自动进行下一个return this.data;}else{return this.next.getNode(index);}}public void setNode(int index,Book data){ // 修改指定索引的内容if(Link.this.foot++ == index){this.data = data;}else{this.next.setNode(index, data);}}public void removeNode(Node previous,Book data){ //处理非根节点的删除if(data.compare(this.data)){//当前节点就是要删除的节点previous.next = this.next; //上一个节点直接指向下一个节点}else{this.next.removeNode(previous.next, data);}}public Book [] toArrayNode(){//转化为对象数组进行输出Link.this.retArray[Link.this.foot ++] = this.data;if(this.next != null){this.next.toArrayNode();}return null;}}//===============以上为内部类============private Node root;private int foot = 0; // 索引private int count = 0;//保存元素个数private Book[] retArray;public void add(Book data){ //数据增加if(data == null) //为空不保存return ;Node newNode = new Node(data);if(this.root == null){this.root = newNode;}else{this.root.addNode(newNode); //增加判断转到Node()类}this.count++;}public int size(){ //取得保存的数据量return this.count;}public boolean isEmpty(){ //判断链表是否为空return this.count==0;} public boolean contains(Book data){ //查询//没有查询结果或者根节点没数据if(data == null || this.root == null)return false;return this.root.containsNode(data);}public Book get(int index){ //查询指定索引的内容this.foot = 0;if(index > count)return null;//没有数据elsereturn this.root.getNode(index);}public void set(int index,Book data){ //修改指定索引内容this.foot = 0;if(index > this.count)return ; //结束elsethis.root.setNode(index,data);}public void remove(Book data){ // 删除指定内容的节点if(this.contains(data)){//contains保证数据存在if(data.compare(this.root.data)){//删除的为根节点this.root = this.root.next;}else{ //不是根节点,从第二个节点开始this.root.next.removeNode(this.root, data);}this.count --; //删除后个数-1}}public Book [] toArray(){ //转化为对象数组进行输出(重要)if(this.root == null){return null;}else{this.foot = 0;this.retArray = new Book[this.count]; //开辟内存this.root.toArrayNode();}return this.retArray;}}public class Demo1 {public static void main(String[] args) {//测试Link link = new Link();link.add(new Book("Java开发",78.5));link.add(new Book("Web前端",59.5));link.add(new Book("JSP开发",85));System.out.println("共保存书籍" + link.size()); //共保存书籍System.out.println(link.contains(new Book("Web前端",59.5))); //查询书籍link.remove(new Book("JSP开发",85)); //删除书籍System.out.println("共保存书籍" + link.size()); //共保存书籍Book [] books = link.toArray(); //转化到对象数组进行输出for(int i = 0 ;i < books.length; i++)System.out.println(books[i].getInfo());}}
0 0
- Java链表之基础应用
- java基础应用之ArrayList
- java基础之高级应用
- java基础应用之关键字综述
- java基础之IO流的应用
- JAVA基础之泛型应用
- java自学之路-----数据库基础应用
- java框架之spring基础应用
- Java基础之正则表达式的应用
- stl之list双向链表容器应用基础
- 链表基础应用
- Java基础之反射(二):反射应用
- <java基础>零起点学Android(五)之应用窗口
- JAVA基础之理解JNI原理及应用
- Java学习笔记之基础应用(2015.3.21)
- Java语言基础之接口模板的应用
- JAVA基础之进制转换,查表法的应用
- Java基础应用之运算符(位运算加密)
- Dubbo学习(五)结果缓存
- 策略模式使用的小技巧
- PRML读书笔记——连续潜在变量
- 洛谷 P3384 【模板】树链剖分
- 支持向量积-1
- Java链表之基础应用
- day60_springMVC
- NYOJ-274 正三角形外接圆面积
- 国内composer源(解决composer慢的方法)
- 基础知识—数据类型-第一个C++程序
- tomcat启动后,http://localhost:8080无法正常显示
- HDU 1867 A + B for you again(KMP)
- Spark RDD 创建
- maven下spring ClassPathXmlApplicationContext找不到xml配置文件的问题