java学习笔记——可用链表

NO 链表方法名称 描述
1 public void add(数据类型 对象) 向链表中增加数据
2
public int size()

查看链表中数据个数
3 public boolean isEmpty() 查看链表是否为空
4 public void clean() 清空链表
5 public 数据类型 get(int index) 返回指定索引的数据对象,需要使用自定义类中的Compare()函数方法
6 public boolean contains(数据类型  对象) 查看链表中是否包含数据对象,需要使用自定义类中的Compare()函数方法
7 public  void remove(数据类型 对象) 删除链表中数据对象,需要使用自定义类中的Compare()函数方法
8 public 数据类型[] toArray() 转换为数据对象数组
class Person{
    String name;
    int age;
    public Person(String name,int age) {
        // TODO Auto-generated constructor stub
        this.name=name;
        this.age=age;
    }
    public boolean Compare(Person person){
        if(person==null) return false;
        if(this==person) return true;
        if(this.name==person.name&&this.age==person.age)
            return true;
        return false;
    }
    public void getInfo(){
        System.out.println("name:"+name+",age:"+age);
    }
}
class Link{
    private class Node{
    private Person data;
    private Node next;
    public Node(Person data) {
        // TODO Auto-generated constructor stub
        this.data=data;
    }
    /**********************************************/
    public void addNode(Node newNode){
        if(this.next==null)
            this.next=newNode;
        else {
            this.next.addNode(newNode);
        }
    }
    /*********************************************/
    public Person getNode(int index){
        if(index==Link.this.foot++)//注意:内部类能直接访问外部类的变量
            return this.data;
        return this.next.getNode(index);
    }
    /*********************************************/
    public boolean containsNode(Person data){
        if(this.data.Compare(data))
            return true;
        else if(this.next==null)/*重点*/
            return false;
        return this.next.containsNode(data);
    }
    public void removeNode(Node previous,Person data){
        if(this.data.Compare(data))
            previous.next=this.next;
        else
            this.next.removeNode(this, data);
    }
    public void toarrayNode(){
        Link.this.retArray[Link.this.foot++]=this.data;
        if(this.next!=null)
            this.next.toarrayNode();
    }
    /*********************************************/
    }
    private Node root;
    private int count=0;//结点个数
    private int foot;//为了查找相关位置节点
    private Person [] retArray;
    public void add(Person data){
        Node newNode=new Node(data);
        if(root==null) root=newNode;
        else {
            root.addNode(newNode);
        }
        count++;
    }
    public int size(){
        return count;
    }
    public boolean isEmpty(){
        return this.count==0;
    }
    public void clean(){//java的虚拟机会自动回收那些分配的空间
        root=null;
        count=0;
    }
    public Person get(int index){
        if(index>count)
            return null;
        this.foot=0;
        return this.root.getNode(index);
    }
    public boolean contains(Person data){
        if(data==null) return false;
        return this.root.containsNode(data);
    }
    public void remove(Person data){
        if(this.contains(data)){
            if(this.root.data==data)
                this.root=this.root.next;
            else
                this.root.next.removeNode(root, data);//重点
            this.count--;
        }
    }
    public Person [] toArray(){
        if(this.count==0)
            return null;
        retArray=new Person[count];
        this.foot=0;
        this.root.toarrayNode();
        return retArray;
    }
}
public class LinkDemo {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Link link=new Link();
        link.add(new Person("张三", 20));
        link.add(new Person("李四", 21));
        link.add(new Person("王五", 22));
        System.out.println("size:"+link.size());
        Person[] per1=link.toArray();
        for(int i=0;i<per1.length;i++)
            per1[i].getInfo();
        Person tmp=new Person("李四", 21);
        link.remove(tmp);
        Person[] per2=link.toArray();
        for(int i=0;i<per2.length;i++)
            per1[i].getInfo();
    }

}
时间: 2024-08-02 23:03:25

java学习笔记——可用链表的相关文章

java学习笔记 第二篇 核心技术(二)

第十四章 集合类 集合类用来存放对象的引用.继承关系如下图: 14.1 Collection 接口 是层次结构中的根接口,构成Collection的单位称为元素.Collection接口不能直接使用,但该接口提供了添加元素.删除元素.管理数据的方法. Collection接口常用方法: 14.2 List 集合 包括List接口以及List集合的所有实现类.List集合中的元素允许重复,各元素循序就是对象插入的顺序 1.List接口,两个重要方法: get(int index): 获取指定索引位

java学习笔记10--泛型总结

java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note10.html,转载

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

Java学习笔记之继承

一.继承的基础 在Java术语中,被继承的类叫超类(superclass),继承超类的类叫子类(subclass). 举例说明: 1 class Box 2 { 3 public double width; 4 public double height; 5 public double depth; 6 7 //重载构造方法 8 public Box(Box ob) 9 { 10 width = ob.width; 11 height = ob.height; 12 depth = ob.dep

非专业码农 JAVA学习笔记 6java工具类和算法-string

续<非专业码农 JAVA学习笔记 5 java工具类和算法> 五.字符串string 字符串和字符的差别:字符串双引号括起来”n”,字符用单引号括起来,表示一种符号’\n’ 1.string的主要方法和属性 类 方法或者属性 备注 定义string Stirng s=new string(“值”),string s=”值” 属性 string.length:string的长度为字节 方法startswith,endswith s.startwith(“值”)-以值为开头,s.endswith(

JAVA学习笔记 -- 数据结构

一.数据结构的接口 在Java中所有类的鼻祖是Object类,但是所有有关数据结构处理的鼻祖就是Collection和Iterator接口,也就是集合与遍历. 1.Collection接口 Collection c = new Xx(); // c可以称为Collection接口回调对象,虽然它被声明为Collection类型,但是实例化时实现的是接口的实现类Xx.它的方法也是用来操作实现类的对象. <span style="white-space:pre"> </s

Java学习笔记(2015.7.27~7.31)

Java学习笔记(2015.7.27~7.31) Java 课堂 Java学习笔记(2015.7.27~7.31) 小技巧 常用方法 1.List另一个子类--LinkedList 2.数组的常用方法 3.排序 1.二分法查找 2.数组转换为List 3.可变参数Type ... param (了解) 1.容器Collection 2.自动拆装箱(了解) 3.JDK增强for循环(了解) 4.泛型(掌握) 5.iterator与for在迭代中的区别 1.概念:保存多个对象的对象. 2.JDk为什

java学习笔记16--I/O流和文件

本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input  Output)流 IO流用来处理设备之间的数据传输,对数据的操作是通过流的方式,Java用于操作流的对象都在IO包中 输入/输出流可以从以下几个方面进行分类 从流的方向划分: 输入流.输出流 从流的分工划分: 节点流.处理流 从流的内容划分: 面向字符的流.面向字节的流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对

线程异步学习(基于java学习笔记)

一 基本概念的理解 1.1线程中断方法 --interrupt() 当调用一个线程的interrupt方法时候,线程并没有真的被中断,只是对其状态改变,线程会有一个boolean变量isInterrputed.有wait sleep方法会阻塞线程. wait 和sleep方法都会使得线程挂起,阻塞.区别是wait会释放资源,而sleep方法并不会释放资源.一旦执行wait方法后,线程立即被挂起,直到有其他线程调用资源的notify方法.具体参见博客,多线程资源争用问题: http://blog.