集合之四:List接口
查阅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接口的更多相关文章
- Java集合之Collection接口
java的集合分为三大接口,分别是Collection,Map,Iterator,集合接口和类在java.util包中,此次主要介绍三大接口之一的Collection接口. 一些Collection允 ...
- Java精选笔记_集合概述(Collection接口、Collections工具类、Arrays工具类)
集合概述 集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体.集合被用于存储.获取.操纵和传输聚合的数据. 使用集合的技巧 看到Array就是数组结构,有角标,查询速 ...
- FCL研究-集合- System.Collections 接口和对象集合
[目录] 发现自己已经有很长一段时间写代码没什么进步了,随便读读FCL的源码,看看之前一直用的方法是如何实现的,也顺便提高下自己.FCL很是庞大,很难下口,于是用最笨的办法,先看常见的命名空间,逐个展 ...
- ArrayList集合实现RandomAccess接口有何作用?为何LinkedList集合却没实现这接口
详见:https://blog.csdn.net/weixin_39148512/article/details/79234817 众所周知,在List集合中,我们经常会用到ArrayList以及Li ...
- Java集合框架——Map接口
第三阶段 JAVA常见对象的学习 集合框架--Map集合 在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息.今天我们所 ...
- Java集合框架——Set接口
第三阶段 JAVA常见对象的学习 集合框架--Set接口 List集合的特点是有序的,可重复的,是不是存在这一种无序,且能保证元素唯一的集合呢?(HashSet )这就涉及到我们今天所要讲的Set集合 ...
- Java集合框架——List接口
第三阶段 JAVA常见对象的学习 集合框架--List接口 按照集合框架的继承体系,我们先从Collection中的List接口开始学习 (一) 概述及功能(ArrayList演示) (1) 概述 L ...
- JAVA笔记20-容器之四Map接口、自动打包、泛型(重要)
一.Map接口 Map提供的是key到value的映射.key不能重复,每个key只能映射一个value. 注:重复是指equals,但用equals()方法效率低,所以此处用hashCode()方法 ...
- Java集合框架Map接口
集合框架Map接口 Map接口: 键值对存储一组对象 key不能重复(唯一),value可以重复 常用具体实现类:HashMap.LinkedHashMap.TreeMap.Hashtable Has ...
随机推荐
- orcle clob字段查询
select utl_raw.cast_to_varchar2(DBMS_LOB.SUBSTR(column,2000,1)) from t
- python学习——查找计算机中文件位置
有时想查找某个文件时,却忘记了文件在计算机中存放的位置,这是一个经常遇到的问题. 当然如果你使用windows 7的话,可以直接用右上角的搜索框来搜索. 最近在学习python,正好拿这个来练练手,写 ...
- 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 ...
- Hash校验工具、MD5 SHA1 SHA256命令行工具
MyHash 检验工具http://www.zdfans.com/html/4346.html HashMyFiles Hash校验工具http://www.nirsoft.net/utils/has ...
- mysql user表 权限字段详解
Select_priv.确定用户是否可以通过SELECT命令选择数据. Insert_priv.确定用户是否可以通过INSERT命令插入数据. Update_priv.确定用户是否可以通过UPDATE ...
- windows10个性化设置
任务栏DIY 日期显示样式 字体
- SSH不能连接虚拟机中的Ubuntu
设置 网络 既然要远程ubuntu的系统.那么首先是两个网络是不是在一个网段.能不能ping的通? a) Windows电脑上--cmd 打开命令窗口.键入:ipconfig 命令.查看主机IP. b ...
- CGLIB介绍与原理(通过继承的动态代理)
一.什么是CGLIB? CGLIB是一个功能强大,高性能的代码生成包.它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充.通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接 ...
- MFC 错误异常,用vs添加资源并为资源定义类后报错:error C2065 : 未声明的标识符
添加了一个Dialog资源,修改了ID之后右击资源添加了一个类,在类里面有一个成员变量: // 对话框数据 enum { IDD = IDD_GETIN }; 而在编译过程中出现报错,错误代号是 ...
- linux 文件系统基本结构
1.Linux文件系统为一个倒转的单根树状结构 2.文件系统的根为"/" 3.文件系统严格区分大小写 4.路径使用"/",与Windows使用"\&q ...