JAVA学习第三十四课(常用对象API)- 集合框架(二)—List集合及其子类特点

整个集合框架中最常用的就是List(列表)和Set(集)

一、List集合 && Set的特点

Collection的子接口:

1、List:有序(存入和取出的顺序一致),元素都有索引且可以重复

   API文档解释:有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

2、Set:元素不能重复,无序,有可能会有序

   API文档解释:一个不包含重复元素的 collection。更确切地讲,set 不包含满足
e1.equals(e2) 的元素对 e1e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的
set 抽象。

....

根据问题需要使用对应的容器

二、List常见方法

因为是Collection的子类,只演示其特有方法

1.添加
	void add(index,element)
	void add(index,Collection)
2.删除
	Object remove(index)
3.修改
	Object set(index,element)
4.获取
	Object get(index)
	int indexOf(Object)
	int lastIndexOf(Object)
	List subList(from,to)//含头,不含尾

代码演示

import java.util.ArrayList;
import java.util.List;

public class Main
{
	public static void main(String[] args)
	{
		List list = new ArrayList();//注意LIst的包不要导入错误,java.awt中也有个List
		show(list);
	}
	public static void show(List list)
	{
		//添加
		list.add("a1");
		list.add("a2");
		list.add("a3");
		System.out.println("List = "+list);

		//添加元素
		//list.add(2,"a250");

		//删除元素
		//list.remove(2);

		//修改(Collection不具备修改)
		//list.set(2, "a25");

		//获取
		//list.get(1);
		//System.out.println("list = "+list.get(1));

		//获取子列表
		List LL = list.subList(0, 2);//含头,不含尾
		System.out.println("ZI List = "+LL);

	}
}

由上可见,List的特有的常见方法有一个共性就是都可以操作角标->增删改查

三、ListIterator接口:List特有

   API文档解释:系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。

ListIterator迭代器,是为了处理迭代器迭代和集合操作出现并发修改时,出现的异常问题

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class Main
{
	public static void main(String[] args)
	{
		List list = new ArrayList();
		//show(list);
		ListIteratorDemo(list);
	}
	public static void ListIteratorDemo(List list)
	{
		list.add("a1");
		list.add("a2");
		list.add("a3");

		//Iterator it = list.iterator();//此时的it只知道当前状态的list的内部数据结构的存储方式
		//所以下述代码会抛出异常,因为后来list结构变化了,it不知道
		/*while(it.hasNext()) {
			Object object = it.next();
			if (object.equals("a2")) {
				list.add("a250");//ConcurrentModificationException
				//此异常的原因是:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
			}
			else {
				System.out.println(object);
			}
		}*/

		//解决:迭代和集合同时访问造成了并发,所以集合操作的时候不迭代,迭代的时候不使用集合操作
		System.out.println("Old List :"+list);
		ListIterator iterator = list.listIterator();
		//list特有迭代器,可以实现在迭代过程中完成对元素的增删改查
		/*listIterator(int index)
          返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。*/
		while (iterator.hasNext()) {
			Object object = iterator.next();
			if(object.equals("a2")){
				iterator.add("a250");//注意此处就不用list,而是使用的迭代器,避免并发
			}
		}
		System.out.println("New List:"+list);
		//System.out.println("hasNext? "+iterator.hasNext());
		//System.out.println("hasPrevious? "+iterator.hasPrevious());
		while(iterator.hasPrevious())
		{
			System.out.println(iterator.previous());
		}
	}
}

四、List常用子类特点

1.Vector:内部是数组结构,且同步,增删慢,查询慢

    API文档解释:Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建
Vector 后进行添加或移除项的操作。

2.ArrayList:内部是数组结构,不同步替代了Vector,查询速度快

   API文档解释:List 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括
null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于
Vector 类,除了此类是不同步的。)

3.LinkedList:内部是链式存储结构,不同步,增删速度快

   API文档解释:List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括
null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 getremove
insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。

时间: 2024-08-07 17:01:28

JAVA学习第三十四课(常用对象API)- 集合框架(二)—List集合及其子类特点的相关文章

JAVA学习第三十四课 (经常使用对象API)—List集合及其子类特点

整个集合框架中最经常使用的就是List(列表)和Set(集) 一.List集合 && Set的特点 Collection的子接口: 1.List:有序(存入和取出的顺序一致),元素都有索引且能够反复    API文档解释:有序的 collection(也称为序列).此接口的用户能够对列表中每一个元素的插入位置进行精确地控制.用户能够依据元素的整数索引(在列表中的位置)訪问元素,并搜索列表中的元素. 2.Set:元素不能反复,无序,有可能会有序    API文档解释:一个不包括反复元素的 c

JAVA学习第三十九课(常用对象API)- 集合框架(七)— Map集合及其子类对象

一.Map集合常见子类 HashTable:内部结构是哈希表,同步,此实现提供所有可选的映射操作,不允许使用 null 值和 null 键 (HashTable下有子类Properties,使用频率非常高,用来存储键值对型的配置文件信息和IO技术相结合) HashMap:内部结构是哈希表,不同步,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键. TreeMap:内部结构是二叉树,不同步,可以对Map集合中的键进行排序. 二.HashMap演示 import java.ut

JAVA学习第三十六课(常用对象API)- 集合框架(四)— Set集合:HashSet集合演示

随着Java学习的深入,感觉大一时搞了一年的ACM,简直是明智之举,Java里很多数据结构.算法类的东西,理解起来就轻松多了 Set集合下有两大子类开发常用 HashSet集合 .TreeSet集合 Set集合的元素是不重复且无序 一.HashSet集合 API文档解释:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用null 元素. 此类为基本操作提供了稳定性能,注意,此实现不是同步的. 由上可

JAVA学习第三十五课(常用对象API)- 集合框架(三)—Vector、LinkedList、ArrayList集合演示

集合框架构成图 摘自百度图片 一.Vector集合 演示 虽然Vector已经不常用了,但是还是要了解一下其中的方法 import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; import java.util.Vector

JAVA学习第三十八课(常用对象API)- 集合框架(六)— Map集合及其常用方法

一.Map集合特点 Map集合(双列集合)一次添加一对元素,Collection集合(单列集合)一次添加一个元素 接口 Map<K,V>,实际上存储的是键值对 特点: 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 也就是说Map中必须保证键的唯一性 二.常用方法 1.添加:value = put(key,value);返回前一个和key相关联的值,如果没有返回null 2.删除:void clear();把Map中的所有映射关系清除 value remove(ke

JAVA学习第六十四课 — 反射机制

   Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制,简单说:能动态获取类中的信息(类中所有),就是java的反射,也可以理解为对类的解剖 反射机制的基本应用场景:    比如一个程序的应用程序(TomCat),为了提高其扩展性,会对外暴露一个接口,在外部定义一个类实现这个接口,但是在应用程序内部无法new对象,所以应用程序会提供一个配置

JAVA学习第五十四课 — IO流(八)打印流 &amp; 序列流

一.综合练习-文件清单列表 获取指定目录下,指定扩展名的文件(含子目录),并将这些文件的绝对路径写到一个文本文件中.也就是建立一个指定扩展名的文件列表 1.深度遍历 2.过滤器->容器 3.写入文件 import java.util.List; import java.io.*; import java.util.ArrayList; public class Main { public static void main(String[] args) throws IOException { F

JAVA学习笔记(三十四)- 字节打印流 PrintStream

PrintStream字节打印流 import java.io.BufferedReader; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; import java.io.Reader; /* * Pri

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没