码迷,mamicode.com
首页 > 编程语言 > 详细

Java大课堂:常用数据结构一

时间:2015-05-19 16:34:41      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:java   数据结构   计算机科学   

Java大课堂:常用数据结构一

背景

在计算机科学的学习中,数据结构是个绕不开的问题。那么我将在接下来的时间,简明扼要的介绍常见数据结构以及部分源码。下面我将简单介绍本大课堂涉及到的内容。

众所周知,一款好用的数据结构,不仅包括数据结构的实现,还有相关工具集。比如c++中stl有大量的工具函数,比如sortaccumulate,reducefor_each,remove_if,count,count_if。其实在java中也有类似的实用算法。下面我将介绍常用的数据结构以及工具集合。


Collection框架

技术分享

 

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。JavaSDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如ListSet

所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection

List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。

和下面要提到的Set不同,List允许有相同的元素。

除了具有Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。

实现List接口的常用类有LinkedListArrayListVectorStack

Set是一种不包含重复的元素的Collection,即任意的两个元素e1e2都有e1.equals(e2)=falseSet最多有一个null元素。

很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。

请注意:必须小心操作可变对象(Mutable Object)。如果一个Set中的可变元素改变了自身状态导致Object.equals(Object)=true将导致一些问题。

 

 

Map框架

技术分享

 Map也是接口,但没有继承Collection接口。该接口描述了从不重复的键到值的映射。Map接口用于维护键/值对(key/value pairs)。

   特征:它描述了从不重复的键到值的映射。

       两个重要的实现类:HashMapTreeMap

       1.HashMap,中文叫散列表,基于哈希表实现,特点就是键值对的映射关系。一个key对应一个ValueHashMap中元素的排列顺序是不固定的。更加适合于对元素进行插入、删除和定位。

       2.TreeMap,基于红黑树实现。TreeMap中的元素保持着某种固定的顺序。更加适合于对元素的顺序遍历

迭代器

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为轻量级对象,因为创建它的代价小。

Collections工具类

java.util.Collections 是一个包装类(工具类/帮助类)。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,用于对集合中元素进行排序、搜索以及线程安全等各种操作,服务于JavaCollection框架。

它类似于stl中的sortremove等。

 

比较器

java的比较器有两类,分别是Comparable接口和Comparator接口。

在为对象数组进行排序时,比较器的作用非常明显。

区别是Comparable被比较对象本身implements,添加方法。这个类似于c++类内部重载操作符’<’

Comparator需要实现一个比较类。这个类似于c++类外部实现比较函数或者仿函数。


总结

我们在学习使用java的类库时,不仅仅要学会使用,还要知其所以然。另一方面要有开阔的眼界,写出好看的代码。比如,排序,用系统提供的接口,而不是自己实现。尽量使用lambda代替匿名内部类等。接下来第二讲将是Collection框架中的List接口。


Java大课堂:常用数据结构一

标签:java   数据结构   计算机科学   

原文地址:http://blog.csdn.net/jr19911118730/article/details/45845401

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!