Hello,你们好,元旦快到了,这里提早祝你们元旦快乐,出行注意安全,回家的小伙伴能早日和家人见面,开开心心过元旦。Ok,切入主题,这篇文章,我本人以为仍是比较重要的,由于我准备在宏观上把Java集合这一块给描述清楚。老套路,文章结构:java
Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口。来两张图: 数组
Collection接口是Set,Queue,List的父接口。Collection接口中定义了多种方法可供其子类进行实现,以实现数据操做。 安全
public interface Collection<E> extends Iterable<E> 复制代码
使用样例:数据结构
Collection<Day> days = new ArrayList<Day>();
Iterator<Day> iterator = days.iterator();
while(iterator.hasNext()){//判断是否有下一个元素
Day next = iterator.next();//取出该元素
//逐个遍历,取得元素后进行后续操做
.....
}
复制代码
顺便说一下,在遍历Map集合的时候,虽然Map没有继承Iterable,不过没有关系,能够转换成set,而后再遍历:框架
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
复制代码
Map map = new HashMap();
Iterator iter = map.keySet().iterator();
while (iter.hasNext()) {
Object key = iter.next();
Object val = map.get(key);
}
复制代码
其次,须要注意的是,在使用Iterable遍历Collection时,当Collection内部的元素为对象类型时,.next返回的是指针。也就是说是浅拷贝。函数
Set集合相似于一个罐子,"丢进"Set集合里的多个对象之间没有明显的顺序。Set继承自Collection接口,不能包含有重复元素(记住,这是整个Set类层次的共有属性)。Set判断两个对象相同不是使用"=="运算符,而是根据equals方法。也就是说,咱们在加入一个新元素的时候,若是这个新元素对象和Set中已有对象进行注意equals比较都返回false,则Set就会接受这个新元素对象,不然拒绝。 由于Set的这个制约,在使用Set集合的时候,应该注意两点:spa
API层面,Set集合与Collection集合基本相同,没有提供任何额外的方法。实际上Set就是Collection,只是行为略有不一样(Set不容许包含重复元素)。3d
List集合表明一个元素有序、可重复的集合,集合中每一个元素都有其对应的顺序索引。List集合容许加入重复元素,由于它能够经过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引.指针
API层面:List做为Collection接口的子接口,可使用Collection接口里的所有方法。并且因为List是有序集合,所以List集合里增长了一些根据索引来操做集合元素的方法。以下:code
Queue用于模拟"队列"这种数据结构(先进先出FIFO)。队列的头部保存着队列中存放时间最长的元素,队列的尾部保存着队列中存放时间最短的元素。新元素插入(offer)到队列的尾部,访问元素(poll)操做会返回队列头部的元素,队列不容许随机访问队列中的元素。
能够看到,新增了offer和poll用来描述队列这种语义。
Map用于保存具备"映射关系"的数据,所以Map集合里保存着两组值,一组值用于保存Map里的key,另一组值用于保存Map里的value。key和value均可以是任何引用类型的数据。Map的key不容许重复,即同一个Map对象的任何两个key经过equals方法比较结果老是返回false。关于Map,咱们要从代码复用的角度去理解,java是先实现了Map,而后经过包装了一个全部value都为null的Map就实现了Set集合
API:
Map集合最典型的用法就是成对地添加、删除key-value对,而后就是判断该Map中是否包含指定key,是否包含指定value,也能够经过Map提供的keySet()方法获取全部key组成的集合,而后使用foreach循环来遍历Map的全部key,根据key便可遍历全部的value。
Map--》Collection: Map.keySet(),entrySet(),.values().三个API
List《---》Set《---》Queue:
//Set--》List
List<String> list3 = new ArrayList<String>(new HashSet<String>());
//List--》Set
Set<String> set = new HashSet<String>(new ArrayList<String>());
复制代码
说白了,都是经过构造方法来转换的.
转换这一块给一个参考博客:
好了,宏观角度的Collection,Map算是给你们说清楚了,包括Collection下的子接口要实现的语义(子接口实现的特有方法)。而后集合之间的转换等等,我以为宏观上是比较重要的,也但愿你们这一块掌握好。Over,Hava a good day .元旦快乐,你们。