最近在写一些简单的小程序,开始大量使用集合 类里要用的集合比较多的时候的声明感觉很麻烦(实际上如果有自定义类有放入集合的需求时自定义集合最方便( ̄▽ ̄)/),就准备自己定义集合类拿来用。
比如 常规的特定对象集合是这样的:
List<Cat> cats = new List<Cat>();
cats.Add(cat);
很简单是不是, 但是如果需要创建好几个这样的集合,< Cat>看起来就比较烦。更重要的是 ,根据对象A的特点和用户需求,我们会希望对应的集合能执行一些特殊操作(查重,排序,默认值神马的)。这时候就可以考虑对集合再进行一层封装
public class Cats
{
/// 封装需要的集合
List<Cat> cats = new List<Cat>();
///来定义我们需要的方法
public void add(Cat cat)
{
cats.Add(cat)
}
...
}
于是原来的对象集合就被我们封装到了一个自定义的类里,原来的代码就可以改为
Cats cats = new Cats();
Cats.add(cat);
总之我觉得变好看了(* ̄︶ ̄),
不过这样做也有缺点,直接在类里定义集合时,如果不写获取内部集合的方法,对外部代码来说,List类本身的方法全部被过滤掉了(外部代码:”List是啥,我只认识Cats”)。如果还是需要原来集合的方法,可以用继承或接口来实现
如下(一般用不到接口吧)
public class myList extends ArrayList <String>
{
private static final long serialVersionUID = 1L;
//自己定义点方法
public void add(int num)
{
this.add(num+"");
}
}
然后就可以使用了(得到了一个可以添加int 和 String 的String集合)
myList M = new myList();
M.add(1);
M.add("hello world");
双例集合同理
public class myMap extends HashMap <String,Object>
{
//自己定义点方法
public void put(int num,Object ob)
{
this.put(num+"",ob);
}
}
需要注意下要添加泛型的约束(当然不加也行 M< T >extends ArryList < T >)
不过谁让我是想省代码呢 []~( ̄▽ ̄)~*
附上两张图
单例集合和双例集合的简单关系图解