ArrayList,LinkedList,HashTable三者是JAVA中的三种常见的数据结构,当然它们的性能有不同的差异,比如数据查找速度,增加或删除数据的速度,内存空间占用等等,这将在下篇博客中体现,这篇博客只是大致应用数据结构知识来自己实现三种数据结构的基本功能,包含一些简单的增查改删功能。
ArrayList:
public class ArrayList { private int counts; //数组实际填充大小 private int stepcount; //数组将溢出时的扩充步长 Object[] data =new Object[10]; //默认数组长度为10 //无参的构造方法,默认扩充步长为100 public ArrayList(){ stepcount=100; } //带初始数组长度与扩充步长的构造方法 public ArrayList(int initlen,int stepcount){ data=new Object[initlen]; this.stepcount=stepcount; } //给数组添加新数据 public void add(Object obj){ if(counts>=data.length){ //判断有无溢出,溢出则增加数组长度stepcount,并将原数组数据放入新数组 Object[] data2=new Object[data.length+stepcount]; for(int i=0;i<data.length;i++){ data2[i]=data[i]; } data=data2; } data[counts++]=obj; } //获得指定数组位置的内容 public Object get(int index){ if(index<0||index>data.length){ System.out.println("超出数组限定范围"); return null; } return data[index]; }; //删除指定位置的元素 public void remove(int index){ Object[] data2 = new Object[data.length-1]; for (int i=0;i<index;i++){ data2[i]=data[i]; } for (int i=index+1;i<data.length;i++){ data2[i-1]=data[i]; } data=data2; Object obj =data[index]; } //获得数组大小 public int size(){ return counts; } //在指定位置插入元素 public void insert(Object obj,int index){ Object[] data2 =new Object[data.length+1]; //新建一数组才可从数组中间插入,此时新数组长度需至少加一 for(int i=0;i<index;i++){ data2[i]=data[i]; } data2[index]=obj; for(int i=index+1;i<data2.length;i++){ data2[i]=data[i-1]; } data=data2; } }
LinkedList:
public class MyLinkList implements List { //声明根节点 private Node root=null private Node tail,tempt; private int total; //给链表添加元素 public void add(Object obj) { Node newnode =new Node(); if (root==null){ newnode.data=obj; root=newnode; tail=newnode; } else{ tail.next=newnode; newnode.data=obj; tail=newnode; } total++; } //获取链表指定位置元素(为便于习惯,默认从一开始) public Object get(int index) { if(index==0){ return null; } if(index-1==0){ return root.data; } else { tempt=root; for(int i=1;i<index;i++){ tempt=tempt.next; } return tempt.data; } } //删除某指定链表元素 public void remove(int index) { if(index-1==0){ root=root.next; } else { tempt=root; for(int i=1;i<index-1;i++){ tempt=tempt.next; } tempt.next=tempt.next.next; } total--; } //获得链表的大小 public int size() { return total; } //给链表指定位置插入某元素 public void insert(Object obj, int index) { Node insertNode =new Node(); insertNode.data=obj; if(index-1==0){ insertNode.next=root; root=insertNode; } else { tempt=root; for(int i=1;i<index-1;i++){ tempt=tempt.next; } insertNode.next=tempt.next; tempt.next=insertNode; } total++; } //该链表内部类实现对Node的定义 class Node{ Object data; Node next; Node(Node next,Object data){ this.next=next; this.data=data; } } }HashTable:
相关推荐
- 在选择使用哪种数据结构时,需要考虑性能需求、线程安全性以及是否允许重复元素等因素。例如,如果需要高并发且线程安全,可以选择 Vector 或者同步控制的 ArrayList;如果对性能要求较高且无需线程安全,...
在Java中实现数据结构,可以利用其强大的类库和面向对象特性。以下将详细介绍标题和描述中涉及的数据结构常考知识点及其Java实现。 1. 线性表: 线性表是最基础的数据结构,包括数组和链表两种形式。在Java中,数组...
List、ArrayList、Vector及map、HashTable是Java中常用的容器类,它们都继承自Collection接口,并提供了不同的实现方式和特点。在实际开发中,选择合适的容器类是非常重要的。 Collection接口是Java中最基本的集合...
5. **集合框架**:Java的`java.util`包提供了丰富的集合类,如ArrayList、LinkedList、HashSet、HashMap等。学习这些集合类的特性和使用场景,以及它们与数据结构的关联。 6. **映射(Map)**:理解键值对的概念,...
首先,数组是Java中最基本的数据结构之一,是相同类型变量的集合。数组可以是一维或多维的,通过下标来访问数组元素。Java中数组的初始化和内存分配是一个重要概念,包括动态数组的概念和Java的边界检查机制。 简单...
下面将详细解释这些数据结构及其在Java中的实现。 1. **数组**:数组是最基本的数据结构,它是一系列相同类型元素的集合,可以通过索引来访问和修改。在Java中,数组是固定大小的,一旦创建就不能改变大小。 2. **...
8. 哈希表(Hashtable):哈希表是一种通过哈希函数快速定位元素的数据结构,Java的Hashtable类即为一个线程安全的哈希表实现。注意,Hashtable不接受null键和值,而HashMap则允许。 9. 树(Tree):二叉树和多叉树...
根据给定的文件信息,我们将深入探讨Java中的一些核心数据结构及其在`java.util`包中的实现。 ### 线性表、链表与哈希表 #### 线性表 线性表是数据结构中最基础的一种,其特点是数据元素之间存在一对一的线性关系...
在Java中,这些数据结构通常通过类或接口来实现,如ArrayList、LinkedList、Stack、Queue等。理解这些数据结构的特性(如插入、删除、查找的时间复杂度)对于选择合适的数据结构至关重要。 2. **栈和队列** 栈是一...
线性数据结构动态数组(ArrayList) 链表(LinkedList) 单向链表 双向链表 循环链表 静态链表 栈(Stack) 队列(Queue) 双端队列(Deque) 循环队列 哈希表(HashTable) 树形数据结构 二叉树(BinaryTree)、...
Java提供了`java.util.Stack`和`java.util.Queue`接口及其实现类来操作这两种数据结构。 三、链表 链表是另一种线性数据结构,与数组不同,链表的元素不连续存储,而是通过节点间的引用连接。这使得链表在插入和...
Java作为一门面向对象的语言,以其强大的跨平台能力和丰富的库支持,成为实现数据结构的理想选择。 首先,我们要了解什么是数据结构。数据结构是组织和存储数据的方式,它决定了数据的访问效率和处理速度。常见的...
在Java中,数据结构的实现通常依赖于内置的类库,如ArrayList、LinkedList、HashSet等,但理解其底层原理和自定义数据结构的能力能使开发者在面对特定问题时更加游刃有余。 文档中可能涵盖以下主要知识点: 1. **...
LinkedList是List接口的另一个实现,它基于双向链表实现,对于在列表中间插入和删除元素,LinkedList的性能优于ArrayList,因为不需要移动元素。但在随机访问元素时,LinkedList的性能较差,因为需要从头或尾部开始...
本课件“数据结构(Java版)”专注于使用Java编程语言来实现各种数据结构,由电子工业出版社出版,由叶核亚编著。Java作为一种广泛应用的面向对象的编程语言,其丰富的类库和强大的内存管理机制使得实现复杂的数据...
4. **队列**:先进先出(FIFO)的数据结构,Java的java.util.Queue接口及其实现类,如ArrayDeque,提供了enqueue和dequeue操作。 5. **树结构**:包括二叉树、二叉搜索树、平衡树(如AVL树和红黑树)。Java的...
HashTable是一种基于键值对的数据结构,提供快速的查找功能。由于不允许重复键,它的容量通常是质数,以优化哈希函数。然而,HashTable同样是非泛型的,导致了装箱和拆箱。为了解决这个问题,.NET 2.0推出了...