查阅API,看List的介绍。有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。

看完API,我们总结一下:

List接口:

  • 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
  • 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
  • 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

List接口的常用子类有:

  • ArrayList集合(线程不安全)
  • LinkedList集合(线程不安全)
  • Vector集合(线程安全)

List接口的常用方法:

  

public class ListDemo01 {

    public static void main(String[] args) {

        function2();

    }

    /*
* set(int index,E)
* 修改指定索引上的元素
* 返回被修改之前的元素
*/
public static void function2(){
List<Double> list = new ArrayList<>();
list.add(1.1);
list.add(1.2);
list.add(1.3);
list.add(1.4); double d=list.set(0, 9.0);
/*
* 与add(index,ele)不同 不能这样添加元素
* java.lang.IndexOutOfBoundsException:
*/
double d1=list.set(4,2.0);//这一句会报 java.lang.IndexOutOfBoundsException:
System.out.println(d1+"==="+list);
}
/*
*
* E remove(int index)
* 移除指定索引上的元素
* 返回被删除的元素
*
*/
public static void function1(){
List<Double> list = new ArrayList<>();
list.add(1.1);
list.add(1.2);
list.add(1.3);
list.add(1.4); System.out.println(list.remove(1));
System.out.println(list);
} /*
* add(int index,E)
* 将元素插入到列表的指定索引上
*/
public static void function(){
List<String> list=new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
System.out.println(list); /*带有索引的操作 要注意索引越界的问题
* java.lang.IndexOutOfBoundsException
*/
list.add(5,"shsxt");
System.out.println(list);
}
}

List集合存储数据的结构:

  List接口下有很多个集合,它们存储元素所采用的结构方式是不同的,这样就导致了这些集合有它们各自的特点,供给我们在不同的环境下进行使用。数据存储的常用结构有:堆栈、队列、数组、链表。

堆栈: 先进后出  栈的入口、出口的都是栈的顶端位置

队列: 先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素) 队列的入口、出口各占一侧。

数组: 查找快,增删慢, 数组元素在内存地址上是连续的

链表: 多个节点之间,通过地址进行连接 ,查找元素慢 ,增删元素快

List接口的实现类:

  • ArrayList

ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。

  • LinkedList

LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。

 package com.shsxt.lisa;

 import java.util.LinkedList;

 /*
* LinkedList 链表集合的特有功能
* 增删快 查询慢 底层是链表
*
* 子类的特有功能 不能使用多态
*/
public class LinkedListDemo01 { public static void main(String[] args) {
function02();
} /*
* addFirst(E)
* addLast(E)
*/
public static void function() {
//子类的特有功能 不能使用多态 所以这里不能使用list
LinkedList<String> list = new LinkedList<String>();
list.addLast("元首");
list.add("001");
list.add("002"); list.addFirst("张二狗");
System.out.println(list); } /*
*
* getFirst(E) getLast(E)
*/
public static void function02(){
LinkedList<String> list = new LinkedList<String>();
list.addLast("元首");
list.add("001");
list.add("002");
/*
* 但是这个获取方式有一些弊端 思考下列场景
*/
list.clear();//将容器元素清空后 java.util.NoSuchElementException
//解决方法 if(link.size()!=0) 或者 if(link.isEmpty())
System.out.println(list.getFirst()); }
}
  • Vector集合

Vector集合数据存储的结构是数组结构,为JDK中最早提供的集合。Vector中提供了一个独特的取出方式,就是枚举Enumeration,它其实就是早期的迭代器。此接口Enumeration的功能与 Iterator 接口的功能是类似的。Vector集合已被ArrayList替代。枚举Enumeration已被迭代器Iterator替代。

