绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
技术分享:集合
2019-08-08 16:26:22

1. Iterator

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接口的哈希表和链表实现,具有可预知的迭代顺序。哈希表保证键的性、链表保证键的有序(进出一致)


代码:






分享好友

分享这个小栈给你的朋友们,一起进步吧。

Spring Boot
创建时间:2020-06-22 17:22:00
SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • duanhao
    栈主

小栈成员

查看更多
  • ?
  • zander
  • 凉茶cooltea
戳我,来吐槽~