JAVA学习笔记 -- 数据结构
一、数据结构的接口
在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学习笔记 -- 数据结构的更多相关文章
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- java学习笔记11--集合总结
java学习笔记系列: java学习笔记10--泛型总结 java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Ob ...
- Java学习笔记【一、环境搭建】
今天把java的学习重新拾起来,一方面是因为公司的项目需要用到大数据方面的东西,需要用java做语言 另一方面是原先使用的C#公司也在慢慢替换为java,为了以后路宽一些吧,技多不压身 此次的学习目标 ...
- 0037 Java学习笔记-多线程-同步代码块、同步方法、同步锁
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条 ...
- 0035 Java学习笔记-注解
什么是注解 注解可以看作类的第6大要素(成员变量.构造器.方法.代码块.内部类) 注解有点像修饰符,可以修饰一些程序要素:类.接口.变量.方法.局部变量等等 注解要和对应的配套工具(APT:Annot ...
- Java学习笔记(04)
Java学习笔记(04) 如有不对或不足的地方,请给出建议,谢谢! 一.对象 面向对象的核心:找合适的对象做合适的事情 面向对象的编程思想:尽可能的用计算机语言来描述现实生活中的事物 面向对象:侧重于 ...
- 0032 Java学习笔记-类加载机制-初步
JVM虚拟机 Java虚拟机有自己完善的硬件架构(处理器.堆栈.寄存器等)和指令系统 Java虚拟机是一种能运行Java bytecode的虚拟机 JVM并非专属于Java语言,只要生成的编译文件能匹 ...
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
随机推荐
- 数据解析之XML和JSON
1. 解析的基本的概念 解析:从事先规定好的格式中提取数据 解析前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JOSN解析 2. X ...
- .NET通用权限系统快速开发框架源代码
有兴趣的朋友欢迎加群讨论:312677516 一.开发技术:B/S(.NET C# ) 1.Windows XP以上 (支援最新Win 8) 2.Microsoft Visual Studio 201 ...
- 误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 ' ...
- 在UITouch事件中画圆圈-iOS8 Swift基础教程
这篇教程主要内容展示如何利用Core Graphics Framework画圆圈,当用户点击屏幕时随机生成不同大小的圆,这篇教程在Xcode6和iOS8下编译通过. 打开Xcode,新建项目选择Sin ...
- 【Hibernate】Remember that ordinal parameters are 1-based!
此错误的官方解释:1.当hql中不需要参数,而传递了参数导致,2.set参数时没有从0开始. 但此问题不属这两种. 检查导入的libraries无错误. 最后在网络搜索到:http://qihaihu ...
- [Swust OJ 763]--校门外的树 Plus(暴力枚举)
题目链接:http://acm.swust.edu.cn/problem/0763/ Time limit(ms): 1000 Memory limit(kb): 65535 西南某科技大学的校门外有 ...
- CentOS 安装easy_install、pip的方法
CentOS 安装easy_install的方法: wget -q http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py ...
- QTableWidget的用法总结
在使用Qt不多的日子里,已经两次用到了QTableWidget这个控件,也慢慢的习惯和喜欢上了它.再使用QTableWidget的时候,已不像刚开始使用时的迷茫.嗯嗯.现在就来总结总结我与QTable ...
- centos php扩展开发流程
原文:centos php扩展开发流程 一.安装php centos 默认 yum 安装 php 版本为 5.3, 很多php框架基本上要求5.4以上版本,这时候不能直接 用 yum install ...
- 【Demo 0025】注册/反注册窗体类RegisterClassEx/UnregisterClass
所有窗体在创建前都必须注册窗体类,只有注册的窗体类才被系统认知并允许实例化,换句话说通过注册告诉进程窗体管理器此类窗体的属性如: 背景色,窗体上的鼠标样式以及窗体事件处理函数等; 有一些控件类系统自 ...