JAVA基础之List接口
个人理解:
list接口是Collection接口的子类,其继承了Collection接口的所有方法,但也有其独有的方法,不过在迭代的时候不要进行任何操作。牢记数据存储的四种结构:堆栈、队列、数组、链表,并指导其区别和适合用于什么场景下。特别注意的是LinedList接口中判断是否为空的时是判断的里面元素是否为空,只有当定义的时候(new)为Null才表示该集合不存在的,是空指针异常的。至于Vector集合,了解其被ArrayList代替了,其迭代方法(枚举:Enumeration)被Iterator代替。
一、List接口介绍:
1、List接口是Collection接口的子类;
2、它是一个元素存取有序的集合(不是正序和倒序的,是怎么存就怎么取);
3、它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组中的索引是一个道理);
4、集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素;
5、常用的子类有:ArrayList集合、LinkedList集合。
二、LIst集合中常用的方法:
import java.util.ArrayList;
import java.util.List; public class Demo01 {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("123");
list.add("abs");
//指定位置插入
list.add(1,"456");
//删除指定位置的元素
String s=list.remove(1);
System.out.println("删除的元素为:"+s);
//替换指定位置上的元素
String str=list.set(0, "小明");
System.out.println("替换的元素为:"+str);
//遍历
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}
}
1、增加元素方法
①、 add(Object e):向集合末尾处,添加指定的元素
②、add(int index, Object e):向集合指定索引处,添加指定的元素,原有元素依次后移
二、 删除元素删除
①、 remove(Object e):将指定元素对象,从集合中删除,返回值为被删除的元素
②、 remove(int index):将指定索引处的元素,从集合中删除,返回值为被删除的元素
三、替换元素方法
①、set(int index, Object e):将指定索引处的元素,替换成指定的元素,返回值为替换前的元素
四、 查询元素方法
①、 get(int index):获取指定索引处的元素,并返回该元素
三、Iterator的并发修改异常:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; public class Demo02 {
public static void main(String[] args) {
List<String> arr=new ArrayList<String>();
arr.add("a");
arr.add("b");
arr.add("c");
//遍历时判断是否有b,有的话添加个d
//获取迭代器对象
Iterator<String> it=arr.iterator();
while(it.hasNext()){
String s=it.next();
if(s.equals("b")){
arr.add("d");
}
}
}
}
运行时会出现 java.util.ConcurrentModificationException!
解决办法:在迭代时,不要使用集合的方法操作元素;
那么想要在迭代时对元素操作咋办?通过ListIterator迭代器操作元素是可以的,ListIterator的出现,解决了使用Iterator迭代过程中可能会发生的错误情况。
四、List集合存储数据的结构:
数据存储的常用结构:堆栈、队列、数组、链表。
1、堆栈:
先进后出(堆栈的入口、出口都是堆栈的顶端位置);存元素为压栈,取元素为弹栈。
2、队列:
先进先出(队列的入口、出口各占一侧)。
3、数组(长度不可变):
查找元素快(通过索引)、增删元素慢(需要创建新的数组)。
4、链表(多个节点之间,通过地址进行连接):
查找元素慢(需要通过连接的节点,一次向后查找)、增删元素快

