程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)

Java基础 -- Collection和Iterator接口的实现

Collection是描述所有序列容器(集合)共性的根接口,它可能被认为是一个“附属接口”,即因为要表示其他若干个接口的共性而出现的接口。另外,java.util.AbstractCollection抽象类实现了Collection的默认实现,使得我们可以创建AbstractCollection的子类型。

使用接口描述的一个理由是它可以使我们能够创建更通用的代码。通过针对接口而非具体实现来编写代码,我们的代码可以应用于更多的对象类型。如果编写的方法将接受一个Collection,那么该方法就可以应用于任何实现了Collection的类。

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
import java.util.*;
 
public class InterfaceVsIterator {
    public static void display(Iterator<Integer> it) {
        while(it.hasNext()) {
            int num = it.next();
            System.out.print(num + "  ");
        }
        System.out.println();
    }
     
     
    public static void display(Collection<Integer> nums) {
        for(int num : nums){           
            System.out.print(num + "  ");
        }
        System.out.println();
    }
     
     
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<Integer>();
        Collections.addAll(list, 1,2,3,4,5,6,7);
         
        display(list);
        display(list.iterator());
         
    }
     
}

 输出:

1
2
1  2  3  4  5  6  7 
1  2  3  4  5  6  7 

 从上面例子可以看到,Collection接口和Iterator都可以将display()方法与容器底层实现解耦。

 在foreach结构中可以遍历Collection,主要是因为Collection接口实现了Iterable接口,这在Java基础 -- 深入理解迭代器中介绍过。

一 实现Collection接口

如果我们想创建一个Collection接口的实现应该怎么办,那么我们必须实现所有Collection方法。但是我们可以通过继承AbstractCollection,就可以简单实现它,这样,我们只需要提供iterator()和size()方法即可:

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
import java.util.*;
 
public class CollectionSequence<T>  extends AbstractCollection<T>{
    private List<T> ints = new ArrayList<T>();
     
    @Override
    public Iterator<T> iterator() {
        // TODO Auto-generated method stub
        return new Iterator<T>() {
            public int index = 0;
             
            @Override
            public boolean hasNext() {
                // TODO Auto-generated method stub
                return index < ints.size();
            }
 
            @Override
            public T next() {
                // TODO Auto-generated method stub
                return ints.get(index++);
            }
             
            public void remove() {
                throw new UnsupportedOperationException();
            }
             
        };
         
         
    }
 
    @Override
    public boolean add(T e) {
        // TODO Auto-generated method stub
        return ints.add(e);
    }
 
    @Override
    public int size() {
        // TODO Auto-generated method stub
        return ints.size();
    }
     
     
    public static void main(String[] args) {
        CollectionSequence<Integer> c = new CollectionSequence<Integer>(); 
        Collections.addAll(c, 3,4,3,4,5,6,7);
        InterfaceVsIterator.display(c);
        c.add(2000);
        InterfaceVsIterator.display(c.iterator());
    }
 
}

亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。

日期姓名金额
2023-09-06*源19
2023-09-11*朝科88
2023-09-21*号5
2023-09-16*真60
2023-10-26*通9.9
2023-11-04*慎0.66
2023-11-24*恩0.01
2023-12-30I*B1
2024-01-28*兴20
2024-02-01QYing20
2024-02-11*督6
2024-02-18一*x1
2024-02-20c*l18.88
2024-01-01*I5
2024-04-08*程150
2024-04-18*超20
2024-04-26.*V30
2024-05-08D*W5
2024-05-29*辉20
2024-05-30*雄10
2024-06-08*:10
2024-06-23小狮子666
2024-06-28*s6.66
2024-06-29*炼1
2024-06-30*!1
2024-07-08*方20
2024-07-18A*16.66
2024-07-31*北12
2024-08-13*基1
2024-08-23n*s2
2024-09-02*源50
2024-09-04*J2
2024-09-06*强8.8
2024-09-09*波1
2024-09-10*口1
2024-09-10*波1
2024-09-12*波10
2024-09-18*明1.68
2024-09-26B*h10
2024-09-3010
2024-10-02M*i1
2024-10-14*朋10
2024-10-22*海10
2024-10-23*南10
2024-10-26*节6.66
2024-10-27*o5
2024-10-28W*F6.66
2024-10-29R*n6.66
2024-11-02*球6
2024-11-021*鑫6.66
2024-11-25*沙5
2024-11-29C*n2.88
posted @   大奥特曼打小怪兽  阅读(727)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
如果有任何技术小问题,欢迎大家交流沟通,共同进步

公告 & 打赏

>>

欢迎打赏支持我 ^_^

最新公告

程序项目代做,有需求私信(小程序、网站、爬虫、电路板设计、驱动、应用程序开发、毕设疑难问题处理等)。

了解更多

点击右上角即可分享
微信分享提示