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的垃圾回收机制 ...
随机推荐
- 梳排序(Comb sort)
Comb Sort,梳排序或者梳子排序,就像梳子那样有间隔地比较两个数,很形象,O(n*logn)时间复杂度,O(1)空间复杂度,属于不稳定的排序算法.算法的思想是使逆序的元素尽可能快地移动到最终的位 ...
- BZOJ 1652: [Usaco2006 Feb]Treats for the Cows
题目 1652: [Usaco2006 Feb]Treats for the Cows Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 234 Solve ...
- c++11 stl atomic_flag 样例
Author:DriverMonkey Mail:bookworepeng@Hotmail.com Phone:13410905075 QQ:196568501 測试环境:Win7 64 bit 编译 ...
- ThinkPHP - 缓存使用
用法: 需要使用不同的缓存方式的时候 需要重新初始化,如果不初始化直接调用的话,则会按照系统配置自动初始化.初始化的返回值,可以直接操作缓存: $cache = cache(array('type'= ...
- Flash中用AS3做的游戏,导出apk安装到手机上滤镜效果出不来为什么?
主要原因是,导出apk文件时渲染模式设置成了GPU.改掉就行了.
- dpkg卸载和安装deb
今天在linux mint上安装个东西,没有安装完全,但是启动的时候能够启动,为了防止以后出现异常,想把它卸载了,在软件上点卸载,没有反应, 如下图: 没有指定卸载的包源,无奈使用sudo apt-g ...
- list,map的疑问
代码: package com.wyl; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator ...
- java-finalize
finalize()来自Object的protected 方法,同clone()需要用户具体实现.一.源码中的介绍1. Called by the garbage collector on an ...
- vim-ctags-taglist-netrw
vim配置 在~/.vimrc文件里配置例如以下内容.或者在/etc/vim/vimrc中进行全局配置,经常使用配置例如以下: syntax on set tabstop=4 set nu set s ...
- 菜鸟学习SSH(二)——Struts国际化
国际化(internationalization,i18n)和本地化(localization,l10n)指让产品(出版物,软件,硬件等)能够适应非本地环境,特别是其他的语言和文化.程序在不修改内部代 ...