常见数据结构的Java实现
例子1
import java.util.*;
public class Example13_1
{ public static void main(String args[])
{ List list=new LinkedList();
list.add("is");
list.add("a");
int number=list.size();
System.out.println("现在链表中有"+number+
"个节点:");
for(int i=0;i<number;i++)
{ String temp=(String)list.get(i);
System.out.println("第"+i+"节点中的数据:"+temp);
}
list.add(0,"It");
number=list.size();
list.add(number-1,"door");
number=list.size();
System.out.println("现在链表中有"+number+"个节点:");
for(int i=0;i<number;i++)
{ String temp=(String)list.get(i);
System.out.println("第"+i+"节点中的数据:"+temp);
}
list.remove(0);
list.remove(1);
list.set(0,"open");
number=list.size();
System.out.println("现在链表中有"+number+"个节点:");
for(int i=0;i<number;i++)
{ String temp=(String)list.get(i);
System.out.println("第"+i+"节点中的数据:"+temp);
}
}
}
例子2:
……
在Java编程中,数据结构是组织、存储和处理数据的核心工具。常见的数据结构有数组、链表、栈、队列、树等。本篇将详细讨论两个Java代码示例,它们涉及到了链表这一重要的数据结构及其操作。
例子1:
在这个例子中,使用了Java的`LinkedList`类来创建一个链表数据结构。`LinkedList`是`List`接口的一个实现,它允许在列表的任何位置进行插入和删除操作,具有O(1)的时间复杂度。以下是该例子中涉及的关键知识点:
1. `List`接口:`List`是`java.util`包下的一个接口,它继承自`Collection`接口,并添加了对有序元素序列的支持。`List`接口规定了添加、删除和访问元素的方法,如`add()`, `remove()`, 和 `get()`。
2. `LinkedList`类:这是`List`接口的一个实现,内部使用双向链表实现,支持高效地在链表的头部和尾部添加或移除元素。
3. `add()`方法:用于在链表的指定位置插入元素。在这个例子中,首先在末尾添加了"is"和"a",然后在索引0处添加了"It",在末尾添加了"door"。
4. `size()`方法:返回列表中的元素数量。
5. `get()`方法:返回列表中指定位置的元素。通过循环遍历链表,打印出每个节点的数据。
6. `remove()`方法:移除列表中指定位置的元素。例子中移除了索引0和1的元素。
7. `set()`方法:替换列表中指定位置的元素。这里将索引0的元素替换为"open"。
例子2:
这个例子展示了如何在链表中存储自定义对象(`Student`),以及比较两种遍历链表的方式:迭代器(`Iterator`)和索引遍历。
1. 自定义对象:`Student`类包含了两个属性,`name`和`number`,并提供了构造函数进行初始化。
2. 遍历链表:创建了一个包含22222个`Student`对象的链表。然后,通过两种方式遍历链表以测量时间:
- 使用`Iterator`遍历:`iter.hasNext()`和`iter.next()`用于判断和获取下一个元素。这种方式是推荐的遍历链表的方式,因为它可以避免`ConcurrentModificationException`。
- 使用索引遍历:通过`for`循环,从索引0开始遍历到`list.size()-1`。这种方式效率较低,因为每次都需要通过索引访问元素。
例子3:
这个例子看似与数据结构无关,实际上展示了如何创建一个Java Swing窗口。`ShowWin`类创建了一个窗口,并设置了大小和可见性。这涉及到图形用户界面(GUI)编程,与数据结构的主要主题不符,因此在此不做深入讨论。
总结:
这两个Java代码示例主要介绍了`LinkedList`数据结构的使用,包括添加、删除、替换元素以及遍历链表的方法。在实际开发中,熟练掌握这些基本操作对于理解和实现更复杂的算法至关重要。同时,通过对比不同遍历方式,我们能了解到在处理大量数据时选择合适的方法对于性能的影响。