集合框架(一)——概述
集合框架构成图:大纲:1. 数组容器和集合的区别;2. 集合框架的由来;3. Collection中的共性方法4. 迭代器,及其原理,以及出现的好处5. 集合中两个注意的小细节6. Collection的两个子集List Set 简介及其子类7. 集合的技巧掌握——————
集合框架构成图:
大纲:
1. 数组容器和集合的区别;
2. 集合框架的由来;
3. Collection中的共性方法
4. 迭代器,及其原理,以及出现的好处
5. 集合中两个注意的小细节
6. Collection的两个子集List Set 简介及其子类
7. 集合的技巧掌握
————————————————————————————————————————————————————————————————
在开始集合框架总结之前,先得明确【集合】是什么?
集合是:1.用于存储对象的容器。2.该容器的长度是可变的。
一,数组容器和集合的区别;
在这之前学过的【数组容器和集合都可以用来存储数据,那么他们有啥区别呢?】
1. 集合长度是可变的;数组长度固定的;
2. 集合中只能存储对象;数组中既可以存储对象,又可以存储基本类型数据。
3. 集合中存储的对象可以是任意类型的;数组中只能存储同一类型的对象。
【重点注意:】
集合只能存储对象,经常犯的错误:集合可以存储整型之类的基本数据类型,其实那是通过自动装箱,拆箱机制,转为了Integer对象。
二: 集合框架的由来;
用来存储对象的容器虽然有很多并且结构不同,但是都具备着共性,可以不断向上抽取,最终就形成集合框架,该框架的顶层之一就是Collectionn接口。 该接口中定义了集合框架中最共性的功能。最终使用的时候,其实使用的是该框架最子类的对象。
【集合框架的小细节】
StringBuffer——放进去是一坨了,不能区别单个的了!
框架,数组————放进去能区分,拿出来也能区分了。
三:Collection中的共性方法;
【Collection中的共性方法】——【掌握程度:不用查API文档就可以写出来】
作为容器应该具备的方法:添加,删除,判断,获取。
1. 添加方法:
boolean add(Object e)—— 一次只能添加一个元素;
boolean addAll(Collection<? extends E> c)—— 将一个参数容器中的所有元素添加到当前容器中。
2. 删除方法:
boolean remove(Object e) 删除一个指定对象,
boolean removeAll(Collection<?> c) 删除指定Collection中和本Collection中相同的元素。
void clear ():直接将集合中的元素清空。
3. 判断方法:
Boolean contains (Object)是否包含指定元素
boolean containsAll(Collection<?> c) 是否包含指定容器中的元素。
boolean imEmpty(): 是否有元素。
4. 获取元素个数:
int size (),获取元素的个数;
5.取交集
boolean retainAll(Collection<?> c)
保留和指定collection集合中相同的元素,不相同的元素会被删除。
6 将集合转成数组;
Object[] toArray()
【7】取出元素的方法——【重点】
Iterator<E> iterator()
四: 迭代器,及其原理,以及出现的好处;
【迭代器】取出集合中元素的方式的一个对象。该对象本身就内置在容器中。
如何获取到集合的迭代器?
可以通过iterator()方法完成,该方法返回一个Iterator类型对象。【迭代器接口的原理】
将每一个容器中的取出方式进行了封装。并对外暴露。这样无论是什么容器或者数据结构,只要内部取出方式实现了Iterator接口,
都可以通过该接口取出这些容器中的元素。
【迭代器接口的好处】
它的出现,将容器的取出方式和容器的数据结构分离,降低了耦合性。而取出方式因为直接在访问容器中的元素,并依赖具体的数据结构,所以被定义在了容器中。通过内部类在实现Iterator接口。
【NOTICE】——只要是Collection集合中的容器,迭代器是通用取出方式。
【用迭代器取出时,其实取出的也是引用。】
【代码体现】package api.iterator.demo; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class IteratorDemo { public static void main(String[] args) { //创建集合。 Collection coll = new ArrayList(); //添加元素。 coll.add("abc1"); coll.add("abc2"); coll.add("abc3"); /* //获取该集合的迭代器对象。 Iterator it = coll.iterator(); //这个对象不用new ,本身内置于该接口中。 //使用迭代器对象中的方法完成元素的获取。 while(it.hasNext()){ System.out.println(it.next()); } */ //将while改成for结构。开发的时候建议写for。 for(Iterator it = coll.iterator(); it.hasNext(); ){ System.out.println(it.next());//next()可以取出元素。而且自动往下取 } } }
五:集合中要注意的两个细节;
【集合小细节1】
1.存储时,add可以接收任意类型的对象因为参数类型为 Object。
所以对象元素存入时都被提升为Object。
2.其实在集合中真正存储的都是对象的引用。
【用迭代器取出时,其实取出的也是引用。】
(取出的是引用,引用是个地址值,那么又该如何拿出这个地址值对应的元素呢?)
【NOTICE】
coll.add(5),不能存储基本数据类型,
jdk1.5以后,有了自动装箱机制,相当于new Integer(5),装箱Integer.valueOf(5);
等同于coll.add(Integer.valueOf(5));
【集合小细节2】——在集合中存储自定义对象;
1. 对自定义对象的描述。
存储时,都被提升为了Object;取出时,如果要使用自定义对象的特有方法,一定要进行向下转型。
注意事项:在迭代时,循环中只要有一个next()即可。
System.out.println(((Person)it.next()).getName()+ ":" + ((Person)it.next()).getAge( ));
否则将会抛出:NoSuchElementException!
【如何往集合中存储自定义对象?】
ArrayListDemo2.java
HashSetDemo.java
TreeSetTest.java
六: Collection的两个子集List && Set 简介及其子类:
集合框架(三)——Collection 子集 ——————List 及其 小弟们!
集合框架(四)——Collection 子集 ——————Set及其 小弟们!
七:集合的技巧性掌握;
1. 明确具体集合对象名称的后缀:
如果后缀是List,都所属于List体系,通常都是非同步的。
如果后缀是Set,都所属于Set体系通常都是非同步的。
这些体系中的其他子类对象,后缀不是所属接口名的,一般都是同步的。
这在常用子类对象中通用。
2. 明确数据结构:
对于jdk1.2版本的子类对象。后缀名是所属的体系。
前缀名就是数据结构的名称。
比如:
ArrayList:看到Array,就要明确是数组结构;查询快
LinkedList:看到Link,就要明确链表结构,就要想到add get remove和 first last结合的方法。增删快
HashSet:看到hash ,就要明确是哈希表,查询快,而且所存储的对象具有唯一性。
就要想到元素必须覆盖hashCode方法和 equals方法。
TreeSet:就看到Tree,就要明确是二叉树,可以对元素排序;
就要想到两种排序方式:
自然排序:Comparable接口,覆盖compareTo(一个参数)java.lang
比器排序:Comparator接口,覆盖compare(两个参数):java.util
判断元素唯一性的依据就是比较方法的返回结果 return 0;
更多推荐
所有评论(0)