我们掌握了Collection接口的使用后,再来看看Collection接口中的子接口和实现类,他们都具备那些特性呢?

接下来,我们一起学习Collection中的常用几个子接口:

​   java.util.List 集合接口

  ​ java.util.Set 集合接口

List接口特点

  • List接口底层维护的是可变数组,集合中的每个元素都有对应的索引,通过索引就可以精确的操作集合中的元素。

  • 它是一个元素存取有序的集合。可以保证元素的存取顺序。

  • 它是一个可以保存重复元素的集合,通过元素的equals方法。

List接口的成员方法

List接口继承了父接口Collection中的所有方法,并且因为List底层维护的是可变数组,所以有自己的特有方法

  • public void add(int index, E element): 将指定的元素,添加到该集合的指定下标位置。

  • public E get(int index):返回集合中指定下标对应的元素。

  • public E remove(int index): 移除集合中指定下标对应的元素, 返回的是被移除的元素。

  • List接口中有重载的remove()方法,如果参数给定的为int类型,则调用的为List接口中特的方法。

  • public E set(int index, E element):用指定元素替换集合中指定下标的元素,返回被替换的元素。

步骤

  1. 创建集合测试类

  2. 使用多态的方式newList接口的实现类对象

  3. 使用List接口中的特有方法,对集合进行增删改查等操作。

 public class ListDemo {
public static void main(String[] args) {
// 创建List集合对象
List<String> list = new ArrayList<>();
// 给集合中添加原始数据
list.add("西游记");
list.add("红楼梦");
list.add("水浒传");
list.add("三国演义");
System.out.println(list);
// 使用List集合特有的指定具体下标添加元素的方法
list.add(1,"天龙八部");
list.add(3,"射雕英雄传");
System.out.println(list); // 使用List集合的特有方法,获取指定下标对应的元素
String s = list.get(1);
System.out.println("s = " + s); // 使用List集合的特有方法,修改指定下标对应的元素
String set = list.set(1, "神雕侠侣");
System.out.println("set = " + set); // 返回的数据为修改前的数据 /*
使用List集合特有的方法,删除指定下标对应的数据。并返回被删除的数据。
注意:在List接口中有重载的remove()方法存在。如果给定的参数为整数,
则默认调用List接口中的remove方法。
Collection: remove(Object obj )删除指定的元素
List: remove(int index )删除指定下标对应的元素
*/
String remove = list.remove(1);
System.out.println("remove = " + remove);
}
}

List集合接口的特点为可以保存重复的元素,并且可以保证元素的存取顺序。因为集合底层使用的可变数组,所有List集合接口中的特有方法都是围绕下标进行操作的。

List集合的遍历

  因为List集合有下标,所以遍历的方式比较多。

  • List集合继承Collection集合,所以可以直接使用Iterator对List集合进行遍历。

  • 高级for循环底层使用的迭代器,所以List集合也可以使用高级for循环遍历。

  • 因为List集合中的元素都有下标,而List集合中有基于下标获取对应元素的方法,所以List集合也可以使用普通for循环进行遍历。

  • 注意:因为List集合有下标,所以List集合中有一个特有的迭代器ListIterator,可以通过特有方法listIterator()获取,因为并不常用,所以自行测试即可。

步骤

  1. 创建List集合对象

  2. 给集合中添加一些数据

  3. 分别使用3种不同的方式,遍历List集合中的数据

 public class Demo {
public static void main(String[] args) {
// 创建List集合对象
List<String> list = new ArrayList<>();
// 给集合中添加数据
list.add("西游记");
list.add("红楼梦");
list.add("水浒传");
list.add("三国演义"); // 使用迭代器对集合进行遍历
for(Iterator<String> it = list.iterator(); it.hasNext(); ) {
System.out.println( it.next() );
}
// 使用高级for循环,遍历集合
for( String next : list ) {
System.out.println(next);
} // 使用普通for循环遍历集合
for( int i = 0; i < list.size();i++ ) {
System.out.println(list.get(i));
}
}
}

小结

List集合是Collection集合的子接口,因此是可以使用迭代器和高级for循环进行遍历的。而因为List集合有下标,所以也可以通过下标来获取集合中的每一个数据。

因为在使用迭代器对集合操作的同时不能使用集合本身的方法在对集合进行操作。所以List集合在非遍历操作的情况下,一般都是使用普通for循环进行遍历。

ArrayList集合

简单说一下ArrayList的底层就可以了,具体用法和List一样

  Array List的底层是数组 , 数组的特性就是 查询快  增删慢 , 因为数组是有下标的每个数据都会对应有一个自己的下标.

LinkedList集合

java.util.LinkedList集合数据存储的结构是双向链表结构。所以可以保证元素的存取顺序。链表结构有表头和表尾,特有方法都是围绕头和尾进行操作的。特点 : 增删慢,查找快

linkedList特有成员方法

