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),这种三个变量的交换还真不敢随便用,而且这三个变量都 ...
随机推荐
- 查看UDP连接情况
运行界面,输入"CMD"命令; 在命令提示符界面中,输入"netstat -s -p udp"命令,按回车.即可显示本机所有UDP连接情况.
- 优化Android App性能?十大技巧必知!
无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件 ...
- jsp 获取cookie 的值的方法
Cookie cookies[]=request.getCookies(); //读出用户硬盘上的Cookie,并将所有的Cookie放到一个cookie对象数组里面 Cookie sCookie=n ...
- Android----ListView入门知识--各种Adapter配合使用
引自:http://www.cnblogs.com/playing/archive/2011/03/21/1990555.html 在android开发中ListView是比较常用的组件,它以列表的形 ...
- 我的android学习脚步----------- Button 和监听器setonclicklistener
最基本的学习,设置一个按钮并监听实现实时时刻显示 首先XML布局,在layout中的 activity_main.xml中拖一个Button按钮到相应位置 然后在xml文件中做修改 <Rela ...
- Mac 生产力探究
转载自:http://devtian.me/2015/04/15/about-my-productivity-tool-in-MacOSX/ ##密码管理器 1Password 1Password 是 ...
- spider JAVA如何判断网页编码 (转载)
原文链接 http://www.cnblogs.com/nanxin/archive/2013/03/27/2984320.html 前言 最近做一个搜索项目,需要爬取很多网站获取需要的信息.在爬取网 ...
- EL探索
- Sybase IQ数据库索引
IQ是Sybase公司推出的特别为数据仓库.决策支持分析.数据分析/挖掘等查询分析密集型应用而设计的关系型数据库.IQ的架构与大多数关系型数据库不同,它特别的设计用以支持大量并发用户的即席查询.统计分 ...
- MVC和三层架构的区别
MVC是一种设计模式,Modal,View,Controller,三层分开,解开耦合,方便替换. 三层架构包括 UI层,业务逻辑层,Dao层.UI层负责展示数据,业务逻辑层具体处理数据,Dao层负责和 ...