2019-03-23 集合-list

    1.常见的数据结构自定义容器类:

                基于 

                1.1数组

                1.2链表

                1.3队列

                1.4堆栈

                1.5树

     2.ArrayList

            2.1语法特点

                1、内部基于数组实现的一个集合类。查询比较快,添加和删除相对比较慢

                2、猜ArrayList中会有哪些功能(方法): 添加、删除、查询、插入、修改。。。

                3、不是同步的(存在线程安全问题),如何解决:敬请期待... 用Vector

            2.2基本使用

                1三个构造函数

               2增删改查

               3数组和List相互转化

        2.3遍历方式

            1、使用普通的for循环

                ArrayList bag = new ArrayList();

                bag.add("电脑");

                bag.add(200);

                bag.add("鼠标");

                bag.add("小人书");

                bag.add("教材");

                bag.add("牛奶");

                for(int i=0;i

                    System.out.println(bag.get(i));

                }

            2、增强for循环(foreach)

        语法:

        for(源中的数据类型 变量名 : 源){


        }

        注意:源可以是数组或者集合(Iterable的实例)

            3、使用迭代器进行遍历


                Iterator  就是一个迭代器(也是一个接口)

                    其中的方法如下:

                            boolean hasNext() 判断是否有下一个元素,如果返回true表示有下一个;

                            Object next() 调用一次获得一个元素(每调用一次指针会向后移动一个);

                            void remove() 会从迭代器指向的结合容器中删除一个元素

                    代码:

                ArrayList bag = new ArrayList();

                bag.add("电脑");

                bag.add(200);

                bag.add("鼠标");

                bag.add("小人书");

                bag.add("教材");

                bag.add("牛奶");

                //使用迭代器遍历集合ArrayList   bag

                // 获得一个迭代器

                Iterator it = bag.iterator();

                while(it.hasNext()){

                    System.out.println(it.next());

                }

结果:只遍历了一次,为什么?

原因:上面两个while使用的是同一个迭代器,第一个while循环完毕就把指针移动到末尾了,所以第二个while不会执行了


4、双向迭代器

Iterator  单向的迭代器接口,从左到右依次获得数据,判断是否有下一个;获得下一个

   |-- ListIterator   双向的迭代器接口,它的主要方法如下:

  Iterator中有的它也有;

                         boolean hasPrevious() 判断是否有上一个;

     Object  previous() 获得上一个元素;

代码清单:

ArrayList bag = new ArrayList();

bag.add("电脑");

bag.add(200);

bag.add("鼠标");

bag.add("小人书");

bag.add("教材");

bag.add("牛奶");

// 获得双向的迭代器

ListIterator iterator = bag.listIterator();

while(iterator.hasNext()){

    System.out.println(iterator.next());

}


System.out.println("------------------------------------------");


while(iterator.hasPrevious()){

    System.out.println(iterator.previous());

}

     3.LinkedList

            4.1语法特点

                1、 内部是基于双向链表结构实现的。添加和删除比较快,查询相对ArrayList比较慢

                2、 内部相对于ArrayList而言多了一些操作头和尾的方法

                3、 可以充当队列,堆栈

                4、 不是线程安全的(同步的)

                    总结:LinkedList底层是基于双向链表容器类,添加和删除比较快。查找和修改较慢。

你可能感兴趣的:(2019-03-23 集合-list)