我们掌握了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. Chapter5 生长因子、受体和癌症

    一.Src蛋白是一种蛋白激酶 可以磷酸化不同的底物,调节不同的通路 Src激酶主要磷酸化酪氨酸残基,而别的激酶主要磷酸化色氨酸.苏氨酸残基 二.EGF受体拥有酪氨酸激酶功能 胞内结构域有Src蛋白的同 ...

  2. Learning Rust - Syntax

    Rust is another compiling language that may replace the position of C/C++ in server filed. It runs f ...

  3. Hadoop和一般数据库的区别?

    难道一般的数据库比如PostgreSQL就不可以做集群吗?像Oracle.SQL Sever它们就没有发明这一功能吗? https://www.jianshu.com/p/525cfe07badc H ...

  4. Django Model Form

    ModelForm ModelForm结合了Form和Model,将models的field类型映射成forms的field类型,复用了Model和Model验证, 写更少的代码,并且还实现了存储数据 ...

  5. Android-Java-静态变量

    描述Person对象: package android.java.oop09; // 描述Person对象 public class Person { private String name; pri ...

  6. 在jenkins中调用maven的变量

    Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...

  7. java中的io系统详解

    相关读书笔记.心得文章列表 Java 流在处理上分为字符流和字节流.字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符.字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字 ...

  8. Java 实现 Http 请求工具类

    package com.demo.util; import java.io.BufferedReader; import java.io.IOException; import java.io.Inp ...

  9. mongodb3.x主从配置及备份

    本文将介绍下mongodb主从配置及备份 MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关 ...

  10. python(leetcode)-136只出现一次的数字

    给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输入: [ ...