五、ArrayList集合:
ArrayList集合数据存储的结构是数组结构(适合查询的时候用);
六、LinkedList集合:
LinedList集合数据存储的结构是链表结构(适合增删的时候用);
import java.util.LinkedList;
public class Demo03 {
public static void main(String[] args) {
LinkedList<String> arr=new LinkedList<String>();
arr.addFirst("a");
arr.addFirst("b");
arr.addLast("c");
arr.addLast("d");
/*for(String s:arr){
System.out.println(s);
}*/
//获取集合中第一个元素
System.out.println("集合中第一个元素为:"+arr.getFirst());
//获取最后一个
System.out.println("集合中最后一个元素为:"+arr.getLast());
//删除第一个
arr.removeFirst();
arr.removeFirst();
//删除最后一个
arr.removeLast();
for(String s:arr){
System.out.println(s);
}
//集合里不为空时打印
if(!arr.isEmpty()){
System.out.println("该集合不为空");
}
}
}
七、Vector集合
Vector集合数据存储的结构是数组结构,为JDK中最早提供的集合。Vector中提供了一个独特的取出方式,就是枚举Enumeration,它其实就是早期的迭代器。此接口Enumeration的功能与 Iterator 接口的功能是类似的。
Vector集合已被ArrayList替代。枚举Enumeration已被迭代器Iterator替代。
JAVA基础之List接口的更多相关文章
- Java基础-通过POI接口处理xls
Java基础-通过POI接口处理xls 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-Collection子接口之Set接口
Java基础-Collection子接口之Set接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学习Collection接口时,记得Collection中可以存放重复元素,也可 ...
- Java基础-Collection子接口之List接口
Java基础-Collection子接口之List接口 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们掌握了Collection接口的使用后,再来看看Collection接口中 ...
- 《Java基础——抽象与接口》
Java基础--抽象与接口 一.抽象: 规则: 关键字 abstract 修饰的类称为抽象类. 子类通过关键字extends实现继承. 关键字 abstract 修饰的方法称为抽象方法,抽 ...
- Java 基础三、接口与内部类
1. 在Java程序语言中,接口是对类的一种描述.例如Arrays类中sort方法声明可以对对象进行排序,但前提是对象所属的类必须实现Comparable接口. public interface ...
- Java基础—抽象类和接口
1.抽象类 在Java语言中使用abstrac关键字来定义抽象类和抽象方法,抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号. public abstract class Employee { ...
- java基础(十三)之接口
接口 什么是接口? 生活中也有很多的接口,比如USB接口.定义了接口就是定义了调用对象的标准. 接口基本语法 1.使用interface定义:2.接口当中的方法都是抽象方法:因为抽象函数不能生成对象, ...
- java基础-抽象类与接口(转)
抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念的支持有很大的相似,甚至可以互换,但是也有区别. 一.抽象类 ...
- Java基础——抽象类和接口
之所以将抽象类和接口放在一起做笔记,是因为他们之间很难区分又各自独立.在学习完Java程序设计的三大特点(封装.继承.多态)之后,我最大的收获是,慢慢理解了Java语言这种面向对象程序设计的优越性,它 ...
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
随机推荐
- django 开发之模型以及静态问题和图片的使用
使用Django的模型,基本步骤: 1.创建model 2.加入到admin.py中去 3.执行生成迁移:python manage.py makemigrations blog 4.执行迁移,生成表 ...
- MySQL基础9-主键约束、外键约束、等值连接查询、一对一和多对多关系
1.主键约束和外键约束 外键约束 * 外键必须是另一表的主键的值(外键要引用主键!) * 外键可以重复 * 外键可以为空 * 一张表中可以有多个外键! 概念模型在数据库中成为表 数据库表中的多对一关系 ...
- wim
wim 编辑 WIM是英文Microsoft Windows Imaging Format(WIM)的简称,它是Windows基于文件的映像格式.WIM 映像格式并非现在相当常见的基于扇区的映像格式, ...
- 设计模式之第4章-装饰模式(Java实现)
设计模式之第4章-装饰模式(Java实现) “怎么了,鱼哥?” “唉,别提了,网购了一件衣服,结果发现和商家描述的差太多了,有色差就算了,质量还不好,质量不好就算了,竟然大小也不行,说好的3个X,邮的 ...
- 移动弱网测试方案Network Emulator for Windows Toolkit
移动app在测试时,有时需要考虑弱网的情形下,app的表现,那么怎么营造这样子的环境呢? 一.首先需要控制网络,有两种方式其一使用网络损伤仪进行,其二采用软件方式.硬件采购费用太贵,因此使用win平台 ...
- Unity 3D 的四种坐标系
1, World Space(世界坐标): 我们在场景中添加物体(如:Cube),他们都是以世界坐标显示在场景中的.transform.position可以获得该位置坐标. 2, Screen Spa ...
- node中fileSystem改promise
请注意,fs的大部分函数回调只会返回一个error参数,所以只要判断error为false的情况下就返回成功,无论有没有第二个参数. 另外exists需要单独包装,因为第一个参数就代表返回内容 con ...
- 【转】超简单利用UGUI制作圆形小地图
http://sanwen.net/a/ithhtbo.html 由于UI都是Achor自己用PS做的,比较粗糙,大家见谅,不过丝毫不影响功能的实现,下面我们看看今天的笔记: 首先我们看看需要哪些组件 ...
- Tomcat网站根目录的配置
在</Host>前插入: <Host> … … <Context path="" docBase="E:\Users\Administrat ...
- 【转】 Linux中记录终端输出到txt文本文件
转载: http://blog.csdn.net/tengh/article/details/41823883 一,把命令运行的结果保存到文件当中:用 > 把输出转向就可以了 例子: $ ls ...