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();
}
}
java学习笔记——可用链表的更多相关文章
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习笔记--Swing用户界面组件
很多与AWT类似. 事件处理参考:Java学习笔记--AWT事件处理 1.设计模式: 模型:存储内容视图:显示内容控制器:处理用户输入· 2. 文本输入常用组件 2.1 文本域: JLabel lab ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记16--I/O流和文件
本文地址:http://www.cnblogs.com/archimedes/p/java-study-note16.html,转载请注明源地址. IO(Input Output)流 IO流用来处理 ...
- java学习笔记10--泛型总结
java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5-- ...
- 20145230《java学习笔记》第七周学习总结
20145230 <Java程序设计>第7周学习总结 教材学习内容 Lambda语法概览 我们在许多地方都会有按字符串长度排序的需求,如果在同一个方法内,我们可以使用一个byName局部变 ...
- 20145231第二周Java学习笔记
20145231 <Java程序设计>第2周学习总结 教材学习内容总结 本周的学习采用的依然是先看课本,再看视频,然后实践敲代码,最后根据学习笔记总结完成博客. 第三章:基础语法 知识点比 ...
- Java学习笔记之---API的应用
Java学习笔记之---API的应用 (一)Object类 java.lang.Object 类 Object 是类层次结构的根类.每个类都使用 Object 作为超类.所有对象(包括数组)都实现这个 ...
- java学习笔记(1)java的基础介绍 、JDK下载、配置环境变量、运行java程序
java工程师是开发软件的 什么是软件呢? 计算机包括两部分: 硬件: 鼠标.键盘.显示器.主机箱内部的cpu.内存条.硬盘等 软件: 软件包括:系统软件和应用软件 系统软件:直接和硬件交互的软件:w ...
随机推荐
- maven使用nexus服务器
1.找到maven的安装路径,例如:C:\apache-maven-3.3.9 打开conf目录下的settings.xml文件 2.在<servers>节点下,配置 <server ...
- 使用java mail的网易smtp协议 发送邮件
package com.enation.newtest; import java.security.GeneralSecurityException; import java.util.Propert ...
- 全自动google检索后台
是不是每天为了找后台,伤破了蛋,每次在google输入”site:www.xxx.com intitle:登陆”.是不是手都累麻了,无聊又浪费时间.有了它,你的蛋就不用在碎了 直接上源码 1 2 3 ...
- 制作TimeLine物流信息展示效果
var TimeLine = function (_id) { this.id = _id; this._top = 40; this.vHeight = 40; this.global_top = ...
- Linux Mint---shutter截图软件
shutter 可以说是linux下最好的截图软件了,默认安装好后不能编辑截图,解决方法如下: 1-关闭shutter 2-sudo apt-get install shutter libgoo-ca ...
- mysql服务性能优化—my.cnf_my.ini配置说明详解(16G内存)
这配置已经优化的不错了,如果你的mysql没有什么特殊情况的话,可以直接使用该配置参数 MYSQL服务器my.cnf配置文档详解硬件:内存16G [client]port = 3306socket = ...
- nginx部署web.py项目
= =测试环境直接就python index.py就好啦 生产环境nginx + web.py + uwsgi 安装uwsgi... pip install uwsgi 首先把自己的代码小改一下... ...
- Android Sshd使用
1. 介绍 因为某些原因, 笔者需要在android上开发, 使用adb比较麻烦, 于是想使用sshd. 推荐的软件是openssh, 其他选择有dropbear, mosh.当然还有其他选择, 如 ...
- VS2013 MFC C++ CString ,const char , char, string 类型转换
VS2013 测试 以下测试加入头文件: # include <string>#include <cstdlib>using namespace std; //-------- ...
- hdu 畅通工程系列题目
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 并查集水. #include <stdio.h> #include <iost ...