栈结构:栈是数据结构中一种很重要的数据结构类型,特点是弹栈时先进后出,Java API中提供了栈(Stacck)的实现。

链表_小记_数据


新数据都放置在栈顶,类似子弹匣压子弹一样把之前放的数据向栈底压制。

例:元素a,b,c,d顺序进栈,d,c,b,a逆序出栈。

队列结构:特点是弹栈时先进先出

例:元素a,b,c,d顺序进栈,a,b,c,d顺序出栈。


List集合的子实现类的特点:

ArrayList:
        底层数据结构是数组的形式,满足数组结构的特点:查询快,增删慢
        从线程安全问题来看:线程不安全的,不同步,执行效率高

Vector:
        底层数据结构是数组的形式,查询快,增删慢
        从线程角度看:线程安全的类,同步,执行效率低
LinkedList:
        底层数据结构是链接列表,特点:查询慢,增删快
        从线程角度看:线程不安全的一个类,不同步,执行效率高

        如果实现多线程程序,一般要是安全的类:
                StringBuffer,Vector<E>,hashtable<K,V>

                synchronized(同步锁对象){
                    代码;
                }
    synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行,可以加在方法里,或者代码段。**synchronized锁住的是括号里的对象**   

    如果在一般的需求中没有指明使用集合去完成,都默认采用ArrayList
    如果需求中要考虑线程安全,那么使用Vector集合!
    笔试过程中,一些需求用到集合:就是用ArrayList

链表(Chain)实际上是由节点(Node)组成的,一个链表拥有不定数量的节点。节点(Node)是由一个需要储存的对象及对下一个节点的引用组成的。
节点拥有两个成员:储存的对象(数据域或者值)、对下一个节点的引用(地址值)。
形成链条式的结构,增删数据很方便在需要增删的地方切断链接,再重新接上链接。查询数据比较慢,每次都得从第一个数据的指针域依次开始查询。

链表_小记_数据_02


模拟栈结构:

//创建LinkedList集合的对象
        LinkedList link = new LinkedList() ;
        //LinkedList集合的特有功能:addFirst(Object e) 
        //栈结构的特点:先进后出
        link.addFirst("hello") ;
        link.addFirst("world") ;
        link.addFirst("java") ;

        Iterator it = link.iterator() ;
        while(it.hasNext()){
            String s = (String)it.next() ;
            System.out.println(s);
        }