我是靠谱客的博主 文静小懒虫,这篇文章主要介绍【Iterator】,现在分享给大家,希望可以做个参考。

Iterator的使用:在java代码中包含三种循环的方式
  do...while
  while
  for
还有一种增强for循环的方式,可以简化循环的编写
所有的集合类都默认实现了Iterable的接口,实现此接口意味着具备了增强for循环的能力,也就是for-each
     增强for循环本质上使用的也是iterator的功能
     方法:
              iterator()
              foreach()
  在iterator的方法中,要求返回一个Iterator的接口子类实例对象
      此接口中包含了
              hasNext()
              next()
 在使用iterator进行迭代的过程中如果删除其中的某个元素会报错,并发操作异常,因此
      如果遍历的同时需要修改元素,建议使用listIterator(),
  ListIterator迭代器提供了向前和向后两种遍历的方式
      始终是通过cursor和lastRet的指针来获取元素值及向下的遍历索引值
      当使用向前遍历的时候必须要保证指针在迭代器的结果,否则无法获取结果值
所有的集合类均未提供相应的遍历方法,而是把遍历交给迭代器完成。迭代器为集合而生,专门实现集合遍历
   Iterator是迭代器设计模式的具体实现
        Iterator方法:
         boolean hasNext():判断是否存在另一个可访问的元素
         Object next():返回要访问的下一个元素
         void remove():删除上次访问返回的对象
   可以使用Iterator遍历的本质是什么? 
               实现Iterable接口

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class IteratorDemo {       public static void main(String[] args) {         List list = new ArrayList();         list.add(1);         list.add("123");         list.add(true);         list.add(100L);         list.add(10.0d);         //遍历集合         for (int i = 0; i < list.size(); i++) {             System.out.println(list.get(i));         }           System.out.println("*******************");         //使用迭代器 //        Iterator iterator = list.iterator();         ListIterator listIterator = list.listIterator();         while(listIterator.hasNext()){ //            if(list.contains("123")){  并发操作异常 //                list.remove("123"); //            } //            Object o = listIterator.next(); //            if("123".equals(o)){ //                listIterator.remove(); //            }             System.out.println(listIterator.next());         } //        System.out.println(list);   //        System.out.println("*******************"); //        //增强for循环 //        for(Object i :list){ //            System.out.println(i); //        }         System.out.println("*********************************");         while(listIterator.hasPrevious()){             System.out.println(listIterator.previous());         }       } }


linkedList拥有更加丰富的方法实现,需要用的时候查询api即可,不需要记忆
 synchronized线程安全

ArrayList默认值是10;

Hashtable默认值是1<<4,是16;

LinkedList有序可重复

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class LinkedListDemo {       public static void main(String[] args) {         LinkedList linkedList = new LinkedList();         linkedList.add(1);         linkedList.add("abc");         linkedList.add(true);         linkedList.add(100L);         linkedList.add(100L);         System.out.println(linkedList);         //输出第一位         System.out.println(linkedList.getFirst());         //输出最后一位         System.out.println(linkedList.getLast());         System.out.println(linkedList);         linkedList.addFirst("ok");         System.out.println(linkedList); //        System.out.println(linkedList.peek()); //        System.out.println(linkedList); //        System.out.println(linkedList.poll()); //        System.out.println(linkedList); //        System.out.println(linkedList.pop()); //        System.out.println(linkedList);         linkedList.push("no");         System.out.println(linkedList);       } }


Vector 默认初始值10
synchronized线程安全
1.Vector也是List接口的一个子类实现
2.Vector跟ArrayList一样,底层都是使用数组进行实现的
3.面试经常问区别:
        1.ArrayList是非线程安全,Vector是线程安全的,低效率
        2.ArrayList每次扩容1.5倍,Vector每次扩容2倍

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class VectorDemo {     public static void main(String[] args) {         Vector vector = new Vector();         vector.add(1);         vector.add("abc");         vector.add(true);         vector.add(100.0d);         vector.add("abc");         System.out.println(vector);         System.out.println(vector.size());         System.out.println(vector.capacity());         System.out.println(vector.firstElement());//第一位数         System.out.println(vector.lastElement());//第二位数           } }


    1、set中存放的是无序,唯一的数据
    2、set不可以通过下标获取对应位置的元素的值,因为无序的特点
    3、使用Treeset底层的实现是Treemap,利用红黑树来进行实现
    4、设置元素的时候,如果是自定义对象,会查找对象中的equals和hashcode的方法,如果没有,比较的是地址
    5、树中的元素是要默认进行排序操作的,如果是基本数据类型,自动比较,如果是引用类型的话,需要自定义比较器
        比较器分类:
          内部比较器
                定义在元素的类中,通过实现Comparable接口来进行实现
          外部比较器
                定义在当前类中,通过实现Comparator接口来实现,但是要将该比较器传递到集合中
          注意:外部比较器可以定义成一个工具类,此时所有需要比较的规则如果一致的话,可以复用,而
                内部比较器只有在存储当前对象的时候才可以使用
                如果两者同时存在,使用外部比较器
                当使用比较器的时候,不会调用equals方法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import java.util.Set; import java.util.TreeSet;     public class SetDemo2 implements Comparable {     public static void main(String[] args) { //        Set set = new HashSet(); //        set.add(1); //        set.add("abc"); //        set.add(true); //        set.add(100L); //        set.add("abc"); //        System.out.println(set);           //遍历集合 //        for (int i = 0; i < set.size(); i++) { //            System.out.println(set.get); //        }           //迭代器遍历 //        Iterator iterator = set.iterator(); //        while(iterator.hasNext()){ //            Object obj = iterator.next(); //            System.out.println(obj); //        }           //增强for循环 //        for(Object o : set){ //            System.out.println(o); //        }   //        System.out.println("*******************************"); //        for(Iterator iterator1 = set.iterator();iterator1.hasNext();){ //            System.out.println(iterator1.next()); //        }   //        Set set = new TreeSet(); //        set.add(1); //        set.add(123); //        set.add(5); //        set.add(20); //        set.add("abc"); //        set.add("casd"); //        set.add("dasd"); //        set.add("bfh"); //        System.out.println(set);         Set set = new TreeSet(new SetDemo());         set.add(new Person("zhangfei",19));         set.add(new Person("guanyu",20));         set.add(new Person("zhaoyun",18));         set.add(new Person("mashaladi",30));         System.out.println(set);     }       @Override     public int compareTo(Object o1, Object o2) {         Person p1 = (Person)o1;         Person p2 = (Person)o2;         if(p1.getAge() > p2.getAge()){             return -1;         }else if(p1.getAge() < p2.getAge()){             return 1;         }else{             return 0;         }     } }

最后

以上就是文静小懒虫最近收集整理的关于【Iterator】的全部内容,更多相关【Iterator】内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(75)

评论列表共有 0 条评论

立即
投稿
返回
顶部