兼具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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于兼具List和Map的“容器”类ListMap - 编程入门网的所有评论