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的垃圾回收机制 ...
随机推荐
- Tour(KM算法)
Tour Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submi ...
- Linux编程---I/O部分
非常多函数都能够在网上找到,也比較基础,所以原型仅仅给出了函数名.详细用到再man吧. 输入输出是个非常重要的一块内容.差点儿网络相关的东西基本都是靠底层IO调用来实现的. 好吧.还是先踏踏实实的介绍 ...
- java 简单的数据增删该查
import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...
- iOSAPP启动时实现加载广告
现在很多APP在启动的时候都在加载广告,现在也很流行,主要是盈利啊.笔者也做了很多关于广告的事情.现在记录下自己在APP启动的时候,怎么加载广告的. 下面总结下广告加载的三种方式 1.现在很多APP的 ...
- emacs打开乱码解决办法
前言:有时候我们使用emacs打开文件的时候,因为emacs默认编码跟文档编码不同而出现了乱码如图: 对于新手的我们应该通过以下两种途径来解决: 方法一: 只需C-x <RET> r ( ...
- JAVA 中URL链接中文参数乱码的若干处理方法
方法一: http://xxx.do?ptname='我是中国人' String strPtname = request.getParameter("ptname"); strPt ...
- 树莓派变成一个Web服务器: nginx + php + sqlite
将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装 ...
- Sitemesh3的使用及配置
1 . Sitemesh 3 简介 Sitemesh 是一个网页布局和修饰的框架,基于 Servlet 中的 Filter,类似于 ASP.NET 中的‘母版页’技术.参考:百度百科,相关类似技术:A ...
- 一步一步重写 CodeIgniter 框架 (12) —— 代码再重构,回归 CI
第一课中搭建的基本的 框架模型, 只有一个 index.php 作为执行文件,按这种方式最不稳定的因素就是路径的问题. 我们经常需要通过合适的参数,比如 load_class('output') 或 ...
- Linux高性能server编程——高级I/O函数
高级I/O函数 pipe函数 pipe函数用于创建一个管道,实现进程间的通信. #include <unistd.h> int pipe(int pipefd[2]); 通过pipe ...