欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LinkList列表#

程序员文章站 2022-07-14 20:23:32
...

LinkList:链接表,任何数据都有自己的地址。

@以下转载自http://blog.csdn.net/hantiannan/article/details/5447567

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

数据插入 :比如在i节点插入一个新数据

   ArrayList:循环到i节点,插入一个新数据,然后把i节点后面的所有的数据的index加1. ->操作多

   LinkedList:循环到i节点,把前一个节点的后续链接到新数据,然后把新数据链接到后一个数据就可以了.  ->操作少

   结论:平均效率LinkedList要好.

数据删除 :比如删除i节点数据

   ArrayList:循环到i节点,然后把i节点后面的所有的数据的index减1. ->操作多

   LinkedList:循环到i节点,把前一个节点的后续链接到i节点的后一个数据就可以了.  ->操作少

   结论:平均效率LinkedList要好.

数据查询 :比如查询i节点数据

   ArrayList:循环到i节点. ->操作少

   LinkedList:循环到i节点.  ->操作少,但由于每个数据的地址不一样,查询比如 ArrayList慢.

   结论:平均效率 ArrayList要好.

数据更新 :比如更新i节点数据

   ArrayList:循环到i节点,把数据更新. ->操作少

   LinkedList:循环到i节点,把前数据更新.  ->操作少,但由于查询速度没有 ArrayList好,所有效率没有 ArrayList好.

   结论:平均效率ArrayList要好.

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

 

增删查改API

    public void test1(){
        LinkedList<Integer> ll = new LinkedList<>();
        ll.add(1);ll.add(2);ll.add(3);
        
        System.out.println("原始列表:"+ll);
        System.out.println("------------------");
        //插入方法多(add方法插入返回void,offer方法返回boolean可以判断是否插入成功.)
        ll.addLast(0);
        System.out.println("1.头插入:"+ll);
        System.out.println("2.尾插入:"+ll.offer(null)+ll);
        ll.push(4);
        System.out.println("3.push插入:"+ll);//默认头插入
        ll.pop();
        System.out.println("4.pop弹出"+ll);//默认头弹出
        ll.remove();
        System.out.println("5.remove移除:"+ll);//默认头移除
        
        //API里面说getLast是null会报exception但是....
        System.out.println("6.尾查询:"+ll.getLast());
        System.out.println("7.尾查询"+ll.peekLast());
            
    }

结果:

LinkList列表#

3种迭代器比较

    public void test2(){
        LinkedList<Integer> ll = new LinkedList<>();
        ll.add(10);ll.add(2);ll.add(3);
        
        System.out.println("原始列表:"+ll);
        System.out.println("------------------");
        System.out.println("顺序输出:");
        for (Iterator<Integer> iterator = ll.iterator(); iterator.hasNext();) {
            Integer integer = (Integer) iterator.next();
            System.out.println(integer);
        }
        System.out.println("逆序输出descendingIterator()");
        for (Iterator<Integer> iterator = ll.descendingIterator(); iterator.hasNext();) {
            Integer integer = (Integer) iterator.next();
            System.out.println(integer);
        }
//        System.out.println("列表迭代器(按适当顺序)listIterator()");
//        for (ListIterator<Integer> iterator = ll.listIterator(); iterator.hasNext();) {
//            System.out.println("输出当前Index:"+(iterator.nextIndex()-1));
//            Integer integer = (Integer) iterator.next();//索引+1
//            System.out.println(".next()后的index值为:"+(iterator.nextIndex()-1)+"的时候,integer的值:"+integer);
//            System.out.println("原来的ll"+ll);
//            iterator.set(1);iterator.add(5);
//            System.out.println("后来的ll"+ll);
//            System.out.println("最后的index:"+(iterator.nextIndex()-1));
//            System.out.println();
//        }
    }

输出结果(正逆迭代器)

LinkList列表#

还有LinkList独有迭代器(基本可以了解到每一步index是怎么移动的,还有就是这个迭代器比普通Intertor高级的地方在于能增删数据,下面也验证了,慢慢看能看懂的)

    public void test2(){
        LinkedList<Integer> ll = new LinkedList<>();
        ll.add(10);ll.add(2);ll.add(3);
        
        System.out.println("原始列表:"+ll);
        System.out.println("------------------");
//        System.out.println("顺序输出:");
//        for (Iterator<Integer> iterator = ll.iterator(); iterator.hasNext();) {
//            Integer integer = (Integer) iterator.next();
//            System.out.println(integer);
//        }
//        System.out.println("逆序输出descendingIterator()");
//        for (Iterator<Integer> iterator = ll.descendingIterator(); iterator.hasNext();) {
//            Integer integer = (Integer) iterator.next();
//            System.out.println(integer);
//        }
        System.out.println("列表迭代器(按适当顺序)listIterator()");
        for (ListIterator<Integer> iterator = ll.listIterator(); iterator.hasNext();) {
            System.out.println("输出当前Index:"+(iterator.nextIndex()-1));
            Integer integer = (Integer) iterator.next();//索引+1
            System.out.println(".next()后的index值为:"+(iterator.nextIndex()-1)+"的时候,integer的值:"+integer);
            System.out.println("原来的ll"+ll);
            iterator.set(1);iterator.add(5);
            System.out.println("后来的ll"+ll);
            System.out.println("最后的index:"+(iterator.nextIndex()-1));
            System.out.println();
        }
    }

LinkList列表#

Ending... ...