实际开发中对一个集合元素的添加与删除有时会涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。

  • public void addFirst(E e):将指定元素插入此列表的开头。

  • public void addLast(E e):将指定元素添加到此列表的结尾。

  • public E getFirst():返回此列表的第一个元素。

  • public E getLast():返回此列表的最后一个元素。

  • public E removeFirst():移除并返回此列表的第一个元素。

  • public E removeLast():移除并返回此列表的最后一个元素。

  • public E pop():从此列表所表示的堆栈处弹出一个元素。

  • public boolean isEmpty():如果列表不包含元素,则返回true。

 public class LinkedListDemo {
public static void main(String[] args) {
// 创建LinkedList集合对象
LinkedList<String> list = new LinkedList<>();
// 特有方法给集合头尾添加元素
list.addFirst("abc");
list.addFirst("bcd");
list.addFirst("cde");
list.addFirst("def");
System.out.println(list); // 特有方法获取集合头尾的元素
String first = list.getFirst();
System.out.println("first = " + first); // 特有方法删除集合中的元素
String removeFirst = list.removeFirst();
System.out.println("removeFirst = " + removeFirst);
System.out.println(list); // 特有方式遍历集合
/* while( !list.isEmpty() ) {
String pop = list.pop();
System.out.println(pop);
}*/
// 使用removeFirst()方法代替pop()方法
while( !list.isEmpty() ) {
String s = list.removeFirst();
System.out.println(s);
}
}
}

JavaSE List集合的更多相关文章

  1. JavaSE笔记-集合

    Java集合大致可分为:List,Set,Map,Queue List:有序,可重复 Set:无序(输出和插入顺序不一定一致),不可重复 Map:映射关系,根据key去访问value Queue:队列 ...

  2. JavaSE Map集合

    Map集合 在Map集合中保存的数据为一组数据,其中:一个数据为key,另外一个数据为value.而key和value具备对应的关系,在集合中它们属于一组(一对)数据.而每个key只能对应唯一的一个v ...

  3. JavaSE Set集合

    明确Set集合接口的特点. java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collec ...

  4. JavaSE Collection集合

    集合:是java中提供的一种容器,可以用来存储多个对象.可是我们前面学习的数组也是可以保存多个对象的,为什么还要提供集合容器呢?集合和数组它们有啥区别呢? 数组的长度是固定的.一旦创建完成不能改变长度 ...

  5. Javase之集合体系(4)之Map集合

    集合体系之Map集合 ##Map<K,V>( 接口 ) 特点:将键映射到值对象,一个映射不能包含重复的键:每个键只能映射一个值 Map集合与Collection集合的区别 ​ Map集合存 ...

  6. Javase之集合体系(2)之List及其子类ArrayList,LinkedList与Vector及其迭代器知识

    集合体系之List及其子类ArrayList,LinkedList与Vector及其迭代器知识 List(接口) 特点:有序(存储与取出顺序相同),可重复 List子类特点: ​ ArrayList: ...

  7. Javase之集合体系(3)之Set及其子类知识

    集合体系之Set及其子类知识 Set(接口) public interface Set<E>extends Collection<E> ​ 特点:无序(存储顺序与取出顺序不一致 ...

  8. Javase之集合泛型

    集合泛型知识 泛型 是一种把类型明确工作推迟到创建对象或者调用方法的时候才明确的特殊类型. 也称参数化类型,把类型当成参数传递. 在jdk1.5中出现.一般来说经常在集合中使用. 格式 <数据类 ...

  9. Javase之集合体系之(1)集合顶层类Collection与其迭代器知识

    集合体系之集合顶层类Collection与其迭代器知识 集合的由来:Java是一门面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,就必须把多个对象进行存储,而要存 ...

随机推荐

  1. break语句和continue语句

    1. break 语句 break语句只能用在switch语句中,其作用是跳出switch语句或跳出本层循环. 2. continue 语句 continue语句只能用在循环体中,用于结束本次循环,即 ...

  2. Android开发工程师文集-1 小时学会各种Drawable

    前言 大家好,给大家带来Android开发工程师文集-1 小时学会各种Drawable的概述,希望你们喜欢 Drawable介绍 Drawable为抽象类,drawable与view有区别的地方,主要 ...

  3. 腾讯云播放器更新——TCplayer

    概述 最近腾讯云播放器进行了更新,增加了TCplayer,支持点播播放.由于工作需要,了解了一下TCplayer,把心得记录下来,供以后开发时参考,相信对其他人也有用. 参考文档: TCPlayer开 ...

  4. 首页背景图片在PC端有显示,在手机端不显示的解决方法

    今天看博客的资源大小,发现背景图片有44k大的吓人,准备压缩一下. 压缩之后才发现,我的背景图片在手机端是没有显示的.原因是背景图片不支持缩放. 上网查了下,发现加入如下代码之后就支持缩放了: bac ...

  5. Telerik for AJAX RadGrid控件

    作为一名.net小白,今天分享一下telerik知识的学习.熟悉ASP.NET Web Form的都知道Grid View或者是List View等表格控件,所以今天和大家分享一下telerik Ra ...

  6. The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar报错

    缺少jstl依赖解析xml文件,报错jaspException 添加依赖如下: <dependency>              <groupId>jstl</grou ...

  7. Spark之submit任务时的Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient memory

    Spark submit任务到Spark集群时,会出现如下异常: Exception 1:Initial job has not accepted any resources; check your ...

  8. Java访问文件夹中文件的递归遍历代码Demo

    上代码: import java.io.File; /* * 需求:对指定目录进行所有内容的列出(包含子目录中的内容) * 也可以理解为 深度遍历. */ public class FindAllFi ...

  9. Feign自定义编程配置

    介绍 在Spring Cloud中,Feign的默认配置类是FeignClientsConfiguration,该类定义了Feigh默认使用的编码器.解码器.所使用的契约等.Spring Cloud允 ...

  10. Eureka安全认证

    Eureka 服务加入安全认证只需要在之前的服务中增加三处步骤即可: 1.在Eureka Server中加入spring-boot-starter-security依赖 <dependencie ...