我们掌握了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. 使用Python对Twitter进行数据挖掘(Mining Twitter Data with Python)

    目录 1.Collecting data 1.1 Register Your App 1.2 Accessing the Data 1.3 Streaming 2.Text Pre-processin ...

  2. C++回调:利用Sink

    Sink的本质是利用C++的封装.继承.多态的面向对象来实现,从实现角度来说,更优于函数指针回调: // cbBysink.cpp : Defines the entry point for the ...

  3. ZZ 使用Jenkins配置Git+Maven的自动化构建

    http://blog.csdn.net/xlgen157387/article/details/50353317 Jenkins是帮我们将代码进行统一的编译打包.还可以放到tomcat容器中进行发布 ...

  4. Apache Drill - join HBase and RDBMs

    HBase作为Nosql的常用系统之一,在很多大数据应用/平台中广泛使用.例如通过Spark统计后将结果存放到HBase中.通常统计结果还需要进一步和元数据或者字典表关联从而得到最终结果显示,这意味着 ...

  5. three.js 微信小游戏

    最近在 https://classroom.udacity.com/courses/cs291 学习了一些 3D 引擎和 three.js 的知识 把 three.js 弄到微信小游戏里,先随便跑一跑 ...

  6. Yii2 Template 组件框架集封装

    项目简介: Yii2_Template是一个“提供大多数PHP常用的组件去集合成的一套基于Yii2的项目框架”. 该项目是一款秉着提高 开发效率.降低开发成本,遵循高拓展,高可用的原则的进行开发的框架 ...

  7. Oracle 的分页查询 SQL 语句

    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用. 分页查询格式: SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM T ...

  8. Javascript百学不厌 - 尾递归

    虽然偶尔也用过,但是从来没具体来整理过 普通递归: function fac(n) { ) ; ); } fac() 这是个阶乘.但是占用内存,因为: fac(5) (5*fac(4)) (5*(4* ...

  9. python(30)——【random模块】【if __name__ =='__main__'】【os模块】

    一.random模块(随机模块) 1.random 常用模块介绍 import random print(random.random()) #返回[0,1)之间的随机浮点数 print(random. ...

  10. 12-部署EFK插件

    配置和安装 EFK 官方文件目录:cluster/addons/fluentd-elasticsearch $ ls *.yaml es-controller.yaml es-service.yaml ...