zoukankan      html  css  js  c++  java
  • Java链表

    链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

    链表可分为单向链表和双向链表。

    一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。

    一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。

    Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。

    与 ArrayList 相比,LinkedList 的增加和删除对操作效率更高,而查找和修改的操作效率较低。

    以下情况使用 ArrayList :

    • 频繁访问列表中的某一个元素。
    • 只需要在列表末尾进行添加和删除元素操作。

    以下情况使用 LinkedList :

    • 你需要通过循环迭代来访问列表中的某些元素。
    • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

    LinkedList 继承了 AbstractSequentialList 类。

    LinkedList 实现了 Queue 接口,可作为队列使用。

    LinkedList 实现了 List 接口,可进行列表的相关操作。

    LinkedList 实现了 Deque 接口,可作为队列使用。

    LinkedList 实现了 Cloneable 接口,可实现克隆。

    LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。

    LinkedList 类位于 java.util 包中,使用前需要引入它,语法格式如下:

    // 引入 LinkedList 类
    import java.util.LinkedList; 
    
    LinkedList<E> list = new LinkedList<E>();   // 普通创建方法
    或者
    LinkedList<E> list = new LinkedList(Collection<? extends E> c); // 使用集合创建链表

    创建一个简单的链表实例:

    // 引入 LinkedList 类

    import java.util.LinkedList;

    public class RunoobTest {
        public static void main(String[] args) {
            LinkedList<String> sites = new LinkedList<String>();
            sites.add("Google");
            sites.add("Runoob");
            sites.add("Taobao");
            sites.add("Weibo");
            System.out.println(sites);
        }
    }

    以上实例,执行输出结果为:

    [Google, Runoob, Taobao, Weibo]

    更多的情况下我们使用 ArrayList 访问列表中的随机元素更加高效,但以下几种情况 LinkedList 提供了更高效的方法。

    在列表开头添加元素:

    / 引入 LinkedList 类
    import java.util.LinkedList;

    public class RunoobTest {
        public static void main(String[] args) {
            LinkedList<String> sites = new LinkedList<String>();
            sites.add("Google");
            sites.add("Runoob");
            sites.add("Taobao");
            // 使用 addFirst() 在头部添加元素
            sites.addFirst("Wiki");
            System.out.println(sites);
        }
    }

    以上实例,执行输出结果为:

    [Wiki, Google, Runoob, Taobao]

    在列表结尾添加元素:

    实例

    // 引入 LinkedList 类
    import java.util.LinkedList;

    public class RunoobTest {
        public static void main(String[] args) {
            LinkedList<String> sites = new LinkedList<String>();
            sites.add("Google");
            sites.add("Runoob");
            sites.add("Taobao");
            // 使用 addLast() 在尾部添加元素
            sites.addLast("Wiki");
            System.out.println(sites);
        }
    }

    以上实例,执行输出结果为:

    [Google, Runoob, Taobao, Wiki]

    在列表开头移除元素:

    // 引入 LinkedList 类
    import java.util.LinkedList;

    public class RunoobTest {
        public static void main(String[] args) {
            LinkedList<String> sites = new LinkedList<String>();
            sites.add("Google");
            sites.add("Runoob");
            sites.add("Taobao");
            sites.add("Weibo");
            // 使用 removeFirst() 移除头部元素
            sites.removeFirst();
            System.out.println(sites);
        }
    }

    以上实例,执行输出结果为:

    [Runoob, Taobao, Weibo]

    在列表结尾移除元素:

    // 引入 LinkedList 类
    import java.util.LinkedList;

    public class RunoobTest {
        public static void main(String[] args) {
            LinkedList<String> sites = new LinkedList<String>();
            sites.add("Google");
            sites.add("Runoob");
            sites.add("Taobao");
            sites.add("Weibo");
            // 使用 removeLast() 移除尾部元素
            sites.removeLast();
            System.out.println(sites);
        }
    }

    以上实例,执行输出结果为:

    [Google, Runoob, Taobao]

    获取列表开头的元素:

    // 引入 LinkedList 类
    import java.util.LinkedList;

    public class RunoobTest {
        public static void main(String[] args) {
            LinkedList<String> sites = new LinkedList<String>();
            sites.add("Google");
            sites.add("Runoob");
            sites.add("Taobao");
            sites.add("Weibo");
            // 使用 getFirst() 获取头部元素
            System.out.println(sites.getFirst());
        }
    }

    以上实例,执行输出结果为:

    Google

    获取列表结尾的元素:

    // 引入 LinkedList 类
    import java.util.LinkedList;

    public class RunoobTest {
        public static void main(String[] args) {
            LinkedList<String> sites = new LinkedList<String>();
            sites.add("Google");
            sites.add("Runoob");
            sites.add("Taobao");
            sites.add("Weibo");
            // 使用 getLast() 获取尾部元素
            System.out.println(sites.getLast());
        }
    }

    以上实例,执行输出结果为:

    Weibo

    迭代元素

    我们可以使用 for 配合 size() 方法来迭代列表中的元素:

    实例

    // 引入 LinkedList 类
    import java.util.LinkedList;

    public class RunoobTest {
        public static void main(String[] args) {
            LinkedList<String> sites = new LinkedList<String>();
            sites.add("Google");
            sites.add("Runoob");
            sites.add("Taobao");
            sites.add("Weibo");
            for (int size = sites.size(), i = 0; i < size; i++) {
                System.out.println(sites.get(i));
            }
        }
    }

    size() 方法用于计算链表的大小。

    以上实例,执行输出结果为:

    Google
    Runoob
    Taobao
    Weibo

    也可以使用 for-each 来迭代元素:

    实例

    // 引入 LinkedList 类
    import java.util.LinkedList;

    public class RunoobTest {
        public static void main(String[] args) {
            LinkedList<String> sites = new LinkedList<String>();
            sites.add("Google");
            sites.add("Runoob");
            sites.add("Taobao");
            sites.add("Weibo");
            for (String i : sites) {
                System.out.println(i);
            }
        }
    }

    以上实例,执行输出结果为:

    Google
    Runoob
    Taobao
    Weibo
    • 接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象

    • 实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。

    • 算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

    除了集合,该框架也定义了几个 Map 接口和类。Map 里存储的是键/值对。尽管 Map 不是集合,但是它们完全整合在集合中。

  • 相关阅读:
    index()方法
    extend()方法
    count()方法
    copy()方法
    clear()方法
    append()方法
    IE botton 点击文字下沉
    IE滚动条
    关闭windows10自动更新
    vue文件名规范
  • 原文地址:https://www.cnblogs.com/zhouyideboke/p/15060970.html
Copyright © 2011-2022 走看看