学习日记-集合容器

来源:互联网 发布:sqlserver 大数据导入 编辑:程序博客网 时间:2024/06/11 18:11

collection 系列数组初始化。

1:new arraylis();

2:Arrays.asList();  或者 Array.<T>asList();  这个方法返回的是一个collection 对象, 方法的参数是一个可变长度的参数类型,但是返回的collection对象去add的时候会报错,因为这个方法实现的底层是一个数组,所有要这样  list<T> list  = new ArrayList<T>(Array.asList);   但是这样太麻烦 。不如第三种


3 List<T>  list = new ArrayList<T>();

T[] t ={...} 

Collections.addAll(list,t);  或者Collection.<T>.addAll(...);



Collections 拥有很多有用的工具方法,像是copy,sublist,retain,remove,contain需要重写equal方法。遍历一个集合是可以用迭代器,这样就不用关注容器的类型了。iterator是单向的,list家族有个listiterator是双向的并且可以用set去改变list里面的对象。


若是操作自定义的类型,arraylist,linkedlist只需要重写equal方法,但是hashset,linkedhashset需要重写equal,hashcode方法,而treeset需要实现comparable接口



若需要遍历一个map 用map.entryset 方法可以返回一个set集合,这个set可以获得key,value还可以setval,需要注意的是这样遍历若key一样是会被过滤掉的,至于怎么判断key是否一样取决于map的类型,hashmap ,linkedhashmap 根据hashcode和equal方法判断,treemap根据compare判断


stack 栈先进后出,quene 队列先进先出  可以用linklist实例化,priorityQueue带权重的队列,初始化的时候指定collections.reverseOrder(),就可以基于queue里的对象的compare方法去对队列的的数据排序。或者不指定也可以排序


如果想实现一个对象的遍历适用于通用的代码,比如遍历基本类型,继承collection太臃肿,不如写个方法用匿名内部类去实现iterator的接口



0 0
原创粉丝点击