集合之四:List接口的更多相关文章

  1. Java集合之Collection接口

    java的集合分为三大接口,分别是Collection,Map,Iterator,集合接口和类在java.util包中,此次主要介绍三大接口之一的Collection接口. 一些Collection允 ...

  2. Java精选笔记_集合概述(Collection接口、Collections工具类、Arrays工具类)

    集合概述 集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体.集合被用于存储.获取.操纵和传输聚合的数据. 使用集合的技巧 看到Array就是数组结构,有角标,查询速 ...

  3. FCL研究-集合- System.Collections 接口和对象集合

    [目录] 发现自己已经有很长一段时间写代码没什么进步了,随便读读FCL的源码,看看之前一直用的方法是如何实现的,也顺便提高下自己.FCL很是庞大,很难下口,于是用最笨的办法,先看常见的命名空间,逐个展 ...

  4. ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口

    详见:https://blog.csdn.net/weixin_39148512/article/details/79234817 众所周知,在List集合中,我们经常会用到ArrayList以及Li ...

  5. Java集合框架——Map接口

    第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...

  6. Java集合框架——Set接口

    第三阶段 JAVA常见对象的学习 集合框架--Set接口 List集合的特点是有序的,可重复的,是不是存在这一种无序,且能保证元素唯一的集合呢?(HashSet )这就涉及到我们今天所要讲的Set集合 ...

  7. Java集合框架——List接口

    第三阶段 JAVA常见对象的学习 集合框架--List接口 按照集合框架的继承体系,我们先从Collection中的List接口开始学习 (一) 概述及功能(ArrayList演示) (1) 概述 L ...

  8. JAVA笔记20-容器之四Map接口、自动打包、泛型(重要)

    一.Map接口 Map提供的是key到value的映射.key不能重复,每个key只能映射一个value. 注:重复是指equals,但用equals()方法效率低,所以此处用hashCode()方法 ...

  9. Java集合框架Map接口

    集合框架Map接口 Map接口: 键值对存储一组对象 key不能重复(唯一),value可以重复 常用具体实现类:HashMap.LinkedHashMap.TreeMap.Hashtable Has ...

随机推荐

  1. orcle clob字段查询

    select utl_raw.cast_to_varchar2(DBMS_LOB.SUBSTR(column,2000,1)) from t

  2. python学习——查找计算机中文件位置

    有时想查找某个文件时,却忘记了文件在计算机中存放的位置,这是一个经常遇到的问题. 当然如果你使用windows 7的话,可以直接用右上角的搜索框来搜索. 最近在学习python,正好拿这个来练练手,写 ...

  3. Use formatter to format your JAVA code

    In order to make the codes looks unified and make it easy to understand, it's better to use the same ...

  4. Hash校验工具、MD5 SHA1 SHA256命令行工具

    MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirsoft.net/utils/has ...

  5. mysql user表 权限字段详解

    Select_priv.确定用户是否可以通过SELECT命令选择数据. Insert_priv.确定用户是否可以通过INSERT命令插入数据. Update_priv.确定用户是否可以通过UPDATE ...

  6. windows10个性化设置

    任务栏DIY 日期显示样式 字体

  7. SSH不能连接虚拟机中的Ubuntu

    设置 网络 既然要远程ubuntu的系统.那么首先是两个网络是不是在一个网段.能不能ping的通? a) Windows电脑上--cmd 打开命令窗口.键入:ipconfig 命令.查看主机IP. b ...

  8. CGLIB介绍与原理(通过继承的动态代理)

    一.什么是CGLIB? CGLIB是一个功能强大,高性能的代码生成包.它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充.通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接 ...

  9. MFC 错误异常,用vs添加资源并为资源定义类后报错:error C2065 : 未声明的标识符

    添加了一个Dialog资源,修改了ID之后右击资源添加了一个类,在类里面有一个成员变量: // 对话框数据    enum { IDD = IDD_GETIN }; 而在编译过程中出现报错,错误代号是 ...

  10. linux 文件系统基本结构

    1.Linux文件系统为一个倒转的单根树状结构 2.文件系统的根为"/" 3.文件系统严格区分大小写 4.路径使用"/",与Windows使用"\&q ...