- 浏览: 117600 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
HuoYun:
兄弟,这个代码对于其他excel转换会出问题,如数据库导出的e ...
excel文件转换为pdf文件的问题总结 -
listen-raining:
这两天正在弄这个东东
excel文件转换为pdf文件的问题总结 -
李001:
你是英雄!
excel文件转换为pdf文件的问题总结 -
237304457:
少文,功 能有全事例不,
excel文件转换为pdf文件的问题总结 -
237304457:
提供大资源是哪种方式呀?
excel文件转换为pdf文件的问题总结
这个类实现了java List接口,底层完全由链表来实现。(非常好的单链表的例子)
package datasturct; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /** * 我自己实现List 接口的MyLinkList类 * @author newapps * 2009-12-9 */ public class MyLinkList<T>{ /** * 节点内部类 * @author newapps * @param <T> 表示泛型 */ private class Node<T>{ T value; Node<T> next; Node(T value){ this.value=value; this.next=null; } } /**定义链表的头结点*/ private Node<T> head=null; /** * 链表中节点数 */ public int size() { Node<T> p; int size=0; for(p=head;p!=null;p=p.next){ size++; } return size; } /** * 判断该链表的节点数是否为零 */ public boolean isEmpty() { if(size()==0){ return true; } return false; } /** * 查找链表中是否含有某个指定节点值的节点 * @param o 节点值 * @return 是否含有 */ public boolean contains(T o) { if(isEmpty()){ return false; } Node<T> p; for(p=head;p!=null;p=p.next){ if(p.value.equals(o)){ return true; } } return false; } /** * 迭代器方法 * @return */ public Iterator iterator() { return new Itor(); } /** * 迭代器的实现类 * @author newapps * 2009-12-9 */ private class Itor implements Iterator{ /**位置*/ private int index=0; // private int cursor=0; public boolean hasNext() { if(index<size()){ return true; } return false; } public T next(){ T o = get(index++); return o; } public void remove() { MyLinkList.this.remove(size()-1); } } /** * 将集合中所有元素作为一个Object[]数组返回 * @return */ public Object[] toArray() { if(isEmpty()){ return null; } int length=size(),i=0; Object[] a=new Object[length]; Node<T> p; for(p=head;p!=null;p=p.next){ a[i]=p.value; i++; } return a; } /** * 由于list接口是有序 * 所以链表中添加节点数 * 应当在最后一个节点位置后添加 * @param o 节点值 * @return 添加是否成功 */ public void add(T o){ if(isEmpty()){ head=new Node<T>(o); }else{ Node<T> p=head; Node<T> node=new Node<T>(o); while(p.next!=null){ p=p.next; } p.next=node; node.next=null; } } /** * 要删除链表中某个节点的值 * 首先要找到该节点 * 最后才删除 * @param o * @return */ public boolean remove(T o){ Node<T> p=head,p1=null; boolean have=false; if(isEmpty()){ return false; } while(p!=null){ if(p.value.equals(o)){ if(p1==null){ head=head.next; }else{ p1.next=p.next; } have=true; } p1=p; p=p.next; } return have; } /** * 查找集合中所有元素在该链表中是否也存在 * @param c * @return */ public boolean containsAll(Collection c) { if(isEmpty()){ return false; } if(c.size()==0){ return false; } if(c==null||c.size()>size()){ return false; } Iterator it=c.iterator(); while(it.hasNext()){ T o=(T)it.next(); if(!contains(o)){ return false; } } return true; } /** * 将集合所有的元素添加到链表中 * @param c * @return */ public boolean addAll(Collection c){ if(c==null||c.size()==0){ return false; } Iterator it=c.iterator(); while(it.hasNext()){ T o=(T)it.next(); add(o); } return true; } /** * 从指定的下标位置将集合中所有的元素添加到链表中 * @param index * @param c * @return */ public boolean addAll(int index, Collection c) { if(c==null||c.size()==0){ return false; } if(isEmpty()){ addAll(c); return true; } if(index<-1){ return true; }else if(index>=size()){ addAll(c); }else{ int i=index; Iterator it=c.iterator(); while(it.hasNext()){ T o=(T)it.next(); add(i,o); i++; } } // 将集合中 return false; } /** * 在链表中删除包含集合中的所有元素 * @param c * @return */ public boolean removeAll(Collection c){ if(c==null||c.size()==0){ return false; } if(isEmpty()){ return false; } Node<T> p; Iterator it=c.iterator(); while(it.hasNext()){ T o=(T)it.next(); remove(o); } return true; } /** * 在链表中仅保留集合中的元素其余的全部删除 * @param c * @return */ public boolean retainAll(Collection c) { if(isEmpty()){ return false; } if(c==null||c.size()==0){ return false; } Node<T> p; for(p=head;p!=null;p=p.next){ T m=p.value; boolean have=false; Iterator it=c.iterator(); while(it.hasNext()){ T o=(T)it.next(); if(m.equals(o)){ have=true; } } if(!have){ this.remove(m); } } return true; } public void clear() { head=null; } /** * 依据指定的下标,找出链表中的元素的值 * @param index * @return */ public T get(int index) { int i=-1; if(isEmpty()){ return null; } if(index<0||index>size()){ return null; } Node<T> p=head; while(p!=null){ i++; if(i==index){ return p.value; } p=p.next; } return null; } /** * 替换链表指定位置的元素 * 并返回替换前的元素 * @param index * @param element * @return */ public T set(int index, T element) { int i=-1; if(isEmpty()){ add(element); return null; } if(index<0||index>size()){ return null; } Node<T> p=head; T o=null; while(p!=null){ i++; if(i==index){ o=p.value; p.value=element; return o; } p=p.next; } return null; } /** * 在链表的指定位置添加一个元素 * @param index * @param element */ public void add(int index, T element) { int i=-1; if(isEmpty()){ this.add(element); return; } if(index<0||index>size()){ return; } Node<T> p=head,p1=null; while(p!=null){ i++; if(i==index){ Node<T> newNode=new Node<T>(element); if(p1==null){ newNode.next=head; head=newNode; }else{ p1.next=newNode; newNode.next=p; } } p1=p; p=p.next; } } /** * 在链表中删除指定位置的元素 * @param index * @return */ public T remove(int index) { if(isEmpty()){ return null; } if(index<0||index>size()){ return null; } Node<T> p=head,p1=null; int i=-1; while(p!=null){ i++; if(i==index){ if(p1==null){ head=head.next; }else{ p1.next=p.next; } return p.value; } p1=p; p=p.next; } return null; } /** * 在链表中返回包含指定元素的下标,如果没有找到则返回-1; * @param o * @return */ public int indexOf(T o) { int i=-1; if(isEmpty()){ return -1; } Node<T> p=head; while(p!=null){ i++; if(p.value.equals(o)){ return i; } p=p.next; } return -1; } /** * 在链表中找出指定元素最后一次出现的下标 * 如果没有找到则返回-1; * @param o * @return */ public int lastIndexOf(T o) { if(isEmpty()){ return -1; } Node<T> p=head; int i=-1,index=-1; while(p!=null){ i++; if(p.value.equals(o)){ index=i; } p=p.next; } return index; } /** * 链表的打印方法 * */ public void printLinkList(){ Node<T> p; for(p=head;p!=null;p=p.next){ System.out.print(p.value+"--->"); } System.out.println(); } public static void main(String args[]){ MyLinkList<String> list=new MyLinkList<String>(); //System.out.println(list.isEmpty()); int [] s=new int[5]; list.add("5"); list.add("6"); list.add("7"); list.add("8"); Collection c=new ArrayList(); c.add("9"); c.add("10"); c.add("11"); c.add("8"); //list.remove("8"); //list.add(0,"50"); //list.remove(2); //System.out.println(list.set(2,"100")); //System.out.println(list.get(2)); //list.addAll(c); //list.printLinkList(); //list.retainAll(c); list.addAll(2,c); list.printLinkList(); Iterator it=list.iterator(); while(it.hasNext()){ System.out.print(it.next()+"---"); } // it.remove(); // it.remove(); // it.remove(); // it.remove(); list.clear(); list.printLinkList(); //System.out.println(list.indexOf("9")); //System.out.println(list.lastIndexOf("8")); //System.out.println(list.contains("10")); } }
发表评论
-
java 解析数学表达式
2011-11-20 10:33 5647数学表达式解析工具类: 支持负数运算, 多层括号嵌套运算 ... -
java代码模拟计算机实现原理(一)加法器模拟
2011-09-29 23:30 3334加法器是有两种基本逻辑门电路:异或门、与门电路组成的 ... -
jar 命令简介
2011-02-16 09:55 1211jar 命令用途:采用zip和ZLIB的压缩格式,将一系列程序 ... -
javac 命令
2011-02-16 09:17 1338最简单的方式(javac -d)首先,需要编译JAVA文件,需 ... -
阿拉伯数组转换成对应中文
2011-02-12 11:52 1161package com.heda.code; publi ... -
java二叉树实现
2011-02-12 11:50 1075package com.heda.code; publi ... -
最大公约数和最小公倍数
2011-02-12 11:48 1042package com.heda.code; publi ... -
比较完整数据源实现
2010-06-12 21:35 1492package com.bpsoft.bl ... -
jxl 操作excel Demo
2010-05-25 16:02 1364程序是用:jxl技术来操作excel文档的,实现了excel插 ... -
Jacob操作Word详细教程
2010-05-11 21:16 5462首先, ... -
Java 正则表达式小结
2010-05-11 20:25 1499Java 中正则表达式是在Java 1.4版本以后才出现的。在 ... -
DOM写的xml工具类
2010-04-05 16:15 1410package xml_util; import j ... -
日志记录器
2010-03-12 23:12 991package log_util; import jav ... -
java1.5新特性枚举实现原理
2010-03-09 00:24 1158package com.bp_soft.day01; /** ... -
Struts 1实现原理之我理解
2010-03-06 23:23 1496Struts是在servlet基础上设计的一种框架。下面看一段 ... -
JDBC模板类实现(version1.1)
2010-01-30 14:34 1410package daoUtil.daoTemplate; ... -
BeanUtils.copyProperties(son, father)使用感想
2010-01-28 12:20 3180BeanUtils.copyProperties(son, f ... -
jdbc数据源
2010-01-20 19:06 1101数据源设计思想和数据库连接池设计思想基本相似。大家知道在操作数 ... -
经典JDBC DAOFactory类实现
2010-01-09 23:02 2441package ajax.user.language.fact ... -
WEB应用中常用的数据库连接池
2009-12-26 16:07 1385数据库连接池是WEB应用中必不可少的东西,这是我个人最近参照别 ...
相关推荐
模拟实现 LinkedList 测试类
链表类LinkedList的完全c++实现,根据数据结构与算法课堂总结。
在Java编程语言中,LinkedList集合类是一个非常重要的数据结构,它可以用来实现栈和队列这两种特殊的数据结构。LinkedList是一个双链表,每个节点包含数据元素和两个引用,分别指向前后节点,这使得在列表中进行插入...
最后,`LinkedList`文件可能是实现了链表类的主体,该类封装了链表操作并提供了一种面向对象的方式来使用链表。这个类可能包含了构造函数、析构函数,以及在`List.h`中声明的方法的实现。例如,链表类的构造函数可能...
在Java编程语言中,`LinkedList` 是一个常用的集合类,它实现了`List`接口,并且提供了额外的功能,如双端操作。本篇文章将探讨如何利用`LinkedList`来实现队列和栈这两种数据结构,以及其背后的原理和源码分析。 #...
在JavaScript中实现LinkedList,我们需要理解其基本概念、操作以及如何用原生JavaScript对象来模拟链表结构。 首先,LinkedList由一系列节点(Node)组成,每个节点包含两部分:数据和指向下一个节点的引用。在...
首先,LinkedList类位于Java的`java.util`包中,它实现了List接口,允许我们存储和操作一系列元素。LinkedList内部维护了一个双向链表,每个元素都是一个Node对象,包含元素值以及指向前后节点的引用。由于...
以下是一个简单的LinkedList实现: ```javascript // 定义Node类 class Node { constructor(data, next = null) { this.data = data; this.next = next; } } // 定义LinkedList类 class LinkedList { ...
5. **迭代器**: LinkedList实现了Iterator接口,提供`iterator()`方法用于遍历列表。LinkedList的迭代器允许我们按顺序遍历元素,同时支持`hasNext()`、`next()`和`remove()`操作。与ArrayList不同,LinkedList的...
本资源通过实现一个自定义的LinkedList集合类,深入探讨了如何将链表、泛型和反射这三个关键知识点结合在一起。 首先,链表在Java中的标准实现是`java.util.LinkedList`类,它提供了添加、删除、查找等操作,支持...
首先,LinkedList实现了List接口,因此它是一个有序列表。它还实现了Deque接口,这意味着LinkedList支持双端队列的操作。除了这些接口之外,LinkedList还是Cloneable和java.io.Serializable的,表示它可以被克隆以及...
栈是先进先出的原则,该类实现了栈的移入移除
在Java编程语言中,LinkedList是一个实现List接口的类,它以双向链表的形式存储元素。这个数据结构允许我们在列表的任何位置进行插入和删除操作,具有O(1)的时间复杂度,这使得LinkedList在需要频繁进行这些操作时比...
这两个类(Stack和Queue)虽然基于LinkedList实现,但它们都提供了抽象数据类型的接口,隐藏了底层的实现细节,使得代码更具有封装性和可复用性。在实际项目中,如果对性能有较高要求,通常会使用专门的栈(如...
本文将详细讲解如何使用Java中的LinkedList类来模拟这两种数据结构,并实现其基本操作。 堆栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构,它遵循“先进后出”的原则。常见的堆栈操作有压栈...
ArrayList、LinkedList、Vector 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 Vector 都是采用数组方式存储数据的,这种...
- LinkedList 继承自 AbstractSequentialList,这是一个抽象类,提供了部分 List 操作的默认实现。 - LinkedList 实现了 List 接口,因此可以执行所有 List 相关的操作,如添加、删除、查找元素等。 - LinkedList ...
在实践中,我们可以编写代码来演示如何使用LinkedList实现二叉树的构建和遍历。例如,创建一个BinaryTreeNode类,然后用LinkedList来存储节点,通过调整节点的引用关系来构建二叉树,并实现遍历方法。这样的练习有助...
### List-LinkedList 单链表就地反转 #### 概述 本文主要介绍单链表的就地反转算法实现,并通过具体的C语言代码示例来解释这一过程。...对于初学者来说,理解并熟练掌握这类基本操作是非常有帮助的。