Java集合学习总结

来源:互联网 发布:淘宝红线绿线流量图 编辑:程序博客网 时间:2024/05/03 10:32

Java集合框架/容器

面向对象的设计原则:

(1)、尽量隐藏、封装

(2)、尽量面向接口和抽象类编程、不要面向具体。

接口和具体类,接口指明了应当具有的功能,具体类用不同的手段来实现。具体类的不同体现在性能上而不是功能上。


集合可以理解为一个动态的对象数组,不同的是集合中的对象内容可以任意扩充

集合的特点

性能高、容易扩展和修改

集合框架被设计成要满足以下几个目标:

该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。

该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性

对一个集合的扩展和适应必须是简单的。


Java集合框架为程序员提供了预先包装的数据结构和算法来操纵他们。集合是一个对象,可容纳其他对象的引用。集合接口声明对每一种类型的集合可以执行的操作。

集合框架的类和接口均在java.util包中


所有的集合框架都包含如下内容 

接口:是代表集合的抽象数据类型。接口允许集合独立操纵其代表的细节。在面向对象的语言,接口通常形成一个层次。

实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构

算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现


Iterator接口

集合输出的标准操作:标准做法,使用Iterator接口

操作原理:Iterator是专门的迭代输出接口,迭代输出就是将元素一个个进行判断,判断其是否有内容,如果有内容则把内容取出



使用迭代器,对元素进行删除时,不要使用集合调用remove方法,会报错

如何使用迭代器

通常情况下,你会希望遍历一个集合中的元素。例如,显示集合中的每个元素。做到这一点最简单的方法是采用一个迭代器,它是一个对象,实现了Iterator 接口或ListIterator接口

迭代器,使你能够通过循环来得到或删除集合的元素。

ListIterator继承了Iterator,以允许双向遍历列表和修改元素。


如何使用比较器

TreeSet和TreeMap的按照排序顺序来存储元素. 然而,这是通过比较器来精确定义按照什么样的排序顺序。这个接口可以让我们以不同的方式来排序一个集合。

  • 容器

比如数组、串、Vector;每个容器都提供了Iterator接口,定义了枚举容器中的所有元素的标准方法,hasNext()是否还有一个元素 next()取得下一个元素;

容器的能力:是否包含特定对象、是否包含另一个容器中所有对象、取得迭代器接口

数组的长度是固定的,用来存放基本类型的数据,集合的长度是可变的,用来存放对象的引用


集合(Set,元素不能重复,唯一)

列表(List,隐含有个顺序关系,支持ListIterator迭代器,能回溯)。集合的能力:并集addAll()、差集removeAll()、交集retainAll()

列表的标准能力:在指定位置插入add(),取得某个索引的元素get(),设置某个索引的元素set(),删除某个索引的元素remove()。


Collection :集合、容器、集、收集

Map:集合类,Map就是数学上的函数的概念,是接口,并不是Collection。

Map接口的能力

表达<键,值>的映射关系,不能包含相同的key,每一个key只能映射到一个value,返回3个标准集合:

Set entrySet(),元素实际类型为:Map.Entry,Set keySet(),conllectoin values()。

返回的集合称为:词条,类型:Map.Entry是个内部类接口类型,getKey(),getValue(),setValue(Object v)。Map集合中允许值对象时null,没有个数限制。

 



  • 常用Java集合框架

(1)HashMap(线程不安全,需外部显示控制,支持null数据,要保证键的唯一性,添加删除映射关系快,不保证顺序恒久不变)

 

Hashtable(线程安全,不支持null数据)基于hash技术的实现,注意Hashtable中t小写

TreeMap基于红-黑树的实现,映射关系存在一定顺序,不允许键对象是null;大量数据时,TreeMap慢,省空间。

数据结构的组合使用:树形结构,map由键映射到集合或列表,求函数关系的逆关系,多对一,无法直接用map,上下级分类问题都是树形结构,注意递归的调用。

Map/HashMap/TreeMap

http://blog.csdn.net/u013217071/article/details/51553601

(2)List集合中的元素允许重复,可以存放任意的数据,顺序为对象插入的顺序

List接口(方法:get(int index),set(int index,Object obj)

常用实现类为ArrayList(允许所有元素,包括null,实现了可变的数组,随机访问快,删除插入慢)

LinkedList(采用链表结构保存对象,插入删除快,随机访问慢);集合的索引从0开始。

Vector实现了List接口,动态数组,Vector的操作是线程安全的,内置了同步控制机制,使用“块链”的结构,有链表和数组的优点;

LinkedList 双向链技术实现List接口,线程不安全,需要自己控制,在头、尾添加和删除,实现 Stack, Queue, double-ended Queue


(3)Set集合,元素无序,不重复

Set接口的实现类为HashSet(哈希表支持,不保证顺序恒久不变

TreeSet(遍历集合时按自然顺序递增排序,或按比较器(在类中实现comparable接口<重写compareTo(Object o)方法> comparator接口<重写compare(Object o1,Object o2)方法>)递增排序)。

  • TreeSet

用Tree技术实现的Set结构,保证元素的有序性,操作时间(log (n))、空间节省;

  • HashSet

用Hash技术实现的Set结构,不能保证顺序,操作时间为常数(与n无关),空间很浪费;

散列技术:把对象的主键直接用一个固定的公式计算,得出存储位置的方法(模9运算),可以快速命中搜索的目标,冲突解决方案:顺序检测;

Set v = new HashSet();<//HashSet v = new HashSet();> 输出结果时无序

//泛化,接口的引用,便于以后替换;Iterator it = v.iterator ();

//返回一个引用,指向一个对象,对象的类型不确定,该对象肯定实现类Iterator接口。遍历集合,通过迭代器来实现

Set/HashSet/TreeSet比较

http://blog.csdn.net/u013217071/article/details/51428376?locationNum=4&fps=1



Comparable与Comparator比较

http://blog.csdn.net/fcs_learner/article/details/71293185


Java集合关系

http://blog.csdn.net/u013217071/article/details/51244941

http://blog.csdn.net/qq_27280457/article/details/52036261

http://blog.csdn.net/zjcjava/article/details/60139284?locationNum=6&fps=1

http://blog.csdn.net/CSDN_Terence/article/details/78021666?locationNum=2&fps=1

原创粉丝点击