好程序员-千锋教育旗下高端IT职业教育品牌

400-811-9990
我的账户
好程序员

专注高端IT职业培训

亲爱的猿猿,欢迎!

已有账号,请

如尚未注册?

  • 客服QQ
  • 官方微信

    好程序员

    专注高端IT职业培训

[JavaEE] 好程序员Java学习路线之集合

[复制链接]
1387 0
叶子老师 发表于 2019-8-9 15:05:12 | 只看该作者 |只看大图 |阅读模式 打印 上一主题 下一主题
好程序员Java学习路线之集合,最近收到一些朋友的信息,问一下管关于集合的问题,今天就简单的聊一下。
1.1什么是Iterator?
                    概念:        Iterator是一个接口,它是集合的迭代器,集合可以通过Iterator去遍历集合中的元素,常用API接口:
  例子:
注意:
1)Iterator只能单向移动。
2)Iterator.remove()是唯一安全的方式来在迭代过程中修改集合;如果在迭代过程中以任何其它的方式修改了基本集合将会产生未知的行为。而且每调用一次next()方   法,remove()方法只能被调用一次,如果违反这个规则将抛出一个异常。
1.2什么是ListIterator
概念:        ListIterator的功能更加强大, 它继承于Iterator接口,只能用于各种List类型的访问。可以通过调用listIterator()方法产生一个指向List开始处的ListIterator, 还可以调用listIterator(n)方法创建一个一开始就指向列表索引为n的元素处的ListIterator,汉化API如下:

  由此我们可以推断出ListIterator可以:
  (1)双向移动(向前/向后遍历).
  (2)产生相对于迭代器在列表中指向的当前位置的前一个和后一个元素的索引.
  (3)可以使用set()方法替换它访问过的最后一个元素.
  (4)可以使用add()方法在next()方法返回的元素之前或previous()方法返回的元素之后插入一个元素.
  代码实例如下:
  List<String> list = new ArrayList<>();  
                list.add("老大");  
                list.add("老二");  
                list.add("老三");  
                ListIterator<String> iter = list.listIterator();  
                //set方法使用
                System.out.println("--------------set方法的使用---------------");
                while (iter.hasNext()) {
                        String string = (String) iter.next();
                        if(string.equals("老二")) {
                                iter.set("xxx");
                        }
                }
                for (String string : list) {
                        System.out.println(string);
                }
                System.out.println("----------------反向遍历-------------------");
                // 将游标定位到集合的结尾
         while (iter.hasNext()) {
                iter.next();
         }
         // 迭代器遍历hasPrevious()方法用于反向遍历的时候判断是否还有上一个元素,并打印出上一个下标,如果有才打印,没有就是-1
         while (iter.hasPrevious()) {
            System.out.println(iter.previous() + "——>" + iter.previousIndex());
         }
2. LinkedHashSet
概念:        LinkedHashSet继承自HashSet,HashSet存入的元素是不可重复的,无序的。与HashSet相比,LinkedHashSet源码更少、更简单,唯一的区别是LinkedHashSet内部使用的是LinkedHashMap。这样做的意义或者好处就是LinkedHashSet中的元素顺序是可以保证的,也就是说遍历序和插入序是一致的。
               
  特点:        1、底层是一种链接列表和哈希表组成
  2、可以保证元素的唯一性,是由哈希表决定的(hashCode()和equals())
  3、可以保证元素的迭代顺序一致(有序),存储和取出一致,是由链表决定
  
  场合:        什么时候使用LinkedHashSet集合?
  如果在开发中,元素唯一性,并且还要保证元素有序(存储和取出一致),使用LinkedHashSet集合。
               
  代码:
3. LinkedHashMap
概念:        HashMap是哈希表结构,可以保证键的唯一性,并不保证有序性,而LinkedHashMap是Map接口的哈希表和链表实现,具有可预知的迭代顺序。哈希表保证键的唯一性、链表保证键的有序(进出一致)
代码:

好程序员Java学习路线:http://cdxfjz.com/javaEE_class.shtml



图片5.png (113.76 KB, 下载次数: 123)

图片5.png
精彩内容,一键分享给更多人!
收藏
收藏0
转播
转播
分享
淘帖0
支持
支持0
反对
反对0
回复

使用道具 举报

您需要登录后才可以回帖

本版积分规则

关注我们
千锋好程序员

北京校区(总部):北京市海淀区宝盛北里西区28号中关村智诚科创大厦

开心飞艇官网深圳西部硅谷校区:深圳市宝安区宝安大道5010号深圳西部硅谷B座A区605-619

开心飞艇官网杭州龙驰智慧谷校区:浙江省杭州市下沙经济技术开发区元成路199号龙驰智慧谷B座7层

郑州校区:郑州市二七区航海中路60号海为科技园C区10层、12层

Copyright 2007-2019 北京千锋互联科技有限公司 .All Right

京ICP备12003911号-5 京公安网11010802011455号

开心飞艇官网请您保持通讯畅通1对1咨询马上开启