一、数据结构的接口

在Java中全部类的鼻祖是Object类,可是全部有关数据结构处理的鼻祖就是Collection和Iterator接口,也就是集合与遍历。

1、Collection接口

Collection c = new Xx(); // c能够称为Collection接口回调对象。尽管它被声明为Collection类型,可是实例化时实现的是接口的实现类Xx。它的方法也是用来操作实现类的对象。

<span style="white-space:pre">	</span>//以下是Collection接口的一些经常用法
boolean add(Object obj);
boolean addAll(Collection c);
boolean contains(Object o);
boolean containsAll(Collection c);
boolean isEmpty();
int size();
void clear();

2、Iterator接口

<span style="white-space:pre">	</span>Xx xx = new Xx();
Iterator iterator = xx.iterator();

iterator()是Collection接口中的方法。它会返回在xx的元素上进行迭代的迭代器。而且迭代置于集合的第一个元素前面。

       //以下是Iterator接口的一些经常用法
boolean hasNext();//推断迭代是否到达了集合末尾
Object next();//返回迭代的下一个元素
void remove();//移除迭代指向的最后一个元素

next()方法能够理解为:迭代往下移一位,返回迭代条过的元素。Xx xx = (Xx)iterator.next() 取出来的元素类型为Object须要转换。

java数据结构库还提供了一个Iterator的子接口——ListIterator,能够实现将元素插入指定位置和逆向遍历等操作。具体查阅API。

二、数据结构的几个重要的类

1、链表(LinkedList)

攻克了数组删除元素开销大的问题,可是查询元素须要从链表头遍历。每一个元素有两个指针,next指向下一个元素,previous指向上一个元素。

LinkedList类实现了Collection接口。

2、数组列表类(ArrayList)

数组列表能够依据程序执行时的需求动态的伸缩。

ArrayList类实现了Collection接口。

3、哈希表(Hashtable)

通过散列码存取。实现高速查询特定元素的数据结构。以键—值的形式存储元素,必须保证键是唯一的,值能够不唯一。

<span style="white-space:pre">	</span>//构造器
Hashtable(int initialCapacity, float loadFactor)
//initialCapacity 表示初始化容量 缺省值为 11
//loadFactor 表示装填因子 缺省值为0.75 //主要方法
Object put(Object key, Object value);
//增加一个元素
//返回此哈希表中指定键的曾经的值。假设不存在该值,则返回 null
Object get(Object key);//返回此哈希表中指定键的值
boolean containsKey(Object key);
boolean containsValue(Object key);
Object remove(Object key);//删除指定键元素。返回指定键映射的值
Collection values();//返回此表所包括元素的集合

4、哈希集(HashSet)

与哈希表类似,仅仅是Hashtable实现的是Set接口,而HashSet实现的是Map接口还有Collection接口。

构造方法的默认初始容量是 16,载入因子是 0.75。

另外非常重要的一点是哈希表是线性同步的。而哈希集是非线性同步的。

5、树集(TreeSet)

有序的数据结构。

a、构造器: TreeSet()

此时。向树集加入字符串对象,由于它已经实现了Comparable接口,compareTo方法是按字典序比較字符串的。所以树集元素按字典序排列,当然也能够定义自己的排序方法:

	class Student implements Comparable
{
public int compareTo(Object other)
{
<span style="white-space:pre"> </span>//详细实现
}
}

b、构造器:TreeSet(Comparator c)

此时,能够通过实现Comparator接口中的compare方法,定义自己的比較方法。

class StudentComparator implements Comparator
{
public compare(Object a, Object b)
{
//详细实现
}
}
StudentComparator comp = new StudentComparator();
TreeSet set = new TreeSet(comp);

JAVA学习笔记 -- 数据结构的更多相关文章

  1. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  2. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

  3. java学习笔记11--集合总结

    java学习笔记系列: java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Ob ...

  4. Java学习笔记【一、环境搭建】

    今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...

  5. 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁

    什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...

  6. 0035 Java学习笔记-注解

    什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...

  7. Java学习笔记(04)

    Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...

  8. 0032 Java学习笔记-类加载机制-初步

    JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...

  9. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

随机推荐

  1. 数据解析之XML和JSON

    1. 解析的基本的概念 解析:从事先规定好的格式中提取数据 解析前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JOSN解析 2. X ...

  2. .NET通用权限系统快速开发框架源代码

    有兴趣的朋友欢迎加群讨论:312677516 一.开发技术:B/S(.NET C# ) 1.Windows XP以上 (支援最新Win 8) 2.Microsoft Visual Studio 201 ...

  3. 误mlogc.c:32:23: error: curl/curl.h: No such file or directory

    出现以下错误: mlogc.c:32:23: error: curl/curl.h: No such file or directory mlogc.c:1091: error: expected ' ...

  4. 在UITouch事件中画圆圈-iOS8 Swift基础教程

    这篇教程主要内容展示如何利用Core Graphics Framework画圆圈,当用户点击屏幕时随机生成不同大小的圆,这篇教程在Xcode6和iOS8下编译通过. 打开Xcode,新建项目选择Sin ...

  5. 【Hibernate】Remember that ordinal parameters are 1-based!

    此错误的官方解释:1.当hql中不需要参数,而传递了参数导致,2.set参数时没有从0开始. 但此问题不属这两种. 检查导入的libraries无错误. 最后在网络搜索到:http://qihaihu ...

  6. [Swust OJ 763]--校门外的树 Plus(暴力枚举)

    题目链接:http://acm.swust.edu.cn/problem/0763/ Time limit(ms): 1000 Memory limit(kb): 65535 西南某科技大学的校门外有 ...

  7. CentOS 安装easy_install、pip的方法

    CentOS 安装easy_install的方法: wget -q http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py ...

  8. QTableWidget的用法总结

    在使用Qt不多的日子里,已经两次用到了QTableWidget这个控件,也慢慢的习惯和喜欢上了它.再使用QTableWidget的时候,已不像刚开始使用时的迷茫.嗯嗯.现在就来总结总结我与QTable ...

  9. centos php扩展开发流程

    原文:centos php扩展开发流程 一.安装php centos 默认 yum 安装 php 版本为 5.3, 很多php框架基本上要求5.4以上版本,这时候不能直接 用 yum install ...

  10. 【Demo 0025】注册/反注册窗体类RegisterClassEx/UnregisterClass

    所有窗体在创建前都必须注册窗体类,只有注册的窗体类才被系统认知并允许实例化,换句话说通过注册告诉进程窗体管理器此类窗体的属性如: 背景色,窗体上的鼠标样式以及窗体事件处理函数等;  有一些控件类系统自 ...