java实现自定义类实现HashMap,Arraylist,Queue数据结构

                        java实现自定义类HashMap,ArrayList,Queue结构

我们可能了解hashmap的用法,了解过底层的源码,jdk1.7底层采用拉链法实现,jdk1.8中采用红黑树。这里我们用

jdk1.7中的方式实现hashmap数据结构。用结点类实现ArrayList和Queue。

自定义类实现Queue结构:

Queue.java:

package MM;

public class Queue{

	private int count;
	private QueueNode head;
	private QueueNode tail;
	public void add(Integer i) {
		QueueNode tnode=new QueueNode(i);
		if(count==0) {
			head=tnode;
			tail=tnode;
		}
		else {
			tail.next=tnode;
			tail=tnode;
		}
		count++;
	}
	public Integer remove() {
		if(count==0) {
			System.out.println("队列没有结点");
			return null;
		}
		else {
			QueueNode t=this.head;
			QueueNode t1=t;
			while(t.next!=null) {
				t1=t;
				t=t.next;
			}
			System.out.println("数据"+t.data+"出队列");
			t1.next=null;
			count--;
			return 1;
		}
	}
	public void size() {
		System.out.println("队列的长度为"+this.count);
	}
}

QueueNode.java:

package MM;

public class QueueNode {
	Integer data;
	QueueNode next;
	public QueueNode(Integer data) {
		this.data=data;
	}
}

测试类(TestQueue.java):

package MM;

public class TestQueue {

	public static void main(String[] args) {

		Queue myLink=new Queue();
		myLink.add(10);
		myLink.add(20);
		myLink.add(30);
		myLink.remove();
		myLink.remove();
		myLink.remove();
		
	}

}

自定义类实现ArrayList结构:

MyArrays.java:

package MM;

public class MyArrays{
	ArrayListnode arr[];
	int size;
	int count=10;
	public MyArrays() {
		arr =new ArrayListnode[count];
		size=0;
	}
	
	public void add(Integer i) {
		ArrayListnode node=new ArrayListnode(i);
		if(this.size+3<count) {
			arr[size]=node;
		}
		else{
			ArrayListnode newarr[]=new ArrayListnode[count];
			this.count*=2;
			for(int j=0;j<size;j++) {
				 newarr[j]=arr[j];
			}
			this.arr=new ArrayListnode[count];
			for(int j=0;j<size;j++) {
				arr[j]=newarr[j];
			}
			arr[size]=node;
			}
		this.size++;
		}
	public void del(int i) {
		for(int j=i;j<size -1;j++) {
			arr[j]=arr[j+1];
		}
		arr[size - 1]=null;
		size-=1;
	}
	public void get(int i) {
		System.out.println("根据下标得到的数据为"+this.arr[i].data);
	}
	public void change(Integer data,int index) {
		System.out.println("修改之前的数据为"+arr[index].data);
		arr[index].data=data;
		System.out.println("修改之后的数据为"+data);
	}
}

ArrayListnode.java:

package MM;

public class ArrayListnode{
	Integer data;
	public ArrayListnode(Integer i) {
		this.data=i;
	}
	public ArrayListnode() {
		this.data=null;
	}
}

测试类(TestArrayList.java):

package MM;
public class TestArrayList{

	public static void main(String[] args) {
		MyArrays my=new MyArrays();
		for(Integer i=0;i<10;i++) {
			my.add(i);
		}
		my.get(6);
		my.del(3);
		my.get(3);
		my.get(8);
	}

}

自定义类实现HashMap结构:

HashMap.java:

package MM;

public class HashMap {
	public HashMapNode[] arr=null;
	public HashMap() {
		this.arr=new HashMapNode[5];
		for(int i=0;i<5;i++) {
			arr[i]=new HashMapNode();
		}
	}
	public int add(String key,Integer value) {
		int reflect=value%5;
		this.arr[reflect]=this.arr[reflect].add(key,value);
		return 1;
	}
	public int get(String key) {
		for(int i=0;i<5;i++) {
			Integer result=arr[i].get(key);
			if(result!=null) {
				System.out.println(result);
				return result;
			}
		}
		return 1;
	}
}

HashMapNode.java:

package MM;

public class HashMapNode {
	public Node head;
	public Node next;
	public HashMapNode add(String key,Integer i) {
		Node node=new Node(key,i);
		node.key=key;
		node.value=i;
		if(this.head==null) {
			this.head=node;
			System.out.println(node.key+node.value);
		}
		else {
			node.next=this.head;
			this.head=node;
		}
		return this;
	}
	public Integer get(String key) {
		Node node=this.head;
		if(this.head.key.equals(key)) {
			return this.head.value;
		}
		while(node.next!=null) {
			node=node.next;
			if(node.key.equals(key)) {
				return node.value;
			}
		}
		return null;
	}
}

Node.java:

package MM;

public class Node 
{
	Node next;
	Integer value;
	String key;
	Node(String key,Integer number)
	{	
		this.key=key;
		this.value=number;
	}
	Node(){}
}

测试类(TestHashMap.java):

package MM;

public class TestHashMap {

	public static void main(String[] args) {
		HashMap list=new HashMap();
		list.add("lyc", 1);
		list.add("gc", 2);
		list.add("ghl", 3);
		list.add("hrx", 4);
		list.add("ljm", 5);
		list.add("lkk", 6);
		list.add("mxd", 7);
		list.add("lbp", 8);
		list.get("lyc");
		list.get("lkk");
	}

}

上面实现了jdk自带的一些数据结构,但是有的地方还是写的不够好,比如没有用到泛型,可能一些遍历操作带来的开销

考虑的也不是特别全面。但是基本的数据结构的增删改查可以实现了。我们可以自己试着自定义类来实现一些数据结构。

能够帮助我们更好的理解一些集合的结构。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值