Java精选笔记_集合【List(列表)接口】
List(列表)接口
简介
List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。
元素是有序的,即元素的存入顺序和取出顺序一致,元素可以重复,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。
ArrayList al=new ArrayList();
增加 : al.add();
在指定位置添加:al.(index,"");
删除指定位置元素:al.remove(index);
修改元素:al.set(index,"");
通过角标获取元素:al.get(index);
获取所有元素
for(int x=0;x<al.size();x++) {
al.get(x);
}
Iterator it=al.iterator();
while(it.hasNext()) {
it.next();
}
通过indexof获取对象的位置:al.indexof("字符串");
获取列表中两个位置之间的数,返回List:List sub=al.subList(1,3) 返回角标1和3之间的数
在迭代集合过程中,不能对集合进行其他操作,如添加删除等,这时就需要迭代器可以对迭代器的对象进行操作,但是由于Iterator迭代器只有 remove功能,所以建议使用其子接口ListIterator,它具备删除 remove 添加 add 修改 set 等功能,但此功能是List特有的
ListIterator列表迭代器:是List集合特有的迭代器,是Iterator的子接口。可以对集合列表进行各种操作。
ListIterator it=a1.ListIterator();
while(it.hasNext()) { //正向遍历
it.next();
it.set(); //修改
}
//逆向遍历
it.hasPrevious;
ArrayList集合
ArrayList是List接口的一个实现类,它是程序中最常见的一种集合,是对AbstractList类的扩展
三种构造方法
ArrayList()方法:建立一个空的数组列表
ArrayList(Collection c):方法建立一个数组列表,该列表由类c中的元素初始化
ArrayList(int initialCapacity):方法建立一个数组列表,该数组有指定的初始化容量(capacity)
主要方法
public boolean add(E o)
将指定的元素追加到列表的最后
public void add(int index,E element) 将参数element表示的元素插入此列表中参数index表示指定位置中
public boolean addAll(Collection c) 将Collection中所有元素追加到此列表的尾部
public void clear() 删除列表中的所有元素
public boolean contains(Object elem) 判断此列表是否包含参数elem表示的指定元素
public get(int index) 返回列表中指定位置上的元素
public boolean isEmpty() 判断此列表中有没有元素
public remove(int index) 删除列表中指定位置上的元素
public set(int index, E element) 用参数element表示指定的元素代替列表中指定位置上的元素。
public int size() 返回列表中的元素数
public Object[] toArray() 返回一个包含列表中所有元素的数组
public T[] toArray(T[] a) 返回一个包含列表中所有元素的数组
void trimToSize() 将容量调整为该列表的当前大小
在ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。
ArrayList集合中大部分方法都是从父类Collection和List继承过来的,其中add()方法和get()方法用于实现元素的存取。
底层使用是的数组结构。特点:查询速度很快,但是增删稍慢。 同步的
创建集合容器
ArrayList al=new ArrayList ();
//1.添加元素:
a1.add("");
a1.add("");
//2.获取长度,集合个数
a1.size();
//3.删除元素
a1.remove();
//4.清空集合
a1.clear();
//5.判断
a1.contains() 是否包含
a1.isEmpty() 是否为空
//6.取交集
a1.retainAll(a2); 取两个集合中交集的元素。
LinkedList集合
LinkedList克服了ArrayList集合在查询元素时速度很快,但在增删元素时效率较低的局限性。是对AbstractSequentialList类的扩展。
该集合内部维护了一个双向循环链表,链表中的每一个元素都使用引用的方式来记住它的前一个元素和后一个元素,从而可以将所有的元素彼此连接起来。
当插入一个新元素时,只需要修改元素之间的这种引用关系即可,删除一个节点也是如此。
底层使用的是链表结构。特点:增删速度快,但是查询稍慢 不同步
两种构造方法
LinkedList()方法 建立一个空的链接列表
LinkedList(Collection c)方法 建立一个链接列表,该列表由类c中的元素初始化
特有方法
add(int index,E element) 指定位置插入指定的元素
addFirst(); 往前添加
addlast(0; 往后添加
getFirst(); 获取头值,永远是第一个值
getLast(); 获取尾值
removeFirst(); 删除并返回头元素 出现NuSuchElementException异常
removeLast(); 删除并返回尾元素
jdk1.6中出现了替代方法:
添加
offerFirst()
offerlast()
获取
peekFirst()
peekLast()
删除
pollfirst()
polllast()
LinkedList llist=new LinkedList();
Vector集合
Vertor是List接口的一个实现类,用法与ArrayList完全相同,区别在于Vector集合是线程安全的,而ArrayList集合是线程不安全的。
在Vector类中提供了一个elements()方法用于返回Enumeration对象,通过Enumeration对象就可以遍历该集合中的元素。
底层使用是的数组结构。是同步的
Vector v=new Vector();
v.add();
v.add();
Enumeration en=new Enumeration();
while(en.hasMoreElements()) {
en.nextElement();
}
构造方法
Vector()方法 构造一个原始大小为10的默认矢量
Vector(int size)方法 构造一个原始大小由size指定的矢量
Vector(int size,int incr)方法 构造一个矢量原始大小由size指定,并且增量由incr指定
Vector(Collection c)方法 构造一个包含了类集c中元素的矢量
所有的矢量开始都有一个原始的容量。在这个原始容量达到之后,下次再存储时,矢量会自动为那个对象分配空间。通过分配超过需要的内存,矢量减小了可能产生的分配的次数,节约了时间。
增加元素的方法
public void addElement( Object obj )
将指定的组件添加到该向量的末尾,并将其大小增加1
public void addElement( int index,Object obj )
在向量的指定位置插入指定的元素obj,该位置及以后的元素位置后移
public void insertElementAt( Object obj,int index )
将指定对象作为此向量中的组件插入到指定的index处
stack类
stack类是Vector的一个子类,它实现标准的后进先出堆栈。Stack仅仅定义了创建空堆栈的默认构造方法。Stack()方法
Stack类包括了Vector类定义的所有方法,同时增加了几种它自己定的方法
public E push(Object item) 将元素引用压入栈顶
public E pop() 删除栈顶元素。栈为空则会抛出EmptyStackException异常
public E peek() 取得栈顶元素但不删除它。如果栈为空则会抛出EmptyStackException异常
public boolean empty() 判断堆栈是否为空
public int search(Object o) 返回Object对象在栈中所处的位置。其中栈顶元素位置为1,以后依次递增1。如果对象不在栈中则返回-1
在栈的操作中,先压入栈的元素在栈的最底部,删除元素是从栈顶开始的。也就是最后压入栈的元素将会被先删除掉。
Dictionary类
字典(Dictionary)是一个表示关键字/值存储库的抽象类,同时它的操作和映射(Map)很类似。
Dictionary类已经被Map类所取代,已过时。
Iterator接口
用于迭代访问(即遍历)Collection中的元素,因此Iterator对象也被称为迭代器。
Iterator可以完成通过循环输出类集内容,从而获得或删除元素
Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素
集合取出元素的方式(通过迭代方法访问类集)
Iterator it = a1.iterator();
while(it.hasNext()) {
it.next();
}
方法
void add(Object obj)
将Obj插入列表中的一个元素前,该元素在下一次调用next()方法时被返回
boolean hasNext() 如果存在下一个元素,则返回true,否则返回false
boolean hasPrevious() 如果存在前一个元素,则返回true,否则返回false
Object next() 返回下一个元素,如不存在,引发一个NoSuchElementException异常
int nextIndex() 返回下一个元素的下表,如果不存在下一个元素,则返回列表的大小
Object previous() 返回前一个元素,如不存在,引发一个NoSuchElementException异常
void remove() 从列表中删除当前元素
void set(Object obj) 将obj赋给当前元素。即上一次调用next()方法或previousfangfa后返回的元素
ListIterator接口
对Iterator的扩展,允许双向遍历列表,并且可以修改单元。
Iterator迭代器提供了hasNext()方法和next()方法,通过这两个方法可以实现集合中元素的迭代,迭代的方向是从集合中的第一个元素向最后一个元素迭代,也就是所谓的正向迭代。
为了使迭代方式更加多元化,JDK中还定义了一个ListIterator迭代器,它是Iterator的子类,该类在父类的基础上增加了一些特有方法。
Java精选笔记_集合【List(列表)接口】的更多相关文章
- Java精选笔记_集合概述(Collection接口、Collections工具类、Arrays工具类)
集合概述 集合有时又称为容器,简单地说,它是一个对象,能将具有相同性质的多个元素汇聚成一个整体.集合被用于存储.获取.操纵和传输聚合的数据. 使用集合的技巧 看到Array就是数组结构,有角标,查询速 ...
- Java精选笔记_集合【Map(映射)接口】
Map(映射)接口 简介 该集合存储键值对,一对一对的往里存,并且键是唯一的.要保证map集合中键的唯一性. 从Map集合中访问元素时,只要指定了Key,就能找到对应的Value. 关键字是以后用于检 ...
- Java精选笔记_集合【Set(集合)接口】
Set(集合)接口 简介 同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了. ...
- Java精选笔记_面向对象(包、访问控制、内存机制、垃圾回收机制)
包 包的定义与使用 专门用来存放类的,通常功能相同的类存放在相同的包中. 包的声明只能位于Java源文件的第一行 Java语言中的常用包 java.lang:包含Java语言的核心类,如String. ...
- Java精选笔记_文件上传与下载
文件上传与下载 如何实现文件上传 在Web应用中,由于大多数文件的上传都是通过表单的形式提交给服务器的,因此,要想在程序中实现文件上传的功能,首先得创建一个用于提交上传文件的表单页面. 为了使Serv ...
- Java精选笔记_国际化
国际化 什么是国际化 指软件在开发时就应该具备支持多种语言和地区的功能,当应对不同国家和地区的用户访问,针对不同国家和地区的用户,提供相应的.符合来访者阅读习惯的页面和数据. 由于国际化interna ...
- Java精选笔记_自定义标签
自定义标签 自定义标签入门 什么是自定义标签 自定义标签可以有效地将HTML代码与Java代码分离,从而使不懂Java编程的HTML设计人员也可以编写出功能强大的JSP页面 JSP规范中定义了多个用于 ...
- Java精选笔记_会话技术
会话及其会话技术 会话概述 指的是一个客户端(浏览器)与Web服务器之间连续发生的一系列请求和响应过程. 会话:从浏览器开启到浏览器关闭.会话技术:用来保存在会话期间 浏览器和服务器所产生的数据. 在 ...
- Java精选笔记_其他IO流(ObjectInputStream、DataInputStream、PrintStream、标准输入输出流)
其他IO流 ObjectInputStream和ObjectOutputStream 如果希望永久将对象转为字节数据写入到硬盘上,即对象序列化,可以使用ObjectOutputStream(对象输出流 ...
随机推荐
- centos7 ping: www.baidu.com: Name or service not known
[root@www ~]# ping www.baidu.com ping: www.baidu.com: Name or service not known [root@www ~]# 1.网络配置 ...
- LeetCode: Longest Valid Parentheses 解题报告
Longest Valid Parentheses Given a string containing just the characters '(' and ')', find the length ...
- java 多线程8 : synchronized锁机制 之 方法锁
脏读 一个常见的概念.在多线程中,难免会出现在多个线程中对同一个对象的实例变量或者全局静态变量进行并发访问的情况,如果不做正确的同步处理,那么产生的后果就是"脏读",也就是取到的数 ...
- linux的一些软件基本安装
买了个腾讯云的服务器,开始玩起来了,先装环境吧. JAVA安装 安装个java yum -y install java-1.7.0-openjdk* 查看java版本 java -version 可以 ...
- linux命令--vi,vim
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件.并将光标置于第n行首 vi + filename :打开文件.并将光标置 ...
- C语言 · 龟兔赛跑预测
基础练习 龟兔赛跑预测 时间限制:1.0s 内存限制:512.0MB 锦囊1 模拟. 问题描述 话说这个世界上有各种各样的兔子和乌龟,但是研究发现,所有的兔子和乌龟都有一个共 ...
- Java基本功—Reference
这是一篇一年多之前便已写就的文章,那时,因为很多Java程序员只求追随新生的事物,却连基本的概念都没有,很多讨论中,很明显是基本功不过硬,于是萌生写一个系列文章,讨论Java的基本功,下面便是在这个想 ...
- Android——进度条控制图片透明度
xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...
- linux并发concurrency控制
解决竞态(race conditions)最根本的途径是对共享资源的互斥访问,访问共享资源的代码区被称为临界区(critical sections),对临界区的代码需要以某种互斥机制加以保护.常见的互 ...
- 机器学习:Mean Shift聚类算法
本文由ChardLau原创,转载请添加原文链接https://www.chardlau.com/mean-shift/ 今天的文章介绍如何利用Mean Shift算法的基本形式对数据进行聚类操作.而有 ...