集合之四: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 ...
随机推荐
- jsp页面数据分页模仿百度分页效果
<%@page import="web09.shop.DBUtil"%> <%@page import="java.sql.ResultSet" ...
- [模板]KMP字符串匹配
洛谷P3375 注意:两次过程大致相同,故要熟读熟记,切勿搞混 可以看看其他的教程:http://www.cnblogs.com/c-cloud/p/3224788.html 本来就不太熟,若是在记不 ...
- tp5 whereOr
题目:查询grade=1 or class=2 or sex=3的学生 $condition[; $condition[; $condition[; $list =Db::name($this-> ...
- es学习-java操作 2.4.0版本
package esjava; import org.elasticsearch.action.bulk.*;import org.elasticsearch.action.delete.Delete ...
- up7-文件保存位置
asp.net 默认位置:项目/upload/年/月/日/guid/ 代码截图: 位置截图: jsp 默认位置:tomcat/webapps/Uploader7Oracle/upload/年/月/ ...
- Android编程设置LayoutParams
RelativeLayout.LayoutParams linearParams = (RelativeLayout.LayoutParams)viewHolder.headerWraper.getL ...
- struts整合dropzone.js上传图片遇到的点问题
问:struts后台无法获取文件对象和文件名称? 答:1. 到dropzone.js搜索"return xhr.send(formData);" 2. 在它前面有个这么句代码: f ...
- 【小梅哥FPGA进阶教程】MC8051软核在FPGA上的使用
十.MC8051软核在FPGA上的使用 本教程内容力求以详细的步骤和讲解让读者以最快的方式学会 MC8051 IP core 的应用以及相关设计软件的使用,并激起读者对 SOPC 技术的兴趣.本实验重 ...
- 查看Linux系统是32位的还是64位的
方法1: getconf LONG_BIT 上面显示我先用的是32位的系统. 方法2: .uanme -a .uname -m 显示i686或x86就是32位的系统,显示x86_64就是64位系统. ...
- Centos配置多个tomcat服务器,并用nginx实现负载均衡
centos配置tomcat请参见上一篇博文 :http://www.cnblogs.com/nanyangzp/p/4897655.html 一:多tomcat利用不同端口开启服务器 多个tomca ...