Java集合之ArrayList和LinkedList

Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。

集合框架包含如下内容:
| 接口| 实现类 |算法
|是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象|是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。|是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。

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

在这里插入图片描述
Java 集合框架提供了一套性能优良,使用方便的接口和类,java集合框架位于java.util包中, 所以当使用集合框架的时候需要进行导包。

  1. ArrayList类

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。
ArrayList 继承了 AbstractList ,并实现了 List 接口。
在这里插入图片描述
以下的程序展示了如何在ArrayList中添加元素,以及如何遍历一个ArrayList,我们分别使用增强for循环、将列表转化为数组、迭代器三种方式来循环输出list的元素值。计算元素数量用.size()方法

import java.util.*;
public class List_learn {
    public static void main(String[] args) {
        List<String> NameList=new ArrayList<String>();
        NameList.add("zxn");
        NameList.add("zjp");
        NameList.add("lx");

        //第一种遍历方式:for-each方式
        for(String sn:NameList){
            System.out.println(sn);
        }

        //第二种遍历方式:将list转化为字符串数组
        String[] nameString=new String[NameList.size()];
        NameList.toArray(nameString);//toArray方法将集合转化为数组
        for(int i=0;i<=nameString.length;i++){
            System.out.println(nameString[i]);
        }

        //第三种遍历方式:使用迭代器进行遍历
        Iterator<String> ite=NameList.iterator();
        while(ite.hasNext()){
            System.out.println(ite.next());
        }
    }
}

其中,使用Iterator迭代器可以不用担心超出列表长度。

访问某个元素用get方法,删除用remove方法。

import java.util.*;
public class List_learn2 {
    public static void main(String[] args) {
        List<String> NameList=new ArrayList<String>();
        NameList.add("zxn");
        NameList.add("zjp");
        NameList.add("lx");
        NameList.remove(1);
        //第一种遍历方式:for-each方式
        System.out.println(NameList.get(1));
        for(String sn:NameList){
            System.out.println(sn);
        }
    }
}

ArrayList 中的元素实际上是对象,在以上实例中,数组列表元素都是字符串 String 类型。
如果我们要存储其他类型,而 只能为引用数据类型,这时我们就需要使用到基本类型的包装类。
基本类型对应的包装类表如下:

在这里插入图片描述
Collections 类也是一个非常有用的类,位于 java.util 包中,提供的 sort() 方法可以对字符或数字列表进行排序。


import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
public class List_learn3 {
    public static void main(String[] args) {
        List<String> NameList=new ArrayList<String>();
        NameList.add("zxn");
        NameList.add("zjp");
        NameList.add("lx");
       Collections.sort(NameList);
        //第一种遍历方式:for-each方式
        for(String sn:NameList){
            System.out.println(sn);
        }
    }
}
  1. LinkedList类

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

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

在这里插入图片描述
一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。
在这里插入图片描述
Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。

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

以下情况使用ArrayList:
- 频繁访问列表中的某一个元素。
-只需要在列表末尾进行添加和删除元素操作
****

以下情况使用LinkedList:
- 你需要通过循环迭代来访问列表中的某些元素

  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作

LinkedList 继承了 AbstractSequentialList 类。
LinkedList 实现了 Queue 接口,可作为队列使用。
LinkedList 实现了 List 接口,可进行列表的相关操作。
LinkedList 实现了 Deque 接口,可作为队列使用。
LinkedList 实现了 Cloneable 接口,可实现克隆。
LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。
如下:
在这里插入图片描述
LinkedList 定义方法和增加元素如下:

import java.util.LinkedList;
public class Link_LEARN1 {
    public static void main(String[] args) {
        LinkedList<String>  strlink=new LinkedList<String>();
        strlink.add("zxn");
        strlink.add("zjp");
        strlink.add("lx");
        System.out.println(strlink);
    }
}

结果如下:

[zxn, zjp, lx]

在列表结尾/开头增加元素:

import java.util.LinkedList;
public class Link_LEARN1 {
    public static void main(String[] args) {
        LinkedList<String>  strlink=new LinkedList<String>();
        strlink.add("zxn");
        strlink.add("zjp");
        strlink.add("lx");
        strlink.addFirst("23");
        strlink.addLast("45");
        System.out.println(strlink);
    }
}

结果如下:

[23, zxn, zjp, lx, 45]

在列表开头/结尾移除元素:

strlink.removeFirst();
strlink.removeLast();

获取列表开头/结尾元素:

sites.getLast();
sites.getFirst()

其他的方法请参考:
添加链接描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值