Java集合框架
一、集合框架概述
通常情况下,把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
接口:即表示集合的抽象数据类型。接口提供了让我们对集合中所表示的内容进行单独操作的可能。实现:也就是集合框架中接口的具体实现。实际它们就是那些可复用的数据结构。算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现。事实上,算法是可复用的函数。
数组 : 长度不能变, 数组里面所有元素都是同一类的集合类:用于存放一组对象 ,长度可变
二、Java集合框架类介绍
一级: Java集合框架
二级: Collection (接口)-|- Map(接口)
三级: List Set -|- HashMap TreeMap四级:ArrayList LinkedList Vector HashSet TreeSet -|- LinkedHashMap
五级:
LinkedHashSet
三、Collection 接口
Collection接口提供了一组操作成批对象的方法它提供了基本操作如添加、删除。它也支持查询操作如是否为空isEmpty()方法等。为了支持对Collection进行独立操作,Java的集合框架给出了一个Iterator,它使得你可以泛型操作一个Collection,而不需知道这个Collection的具体实现类型是什么。下面给出了Collection的所有功能,也就是你能用Set和List做什么事(不包括从Object自动继承过来的方法)。(List还有一些额外的功能。)boolean add(Object):确保容器能持有你传给它的那个参数。如果没有把它加进去,就返回false。(这是个“可选”的方法,本章稍后会再作解释。)boolean addAll(Collection):加入参数Collection所含的所有元素。只要加了元素,就返回true。void clear():清除容器所保存的所有元素。(“可选”)boolean contains(Object):如果容器持有参数Object,就返回true。boolean containsAll(Collection):如果容器持有参数Collection所含的全部元素,就返回true。boolean isEmpty():如果容器里面没有保存任何元素,就返回true。Iterator iterator():返回一个可以在容器的各元素之间移动的Iterator。boolean removeAll(Collection):删除容器里面所有参数Collection所包含的元素。只要删过东西,就返回true。(“可选”)boolean retainAll(Collection):只保存参数Collection所包括的元素(集合论中“交集”的概念)。如果发生过变化,则返回true。(“可选”)int size():返回容器所含元素的数量。Object[] toArray():返回一个包含容器中所有元素的数组。Object[] toArray(Object[] a):返回一个包含容器中所有元素的数组,且这个数组不是普通的Object数组,它的类型应该同参数数组a的类型相同(要做类型转换)。注意,这里没有能进行随机访问的get()方法。这是因为Collection还包括Set。而Set有它自己的内部顺序(因此随机访问是毫无意义的)。所以如果你要检查Collection的元素,你就必须使用迭代器。
Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素 (element)JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现
Collection 接口中声明的常用方法boolean add(E e) //往集合中放入元素boolean addAll(Collection<? extends E> c) //把另一集合放到当前集合中boolean remove(Object o) //从集合中移除一个元素boolean contains(Object o) //判断一个集合中是不是包含一个元素boolean containsAll(Collection<?> c) //判断一个集合中是不是包含另一个集合中的所有元素boolean removeAll(Collection<?> c) //从集合中移除和参数集合中元素一样的元素boolean retainAll(Collection<?> c) //取交集clear() //清除集合size() //取集合的大小toArray() //把集合转成数组boolean isEmpty() //判断集合是不是空Iterator<E> iterator() //用来迭代集合
3.1 Collection 的添加类操作boolean add(E e) //往集合中放入元素boolean addAll(Collection<? extends E> c)static void demo1(){//Collection c=new Collection(); => 错误 Collection是接口,不能newCollection c=new ArrayList();
c.add("第一天");c.add("第二天");c.add("第三天");c.add("第四天");c.add(true);c.add(9999);c.add(new Person());System.out.println(c); //[第一天, 第二天, 第三天, 第四天, true, 9999, Person@9e5c73]
Collection c2=new ArrayList();c2.add("西瓜");c2.add("桃");c.addAll(c2); //这个方法的参数是一个Collection类型System.out.println(c); //[第一天, 第二天, 第三天, 第四天, true, 9999, Person@9e5c73, 西瓜, 桃]System.out.println(c.size()); //9}
3.2 Collection 的删除类操作boolean remove(Object o) //从集合中移除 首次出现 的一个元素boolean removeAll(Collection<?> c) //从集合中移除和参数集合中元素一样的元素clear() //清除集合static void demo2(){Collection c=new ArrayList();c.add("第一天");c.add("第二天");c.add("第三天");c.add("第四天");c.add(true);c.add(9999);c.remove(true); //将上面的集合中的true这个值移除掉c.remove("第三天");System.out.println(c); //[第一天, 第二天, 第四天, 9999]
Collection c2=new ArrayList();c2.add("第一天");c2.add("第二天");c2.add("不相关");c.removeAll(c2);System.out.println(c); //[第四天, 9999]c.clear();System.out.println(c); //[] 没有内容了Collection c3=new ArrayList();c3.add("一");c3.add("一");c3.add("一");c3.remove("一");System.out.println(c3); //[一, 一] 它移除的是首次出现的 的一个元素}
3.3 Collection 的判断类操作boolean contains(Object o) //判断一个集合中是不是包含一个元素containsAll(Collection<?> c) //判断一个集合中是不是包含另一个集合中的所有元素boolean isEmpty() //判断集合是不是空static void demo3(){Collection c = new ArrayList();c.add("第一天");c.add("第二天");c.add("第三天");c.add("第四天");System.out.println(c.contains("第二天")); //trueCollection c2 = new ArrayList();c2.add("第一天");c2.add("第二天");c2.add("九");System.out.println(c.containsAll(c2)); //falseSystem.out.println( c2.isEmpty()); //falsec2.clear();System.out.println( c2.isEmpty()); //true;System.out.println(c2.size()); //0 空集合的size() 是 0}
3.4 Collection 的查询类操作boolean retainAll(Collection<?> c) //取交集static void demo4(){Collection c = new ArrayList();c.add("第一天");c.add("第二天");c.add("第三天");c.add("第四天");Collection c2 = new ArrayList();c2.add("第一天");c2.add("第二天");c2.add("水果");c2.add("糖");c.retainAll(c2); //?System.out.println(c); // [第一天, 第二天] ,如果沒有交集,結果將是空}
3.5 Iterator 接口static void demo4(){Collection c = new ArrayList();c.add("第一天");c.add("第二天");c.add("第三天");c.add("第四天");Iterator it =c.iterator(); //所有继承自 Collection 的集合,都有这个方法,它能返回一个迭代器while(it.hasNext()){String str=(String)it.next();System.out.println(str);}}
//本例演示 it.next() 使用不当的问题static void demo5(){Collection c = new ArrayList();c.add("第一天");c.add("第二天");c.add("第三天");c.add("第四天");Iterator it =c.iterator(); //所有继承自 Collection 的集合,都有这个方法,它能返回一个迭代器while(it.hasNext()){System.out.println(it.next()); //java.util.NoSuchElementExceptionSystem.out.println(it.next());System.out.println(it.next());}}