Java数据结构

  大二学过数据结构的知识,只不过那时候用的是c语言,很多数据结构需要自己去实现,仍然记得拿指针写双向链表和二叉树的那种痛苦,那个时候,因为没有实际应用,所以总在怀疑,学数据结构是为了什么?

  然后大三学习了Java,用Java也写过一些代码了,似乎数据结构课上讲的那些东西仍然没有在实际中用到,那么,当初学的数据结构,到底用在哪?

  后来在看Java的一些面试题,讲到很多面试会问到ArrayList与LinkedList的区别,然后自己百度了一下,恍然大悟,原来数据结构在Java里面天天在用,只不过用的是别人封装好的类。

  那么,我也一定可以写出这些数据结构,简单的那种。。。。。。。

---------------------------------------------------------------------------------------------------------------------------

①ArrayList:

package test;

import java.util.ArrayList;

public class ArrayListTest<E> {
    //记录数组长度
    private static int max=10;
    //保存数据
    private static Object[] values=new Object[max];
    //保存当前数组长度
    private static int len=0; 
    
    public void add(E value) {
        if(len<max) {
            values[len]=value;
            len++;
        }else {
            max=max+10;
            values=new Object[max];
        }
    }
    
    public boolean remove(E value) {
        Object[] values2=new Object[len-1];
        int beRemovedNum=-1;
        for(int i=0;i<len;i++) {
            if(values[i]==value||values[i].equals(value)) {
                beRemovedNum=i;
                break;
            }
        }
        if(beRemovedNum!=-1&&beRemovedNum!=(len-1)) {
            for(int i=0;i<beRemovedNum;i++) {
                values2[i]=values[i];
            }
            for(int i1=beRemovedNum;i1<len-1;i1++) {
                values2[i1]=values[i1+1];
            }
            len--;
            values=values2;
            return true;
        }else if(beRemovedNum!=-1&&beRemovedNum==(len-1)){
            for(int i=0;i<beRemovedNum;i++) {
                values2[i]=values[i];
            }
            len--;
            if(len==0) {
                values=new Object[max];
                return true;
            }
            values=values2;
            return true;
        }else {
            System.out.println("没有这个数据,删除失败!");
            return false;
        }
    }
    
    @Override
    public String toString() {
        if(len>0) {
            String arr="[";
            for(int i=0;i<len-1;i++) {
                arr=arr+values[i]+",";
            }
            arr=arr+values[len-1]+"]";
            return arr;            
        }
        return "[null]";
    }

    //测试
    public static void main(String[] args) {
        ArrayListTest<Integer> alt=new ArrayListTest<Integer>();
        alt.add(1);
        System.out.println(alt);
        alt.remove(1);
        System.out.println(alt);
        alt.add(1);
        alt.add(1);
        alt.add(1);
        alt.add(4);
        alt.add(4);
        alt.add(5);
        System.out.println(alt);
        alt.remove(5);
        System.out.println(alt);
        alt.remove(100);
        System.out.println(alt);
    }
}
View Code

 

②LinkedList:

 

 1 package LinkedListTest;
 2 
 3 public class LinkedListTest<E> {
 4     private Node<Object> tail=new Node<Object>();
 5     private Node<Object> head=new Node<Object>();
 6     
 7     public LinkedListTest() {
 8         super();
 9         head.setData(null);
10         head.setNext(tail);
11         tail.setData(null);
12         tail.setNext(null);
13     }
14 
15     @Override
16     public String toString() {
17         Node<Object> node=new Node<Object>();
18         node=head.getNext();
19         String str="[";
20         while(node.getNext().getData()!=null) {
21             str=str+node.getData()+",";
22             System.out.println(node.getData()+"-"+node.getNext());
23             node=node.getNext();
24         }
25         str=str+node.getData()+"]";
26         return str;
27     }
28 
29     public void append(E value) {
30         Node<Object> node=new Node<Object>();
31         tail.setData(value);
32         tail.setNext(node);
33         tail=node;
34     }
35     
36     public static void main(String[] args) {
37         LinkedListTest<Integer> llt=new LinkedListTest<Integer>();
38         llt.append(1);
39         llt.append(2);
40         llt.append(3);
41         System.out.println(llt);
42     }
43 }
LinkedListTest

 

posted @ 2018-07-03 22:55  陆卯伍  阅读(215)  评论(0编辑  收藏  举报