Object修改链表
以前学习过链表的时候由于类型的接收不同,每次要重写链表
下面修改可用链表
class Link{
private class Node{
private Object data ;
private Node next ;
public Node (Object data){
this.data = data ;
}
public void add(Node newNode){
if(this.next == null)
this.next = newNode;
else{
this.next.add(newNode) ;
}
}
public void print(){
System.out.println(this.data) ;
if(this.next == null)
return ;
else {
this.next.print() ;
}
}
public boolean containsNode(Object data){
if(data.equals(this.data))
return true;
else {
if(this.next != null)
return this.next.containsNode(data);
else
return false ;
}
}
public Object getNode(int index){
if(Link.this.foot ++ == index){
return this.data ;
} else {
return this.next.getNode(index) ;
}
}
public void setNode(int index ,Object data){
if(Link.this.foot ++ == index){
this.data = data ;
}
else{
this.next.setNode(index,data) ;
}
}
public void removeNode(Node previous ,Object data) {
if(data.equals(this.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 = 0 ;
private Object [] retArray ;
public void add(Object data){
if(data == null)
return ;
Node newNode = new Node(data) ;
if (root == null)
root = newNode;
else {
this.root.add(newNode) ;
}
this.count ++ ;
}
public void print(){
this.foot = 0 ;
if(root == null)
return ;
else{
root.print() ;
}
}
public int size() {
return this.count ;
}
public boolean isEmpty(){
return this.count == 0 ;
}
public boolean contains(Object data) {
if(this.root == null || data == null)
return false ;
else {
return this.root.containsNode(data) ;
}
}
public Object get(int index){
if(index > this.count)
return null ;
else{
return this.root.getNode(index) ;
}
}
public void set(int index , Object data) {
if(index > this.count)
return ;
else{
this.foot = 0 ;
this.root.setNode(index,data) ;
}
}
public void remove(Object data){
if(this.contains(data)){
if(data.equals(this.root.data))
this.root = this.root.next ;
else{
this.root.next.removeNode(root,data) ;
}
}
}
public Object [] toArray(){
if(this.root == null){
return null ;
} else {
this.foot = 0 ;
this.retArray = new Object[this.count] ;
this.root.toArrayNode() ;
return this.retArray ;
}
}
}
public class Link1{
public static void main(String args[]){
Link all = new Link() ;
all.add("A") ; //String转为Object
all.add("B") ;
all.add("C") ;
all.remove("A") ;//String已经覆写了equals()方法
Object [] data = all.toArray();
for(int x = 0 ; x < data.length ; x ++){
String str = (String)data[x] ; //每一个对象向下转型 Object变为String
System.out.println(str) ;
}
}
}
总结:
Object类对象可以接受一切数据类型,解决了数据统一问题
Object修改链表的更多相关文章
- CLRS10.2-4练习 - 修改链表查询方法
要求: As written, each loop iteration in the LIST-SEARCH' procedure requires two tests:one for x ≠ L.n ...
- JAVA 链表操作:循环链表
主要分析示例: 一.循环链表简述 二.单链表循环链表 三.双链表循环链表 一.循环链表简述 循环链表即链表形成了一个循环的结构,尾节点不再指向NULL,而是指向头节点HEAD,此时判定链表的结束是尾节 ...
- JAVA 链表操作:单链表和双链表
主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...
- 单链表的python实现
首先说下线性表,线性表是一种最基本,最简单的数据结构,通俗点讲就是一维的存储数据的结构. 线性表分为顺序表和链接表: 顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,称为线性表的顺序存 ...
- Java链表讲解
主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...
- Python3玩转单链表——逆转单向链表pythonic版
[本文出自天外归云的博客园] 链表是由节点构成的,一个指针代表一个方向,如果一个构成链表的节点都只包含一个指针,那么这个链表就是单向链表. 单向链表中的节点不光有代表方向的指针变量,也有值变量.所以我 ...
- java对单向单向链表的操作
概述:众所周知,数据对于数据的存储时连续的,也就是说在计算机的内存中是一个整体的.连续的.不间断的ADT数据结构.伴随的问题也会随之出现,这样其实对于内存的动态分配是不灵活的.而链表具备这个优点.因此 ...
- Java链表设计
链表 1,链表的实现 在实际开发之中对象数组是一项非常实用的技术,并且利用其可以描述出“多”方的概念,例如:一个人有多本书,则在人的类里面一定要提供有一个对象数组保存书的信息,但是传统的对象数组依赖于 ...
- 由反转链表想到python链式交换变量
这两天在刷题,看到链表的反转,在翻解体思路时看到有位同学写出循环中一句搞定三个变量的交换时觉得挺6的,一般用的时候都是两个变量交换(a,b=b,a),这种三个变量的交换还真不敢随便用,而且这三个变量都 ...
随机推荐
- [原]点击按钮,表格隔行变色:偶数行为黄色背景,奇数行为默认颜色。通过table的getElementsByTagName取得所有的tr,依次遍历,如果是偶数就…………。
window.onload = function () { document.getElementById('btn').onclick = function () { ...
- JavaScript(四)---- 函数
函数主要用来封装具体的功能代码. 函数是由这样的方式进行声明的:关键字 function.函数名.一组参数,以及置于括号中的待执行代码. 格式: function 函数名(形参列表){ ...
- java工程开发之图形化界面之(第二课)
上一节主要是讨论小的应用程序,在这里我们将采用一种全新的方式来重新编写它. 在这里我们注重关注JFrame和JOptionPane.这些类提供了在JAVA应用程序使用图形的方法以及在JAVA程序中对I ...
- Ubuntu新建用户
新建用户的命令是useradd,修改密码是passwd,如下: sudo useradd linc sudo passwd linc 但是问题出现了,home目录下并没有相对应的linc目录. 原来u ...
- JAVA字符串编码转换常用类
无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题.尤其在web应用中常常需要处理中文字符,这时就需要进行字符串的编码转换,将字符串编码转换为GBK或者GB2312.一.关键技术点: ...
- Kubernetes 1.4 部署
k8s 1.4 新版本部署 测试环境: node-: 10.6.0.140 node-: 10.6.0.187 node-: 10.6.0.188 kubernetes 集群,包含 master 节点 ...
- localStorage、sessionStorages 使用
html5中的Web Storage包括了两种存储方式:sessionStorage和localStorage.sessionStorage用于本地存储一个会话(session)中的数据,这些数据只有 ...
- css Loading 教程
http://www.cnblogs.com/lhb25/p/loading-spinners-animated-with-css3.html
- phpstrom 快捷键
常用的PHPStorm快捷键:ctrl+j 插入活动代码提示ctrl+alt+t 当前位置插入环绕代码alt+insert 生成代码菜单ctrl+q 查看代码注释ctrl+d 复制当前行ctrl+y ...
- Ibatis教程
Ibatis教程 |字号 转自:http://blog.csdn.net/lhminjava/article/details/1871136 ibatis 开发指南ibatis Quick S ...