Java的简单理解(11)-链表

Java

Java的简单理解(11)-链表

常见数据结构的Java实现

编写程序时经常要和各种数据打交道,因此所选择的数据结构对于程序的运行效率是非常重要的。一般将数据结构分为两大类:线性数据结构非线性数据结构线性数据结构有线性表,栈,队列,串,数组和文件非线性数据结构有树和图。在JDK中,Java提供了实现常见数据结构的类,使创建链表等数据结构和创建数组一样简单,不在需要去写具体的算法。

1. 链表

线性表是最基本,最简单,也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其他数据元素都是首尾相连的。线性表的逻辑结构简单,便于实现和操作。因此线性表这种数据结构在实际应用中是广泛采用的一种数据结构。

线性表的逻辑结构是n个数据元素的有限序列:
(a1,a2,a3,...an)
n为线性表的长度(n>=0),n=0的表称为空表。

数据元素呈线性关系,必存在唯一的称为"第一个"的数据元素,必存在唯一地称为“最后一个”的数据元素,除第一个元素外,每个元素都有且只有一个前驱元素,除最后一个元素外,每个元素都有且只有一个后继元素。所有数据元素在同一个线性表中必须是相同的数据类型。

在实际应用中,线性表都是以栈,队列,字符串,数组等特殊线性表的形式来使用的。由于这些特殊线性表都具有各自的特性,因此掌握这些特殊线性表的特性对于数据运算的可靠性和提高操作效率都是至关重要的。

线性表按其存储结构可分为顺序表链表用顺序存储结构存储,将线性表中的数据元素依次存放在某个存储区域中的表称为顺序表用链式存储结构存储的线性表称为链表。一维数组是用顺序方式存储的线性表。

如果需要处理一些类型相同的数据,人们习惯上使用数组这种数据结构,但数组在使用之前必须定义大小,而且不能动态定义大小。链表是由若干个称作节点的对象组成的一种数据结构,分为两种类型。

  • 单链表:每个节点含有一个数据和下一个节点对象的引用。
  • 双链表:含有一个数据并含有上一个节点对象的引用和下一个节点对象的引用。
2. 链表的创建

使用java.util包中的LinkedList类,可以创建一个链表对象。
LinkedList mylist = new LinkedList(); // 创建了一个空双链表
也可以使用add方法向链表依次增加节点。

mylist.add("It");
mylist.add("is");
mylist.add("a");
mylist.add("door");

这样就形成了四个节点的链表,数据依次为“It”,“is”,“a”,“door”,四个节点是自动连接的。mylist可以使用方法public Object get(index i)获取第i个节点中存储的数据。存放在节点中的数据都被看作是一个Object对象。

3. LinkedList类中的常用方法
  • public boolean add(Object element) // 向链表末尾添加一个新的节点,该节点中的数据是参数element指定的对象
  • public boolean add(int index,Object element) // 向链表指定位置添加节点,该节点中的数据是参数element指定的对象
  • public void addFirst(Object element) // 向链表头添加新节点,该节点中的数据是参数element指定的对象
  • public void addLast(Object element) // 向链表尾添加新节点,该节点中的数据是参数element指定的对象
  • public Object removeFirst() // 删除第一个节点,并返回这个节点中的对象。
  • public Object removeLast() // 删除最后一个节点,并返回这个节点中的对象。
  • public Object remove(int index) // 删除指定位置的节点
  • public Object get(int index) // 得到指定位置的节点
  • public Object getFirst() // 得到链表第一个节点的对象
  • public Object getLast() // 得到链表最后一个节点的对象
  • public int indexOf(Object element) // 返回节点对象element在链表中首次出现的位置,如果链表中无此节点对象则返回-1
  • public int lastIndexOf(Object element) //返回节点对象element在链表中最后出现的位置,如果链表中无此节点对象则返回-1
  • public Object set(int index, Object element) // 将当前链表index位置节点中的对象替换成参数element指定的对象,返回被替换对象。
  • public int size() // 返回链表的长度,即节点的个数。
  • public boolean contains(Object element) // 判断链表节点对象中是否含有element
4. 使用Iterator类遍历链表

迭代器(Iterator)模式又叫做游标(Cursor)模式。它的定义为: 提供一种方法访问一个容器(Container)对象中各个元素,而又不需要暴露该对象的内部细节

从定义可见,迭代器模式是为容器而生的。很明显,对容器对象的访问必然涉及到遍历算法。迭代器提供了一种通用的方式来访问集合中的元素。

  • boolean hasNext(); 如果仍有元素可以迭代,则返回true。
  • Object next(); 返回迭代的下一个元素。
  • void remove(); 从迭代器指向的集合中移除迭代器返回的最后一个元素。

当使用Iterator接口遍历链表时,一个链表对象可以使用iterator()方法获取Iterator变量,Iterator对象中每个数据成员刚好是链表节点中的数据,而且这些数据成员是按顺序存放在Iterator对象中的,Iterator对象使用next()方法可以得到其中的数据成员。

LinkedList list = new LinkedList();

Iterator iter = list.iterator();
 while (iter.hasNext()) {
      Student te = iter.next();
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容