package com.read.List;
public class DbLinkedList<T> {
//定义内部类,用作链表的节点
private class Node<T>
{
Node<T> pre; //指向前一个节点
Node<T> next; //指向后一个节点
T value; //当前节点的值
public Node(T value, Node<T> next, Node<T> pre)
{
this.value = value;
this.next = next;
this.pre = pre;
}
public String toString()
{
return this.value + "";
}
}
public Node<T> header; //定义头节点
public int size; //定义链表的长度
public int flag; //指针所在位置
public DbLinkedList()
{
this.header = new Node<T>(null, null, null);//空的头节点,用来区分双向循环链表的首尾
this.flag = 0;
this.size = 0;
}
public void add(T value)//在链表的尾巴上面加一个节点
{
Node<T> temp=entry(size);
temp.value=value;
Node<T> next=new Node<T>(null, null, null);
next.pre=temp;
temp.next=next;
this.flag++;
this.size=this.flag;
}
public T get(int index)
{
return entry(index-1).value;
}
private Node<T> entry(int index) //迭代至index处的节点
{
Node<T> node = this.header;
for(int i=1; i<=index; i++)
{
node = node.next;
}
return node;
}
public void clear()
{
this.header = new Node<T>(null, null, null);
this.size = 0;
this.flag = 0;
}
//标志从当前位置前移一位,表示此时后进了一步
public boolean flagpre()
{
if(flag==0) //标志在第一步,不能再后退了
{
return false;
}
flag--;
return true;
}
//标志从当前位置前后一位,表示此时前进了一步
public boolean flagnext()
{
if(flag==size) //标志在最后一步,不能再后退了
{
return false;
}
flag++;
return true;
}
//在第一步时返回true
public boolean firststep()
{
if(flag==0)
{
return true;
}
return false;
}
//在最后一步时返回true
public boolean endstep()
{
if(flag==size)
{
return true;
}
return false;
}
public boolean isEmpty()
{
return this.size == 0;
}
public int size()
{
return this.size;
}
}
package com.read.List;
public class god {
public static class select{
String name;
String x;
String y;
select(){
}
public void clear(){
name=null;
x=null;
y=null;
}
}
public static void main(String[] args){
DbLinkedList<select> List=new DbLinkedList<select>();
select temp=new select();
for(int i=0;i<5;i++)
{
temp.clear();
temp.name="No."+i;
temp.x="x="+i;
temp.y="y="+i;
List.add(temp);
}
temp=List.get(List.flag);
System.out.println(temp.name);
System.out.println(temp.x);
System.out.println(temp.y);
temp.clear();
System.out.println(List.flag);
List.flagpre();
System.out.println(List.flag);
temp=List.get(List.flag);
System.out.println(temp.name);
System.out.println(temp.x);
System.out.println(temp.y);
DbLinkedList<String> it=new DbLinkedList<String>();
it.add("0");
it.add("1");
it.add("2");
it.add("3");
it.add("4");
System.out.println(it.get(it.flag));
it.flagpre();
System.out.println(it.get(it.flag));
}
}
控制台结果:
No.4
x=4
y=4
5
4
null
null
null
4
3
其中,temp第二次赋值失败了(3个null),it成功了(3)
ps:本人是新来的,积分少,见谅!
相关推荐
JAVA知识点复习模板.doc 本文档提供了 JAVA 知识点复习模板,涵盖了 JAVA 的基础知识点,包括数据类型、字符串操作、异常处理、 Servlet 生命周期、集合框架、逻辑运算符、Map 接口实现等。 一、数据类型 JAVA ...
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或...
- 单继承:Java不支持多继承,即一个类只能继承自一个父类。 - 多层继承:类可以间接继承多个基类。 - 继承性:所有类都是Object类的子类。 - **7.2.2 父类(SuperClass)和子类(SubClass)的关系** - 子类继承...
- **静态类**:在JAVA中,类不能直接标记为静态,但可以通过内部类的方式实现类似功能。 ##### 7.5 Singleton模式 - 实现一种设计模式,确保一个类只有一个实例,并提供一个全局访问点。 ##### 7.6 final关键字 - ...
- `final` 类中的所有字段也是不可变的,这意味着一旦创建了一个 `final` 类的对象,其状态就不能被修改。 **11. 继承时候类的执行顺序问题** 继承时类的执行顺序遵循从父类到子类的原则,先执行父类构造器再执行...
Java编程语言以其强大的功能和广泛的应用在IT行业中占据了重要的地位,而面试时的Java问题往往能揭示应聘者对语言理解的深度和广度。"很容易弄错的Java面试题"通常涉及那些看似简单实则暗藏陷阱的问题,这些问题能够...
- `String`类在Java中是一个不可变类,这意味着一旦一个`String`对象被创建,其内容就不能被更改。为了提高内存效率,当需要频繁修改字符串时,建议使用`StringBuilder`或`StringBuffer`。 - `String`类提供了丰富的...
Java面试100题集是Java开发者在求职过程中可能会遇到的常见问题的集合,这些问题涵盖了Java编程的基础到高级概念,旨在测试候选人的技术水平和实际应用能力。以下是一些关键知识点的详细解释: 1. **抽象**:在面向...
抽象类是不能被实例化的类,通常包含抽象方法,用于提供一个类族的共同行为的模板。 **二.接口** 接口定义了一组行为规范,通过关键字`interface`声明。 1. **接口特性**:只能包含常量和抽象方法。 2. **接口的...
String 类不能被继承,因为它的所有方法都是 final 的,确保了字符串的安全性。 3. **String 和 StringBuffer**:String 对象一旦创建就不能修改;而 StringBuffer 是可变的,适合在多线程环境中进行字符串的拼接,...
Java中的String类是一个不可变的类,提供了多种字符串操作方法。StringBuffer类和StringBuilder类是可变的字符串类,提供了高效的字符串操作方法。Java中的IO流分为输入流和输出流两种,输入流用于读取数据,输出流...
根据给定的文件标题“java常见面试题集”、描述“主要介绍java基础知识,知识面较广,适合面试时使用”以及部分内容,我们将深入解析其中提及的几个关键知识点,包括:数组、字符串、数据类型、类与对象、String与...
在Java编程语言中,Core Java是基础且至关重要的部分,涵盖了面向对象编程的基本概念、类、对象、包、异常处理、输入输出、集合框架、多线程、网络编程等多个核心主题。以下是对"CoreJava_day15"学习笔记中可能涉及...
- String不是一个基本数据类型,而是一个类。 - 整型常量默认为int类型,声明long型常量需加上L或l后缀。 - 浮点型常量默认为double类型,声明float型常量需加上F或f后缀。 - 字符型(char)本质上是一个整数,...
- 保证一个类只有一个实例,并提供一个全局访问点。 ##### 8.13 final修饰符 - 用于定义常量或不可变的对象。 ##### 8.14 Java抽象类 - 抽象类包含抽象方法,不能被实例化。 ##### 8.15 Java接口 - 接口是一组...
- `String` 是不可变的字符串类,一旦创建后其内容不能改变。 - `StringBuffer` 是可变的字符串类,可以在原有基础上进行修改。 - 当需要频繁修改字符串时,应使用 `StringBuffer` 或者 `StringBuilder` 来提高...
- **不可变性**:`String`类的对象一旦创建后,其内容不能更改。这种特性使得`String`在多线程环境下表现得更为安全。 - **可变字符串**:`StringBuilder`和`StringBuffer`提供了可修改的字符串解决方案。其中,`...
在Java编程中,我们通常会将相关代码组织成一个个的类(class),并保存为.java文件。一旦编写完成,这些源代码文件会被编译成字节码(bytecode),以.class文件的形式存在,然后由Java虚拟机(JVM)执行。 1. **...