zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    运维面试题之系统运维
    运维面试题之linux编程
    运维面试题之linux基础
    运维面试题之网络
    python 查找日志关键字
    python 数组中数字求和是否为零
    python 时间戳和时间格式互相转换
    Appium环境搭建说明(包括报错处理)
    python操作上级子文件
    去除ufeff的解决方法,python语言
  • 原文地址:https://www.cnblogs.com/liumaowu/p/9261090.html
Copyright © 2011-2022 走看看