我们掌握了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. eclipse怎么删除多余的tomcat server(2)

    首先你的Server要是可用状态,就是说当前这个tomcat处于可用状态才能点击那个Create Launch Configuration

  2. Python之路(一)-python简介

    一.python简介,python2.x与python3.x的区别 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. Py ...

  3. _ZNote_Mac_技巧_QuickLook功能扩展

    QuicLook(快速查看)是macOS一项非常方便的独有功能: 当选中一个文件,只需要按下空格键即可查看其内容,在按下空格退出QuickLook, 不需要启动再关闭任何软件. 默认支持大部分视频.音 ...

  4. 自适应Simpson法与积分初步

    前言 不知道为什么,今天感觉想要写一下数学的东西,然后就看了一下我还有这个模板不会,顺手写了一下. 没有学过微积分的最好还是看一下求导为好. 求导 听说很多人都不会求导,我写一下吧qwq 令\(f(x ...

  5. while循环 格式化输出 密码本 编码的初识

    第二天课程整理 while 循环 why : while ' 循环' 的意思 what : while 无限循环 how : 1.基本结构 while + 条件 循环的代码 初识循环 while tr ...

  6. 选项卡--原生js

    比较基础的一个特效,毕业设计要做一些记录,就把这些都记下来吧,万一用到的时候忘了呢 function changeTab() { let navs = document.getElementsByTa ...

  7. MySQL体系结构和存储引擎概述

     MySQL体系结构和存储引擎概述 一.定义数据库和实例 数据库: 物理操作系统文件或其他形式文件类型的集合.数据库文件可以是frm.MYD.ibd 结尾的文件. 从概念上来说,数据库是文件的集合,是 ...

  8. Javascript高级编程学习笔记(10)—— 作用域、作用域链

    昨天介绍了,JS中函数的作用域 什么词法环境之类的,可能很多小伙伴不太明白. 在今天的内容开始之前,先做个简短的声明: 词法环境这一概念是在ES5中提出的,因为词法环境主要用于保存let.const声 ...

  9. location-alias

    location /images/ { alias /project/pic/; } 给定的路径对应于location的"/url" 这个URL; /images/f.jpg -- ...

  10. RSA实现JS前端加密,PHP后端解密

    web前端,用户注册与登录,不能直接以明文形式提交用户密码,容易被截获,这时就引入RSA. 前端加密 需引入4个JS扩展文件,jsbn.js.prng4.js.rng.js和rsa.js. <h ...