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 ...
随机推荐
- java算法(二) 快速排序
快速排序是一种交换排序. 快速排序由C. A. R. Hoare在1962年提出. 它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数. 然后再 ...
- 配置Nginx来支持php
安装php7 下载地址:https://secure.php.net/downloads.php这里下载的是:wget http://ar2.php.net/distributions/php ...
- 自定义topo遇到的坑
错误:TypeError: __init__() got an unexpected keyword argument 'delay' 解决办法:在创建topo的地方加一个link=TCLink即可, ...
- 网站开发只需数小时?Meteor 说这才是未来
原文: http://www.geekpark.net/topics/211573/ 那个想要挑战过去数十年沿用至今的网站开发模式的新势力来了. Meteor 是从 YC 孵化而出的现代网站开发平台, ...
- 你不一定知道的、并没有什么卵用的一些python库
1. delorean,用来处理时间的库 import datetime import pytz # 一般情况下,我们想表示时间的话 est = pytz.timezone("Asia/Sh ...
- 利用Com组件产Excel完整操作
最近公司要批次产出报表,是利用控制台应用程序操作Excel,并设置各种样式. 在网上搜索此类的例子,但是感觉一些用法都已经发生了变化,我用的.net 4.0 ,Microsoft.Office.Int ...
- Netty源码学习(二)NioEventLoopGroup
0. NioEventLoopGroup简介 NioEventLoopGroup可以理解为一个线程池,内部维护了一组线程,每个线程负责处理多个Channel上的事件,而一个Channel只对应于一个线 ...
- 手机估值计算的jquery代码
<script type="text/javascript"> $('#inquiry').click(function(){ var total=0; var cou ...
- CodeForces 450B Jzzhu and Sequences 【矩阵快速幂】
Jzzhu has invented a kind of sequences, they meet the following property: You are given x and y, ple ...
- 51nod 1101 换零钱 【完全背包变形/无限件可取】
1101 换零钱 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 N元钱换为零钱,有多少不同的换法?币值包括1 2 5分,1 2 5角,1 2 5 ...