快速业务通道

兼具List和Map的“容器”类ListMap - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

兼具List和Map的“容器”类ListMap

时间:2011-06-12 csdn博客 YidingHe

“容器”两个字之所以打上引号,是因为这个类没有实现 Collection 接口。要写一个兼具 List 功能和 Map 功能的类,有几个困难,一 是 Java 不允许同时实现 List 和 Map 两个接口,二是这个 ListMap 结合了二 者的功能之后,产生了特殊的接口。例如 Collection 的 contains 方法,在 ListMap 中就需要衍生出 containsKey 和 containsValue 两个方法,分别判断 容器中是否存在指定的键和值。

下面是我的实现(有什么 BUG 欢迎指正):

1.package myCollections;
2. 
3.import java.util.*;
4. 
5./**
6. * 兼具 List 和 Map 功能的容器类
7. */
8.@SuppressWarnings({"unchecked"})
9.public class ListMap<K, V> {
10. 
11.    private List<Item> values = new ArrayList<Item>();
12. 
13.    /**
14.     * 获取元素个数
15.     *
16.     * @return 元素个数
17.     */
18.    public int size() {
19.        return values.size();
20.    }
21. 
22.    /**
23.     * 判断容器是否为空
24.     *
25.     * @return 如果为空则返回 true。
26.     */
27.    public boolean isEmpty() {
28.        return values.isEmpty();
29.    }
30. 
31.    /**
32.     * 获得一个值迭代器
33.     *
34.     * @return 值迭代器
35.     */
36.    public Iterator<V> iterator() {
37.        return values().iterator();
38.    }
39. 
40.    /**
41.     * 获得一个值数组
42.     *
43.     * @return 值数组
44.     */
45.    public V[] toArray() {
46.        Object[] arr = new Object[values.size()];
47.        for (int i = 0; i < values.size(); i++) {
48.            arr[i] = values.get(i).value;
49.        }
50.        return (V[]) arr;
51.    }
52. 
53.    /**
54.     * 检查指定的键是否存在
55.     *
56.     * @param key 键
57.     *
58.     * @return 如果存在则返回 true。
59.     */
60.    public boolean containsKey(K key) {
61.        if (key == null) return false;
62.        for (Item item : values) {
63.            if (item.key.equals(key)) {
64.                return true;
65.            }
66.        }
67.        return false;
68.    }
69. 
70.    /**
71.     * 检查指定的值是否存在
72.     *
73.     * @param value 值
74.     *
75.     * @return 如果存在则返回 true。
76.     */
77.    public boolean containsValue(V value) {
78.        for (Item item : values) {
79.            if (item.value.equals(value)) {
80.                return true;
81.            }
82.        }
83.        return false;
84.    }
85. 
86.    /**
87.     * 通过键获得值
88.     *
89.     * @param key 键
90.     *
91.     * @return 值
92.     */
93.    public V get(K key) {
94.        for (Item item : values) {
95.            if (item.key.equals(key)) {
96.                return item.value;
97.            }
98.        }
99.        return null;
100.    }
101. 
102.    /**
103.     * 设置值。如果键不存在则添加。
104.     *
105.     * @param key   键
106.     * @param value 值
107.     *
108.     * @return 原来的值。如果键不存在则返回 null。
109.     */
110.    // 这里要注意,key 必须是唯一的,所以如果 key 已经存在则做替换

,否则做添加
111.    public

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号