Collection值单列集合List(),以及遍历方式

知识点-- 单列集合常用类的继承体系

讲解:

Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.Listjava.util.Set。其中,List的特点是元素有序、元素可重复 ; Set的特点是元素不可重复List接口的主要实现类有java.util.ArrayListjava.util.LinkedListSet接口的主要实现类有java.util.HashSetjava.util.LinkedHashSet

从上面的描述可以看出JDK中提供了丰富的集合类库,为了便于初学者进行系统地学习,接下来通过一张图来描述集合常用类的继承体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KVvOmDrI-1578647800404)(img/Collection%E9%9B%86%E5%90%88%E4%BD%93%E7%B3%BB%E5%9B%BE.jpg)]

注意:这张图只是我们常用的集合有这些,不是说就只有这些集合。

小结:

集合的继承体系:单列集合:以单个单个的方式存储元素Collection接口:也称Collection集合,定义了所有单列集合共有的功能List接口:也称List集合,特点:元素有索引,元素存取有序,元素可以重复Vector类:也称Vector集合,特点:查询快,增删慢,线程安全ArrayList类:也称ArrayList集合,特点:查询快,增删慢,线程不安全LinkedList类:也称LinkedList集合,特点:查询慢,增删快Set接口:也称Set集合,特点:元素无索引,元素存取无序,元素不可以重复HashSet类:也称HashSet集合,特点:元素无索引,元素存取无序,元素不可以重复LinkedHashSet类:也称LinkedHashSet集合,特点:元素无索引,元素存取有序,元素不可以重复TreeSet类:也称TreeSet集合,特点:元素无索引,元素存取无序,元素不可以重复,可以对元素进行排序双列集合:以键值对的方式存储元素(键值对)Map接口:也称Map集合HashMap类:也称HashMap集合LinkedHashMap类:也称LinkedHashMap集合TreeMap类:也称TreeMap集合

知识点-- Collection 常用功能

目标:

  • Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合。

步骤:

  • Collection集合 常用功能

讲解:

方法如下:

  • public boolean add(E e): 把给定的对象添加到当前集合中 。
  • public void clear() :清空集合中所有的元素。
  • public boolean remove(E e): 把给定的对象在当前集合中删除。
  • public boolean contains(Object obj): 判断当前集合中是否包含给定的对象。
  • public boolean isEmpty(): 判断当前集合是否为空。
  • public int size(): 返回集合中元素的个数。
  • public Object[] toArray(): 把集合中的元素,存储到数组中

tips: 有关Collection中的方法可不止上面这些,其他方法可以自行查看API学习。

public class Demo02ListMethod {public static void main(String[] args) {method4();}public static void method4() {//创建集合List<String> list = new ArrayList<>();//添加元素list.add("jack");list.add("rose");list.add("tony");//打印集合System.out.println("替换前:" + list); //[jack, rose, tony]//调用set方法,使用 tom 替换掉原来索引为1的元素String str = list.set(1, "tom");System.out.println("替换后:" + list); //[jack, tom, tony]System.out.println("str:" + str); //rose}public static void method3() {//创建集合List<String> list = new ArrayList<>();//添加元素list.add("jack");list.add("rose");list.add("tony");//打印集合System.out.println("删除前:" + list); //[jack, rose, tony]//调用remove方法,删除索引为1的元素String str = list.remove(1);System.out.println("删除后:" + list); //[jack, tony]System.out.println("str:" + str); //rose}public static void method2() {//创建集合List<String> list = new ArrayList<>();//添加元素list.add("jack");list.add("rose");list.add("tony");//调用get方法,根据索引获取元素System.out.println(list.get(1));}public static void method1() {//创建集合List<String> list = new ArrayList<>();//添加元素list.add("jack");list.add("rose");list.add("tony");//打印集合System.out.println("list:" + list); //[jack, rose, tony]//向索引为1的位置插入元素。 lucylist.add(1, "lucy");//打印集合System.out.println("list:" + list); //[jack, lucy, rose, tony]}
}

知识点-- Iterator接口

讲解:

下面介绍一下迭代的概念:

  • 迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。

想要遍历Collection集合,那么就要获取该集合迭代器完成迭代操作,下面介绍一下获取迭代器的方法:

  • public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的。

Iterator接口的常用方法如下:

  • public E next():返回迭代的下一个元素。
  • public boolean hasNext():如果仍有元素可以迭代,则返回 true。

接下来我们通过案例学习如何使用Iterator迭代集合中元素:

public class IteratorDemo {public static void main(String[] args) {// 使用多态方式 创建对象Collection<String> coll = new ArrayList<String>();// 添加元素到集合coll.add("串串星人");coll.add("吐槽星人");coll.add("汪星人");//遍历//使用迭代器 遍历   每个集合对象都有自己的迭代器Iterator<String> it = coll.iterator();//  泛型指的是 迭代出 元素的数据类型while(it.hasNext()){ //判断是否有迭代元素String s = it.next();//获取迭代出的元素System.out.println(s);}}
}

tips:

  1. 在进行集合元素获取时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会抛出java.util.NoSuchElementException没有集合元素异常。
  2. 在进行集合元素获取时,如果添加或移除集合中的元素 , 将无法继续迭代 , 将会抛出ConcurrentModificationException并发修改异常.

小结:

  • Iterator迭代器:迭代:即Collection集合元素的通用获取方式。在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续在判断,如果还有就再取出来。一直把集合中的所有元素全部取出。这种取出方式专业术语称为迭代。获取迭代器:使用Collection集合中的方法iterator()方法public Iterator<E> iterator();获取该集合对象对应的迭代器使用迭代器进行判断和取出元素:使用Iterator迭代器的方法boolean hasNext() 判断集合中是否还有元素可以迭代,如果有就返回true,否则返回false。E next() 取出元素。

知识点-- 迭代器的实现原理

讲解:

我们在之前案例已经完成了Iterator遍历集合的整个过程。当遍历集合时,首先通过调用t集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。

Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,为了让初学者能更好地理解迭代器的工作原理,接下来通过一个图例来演示Iterator对象迭代元素的过程:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XetsRtnE-1578647800405)(img\迭代器原理图.bmp)]

在调用Iterator的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素,当第一次调用迭代器的next方法后,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素并将该元素返回,依此类推,直到hasNext方法返回false,表示到达了集合的末尾,终止对元素的遍历。

小结:

知识点-- 增强for

讲解:

增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

格式:

for(元素的数据类型  变量 : Collection集合or数组){ //写操作代码
}

它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。

代码演示

public class NBForDemo1 {public static void main(String[] args) {int[] arr = {3,5,6,87};//使用增强for遍历数组for(int a : arr){//a代表数组中的每个元素System.out.println(a);}Collection<String> coll = new ArrayList<String>();coll.add("小河神");coll.add("老河神");coll.add("神婆");for(String s :coll){System.out.println(s);}}
}

tips:

增强for循环必须有被遍历的目标,目标只能是Collection或者是数组;

增强for(迭代器)仅仅作为遍历操作出现,不能对集合进行增删元素操作,否则抛出ConcurrentModificationException并发修改异常

小结:

增强for循环:概述:增强for循环(也称for each循环)是JDK1.5以后出来的一个高级for循环,专门用来遍历数组和集合的。它的内部原理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。格式:for(元素的数据类型 变量名 : 数组名\集合名){}执行流程:1.判断 数组或者集合 中是否有元素可以迭代2.如果有元素可以迭代,就会从这个 数组或者集合中 取出元素赋值给变量3.依次类推,直到没有元素,就自动结束增强for循环总结数组和集合的遍历方式:Collection集合: 迭代器,增强for循环List集合: 迭代器,增强for循环,普通for\while循环Set集合:  迭代器,增强for循环数组:增强for循环,普通for\while循环

List接口

讲解:

List接口的概述:

java.util.List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。

看完API,我们总结一下:

List接口特点:

  1. 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
  2. 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
  3. 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

tips:我们在基础班的时候已经学习过List接口的子类java.util.ArrayList类,该类中的方法都是来自List中定义。

小结:

知识点-- List接口中常用方法

讲解:

List集合特有的方法:

  • public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。
  • public E get(int index):返回集合中指定位置的元素。
  • public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
  • public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

List集合特有的方法都是跟索引相关,我们在基础班都学习过。

tips:我们之前学习Colletion体系的时候,发现List集合下有很多集合,它们的存储结构不同,这样就导致了这些集合它们有各自的特点,供我们在不同的环境下使用,那么常见的数据结构有哪些呢?在下一章我们来介绍:

小结:

List集合特有的方法:增删查改- public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。- public E get(int index):返回集合中指定位置的元素。- public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。- public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

知识点-- List的子类

讲解:

ArrayList集合

java.util.ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。

许多程序员开发时非常随意地使用ArrayList完成任何需求,并不严谨,这种用法是不提倡的。

LinkedList集合

java.util.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 void push(E e):将元素推入此列表所表示的堆栈。
  • public boolean isEmpty():如果列表不包含元素,则返回true。

LinkedList是List的子类,List中的方法LinkedList都是可以使用,这里就不做详细介绍,我们只需要了解LinkedList的特有方法即可。在开发时,LinkedList集合也可以作为堆栈,队列的结构使用。

public class Demo04LinkedList {public static void main(String[] args) {method4();}/**  void push(E e): 压入。把元素添加到集合的第一个位置。*  E pop(): 弹出。把第一个元素删除,然后返回这个元素。*/public static void method4() {//创建LinkedList对象LinkedList<String> list = new LinkedList<>();//添加元素list.add("达尔文");list.add("达芬奇");list.add("达尔优");System.out.println("list:" + list);//调用push在集合的第一个位置添加元素//list.push("爱迪生");//System.out.println("list:" + list);//[爱迪生, 达尔文, 达芬奇, 达尔优]//E pop(): 弹出。把第一个元素删除,然后返回这个元素。String value = list.pop();System.out.println("value:" + value);//达尔文System.out.println("list:" + list);//[达芬奇,达尔优]}/** E removeFirst():删除第一个元素* E removeLast():删除最后一个元素。*/public static void method3() {//创建LinkedList对象LinkedList<String> list = new LinkedList<>();//添加元素list.add("达尔文");list.add("达芬奇");list.add("达尔优");//删除集合的第一个元素
//      String value = list.removeFirst();
//      System.out.println("value:" + value);//达尔文
//      System.out.println("list:" + list);//[达芬奇,达尔优]//删除最后一个元素String value = list.removeLast();System.out.println("value:" + value);//达尔优System.out.println("list:" + list);//[达尔文, 达芬奇]}/** E getFirst(): 获取集合中的第一个元素* E getLast(): 获取集合中的最后一个元素*/public static void method2() {//创建LinkedList对象LinkedList<String> list = new LinkedList<>();//添加元素list.add("达尔文");list.add("达芬奇");list.add("达尔优");System.out.println("list:" + list);//获取集合中的第一个元素System.out.println("第一个元素是:" + list.getFirst());//获取集合中的最后一个元素怒System.out.println("最后一个元素是:" + list.getLast());} /** void addFirst(E e): 在集合的开头位置添加元素。* void addLast(E e): 在集合的尾部添加元素。*/public static void method1() {//创建LinkedList对象LinkedList<String> list = new LinkedList<>();//添加元素list.add("达尔文");list.add("达芬奇");list.add("达尔优");//打印这个集合System.out.println("list:" + list);//[达尔文, 达芬奇, 达尔优]//调用addFirst添加元素list.addFirst("曹操");System.out.println("list:" + list);//[曹操, 达尔文, 达芬奇, 达尔优]//调用addLast方法添加元素list.addLast("大乔");System.out.println("list:" + list);//[曹操, 达尔文, 达芬奇, 达尔优, 大乔]}
}

小结:

 List的子类:ArrayList类:也称ArrayList集合,存储数据的数据结构是数组,特点:查询快,增删慢,线程不安全LinkedList类:也称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 void push(E e):将元素推入此列表所表示的堆栈。- public boolean isEmpty():如果列表不包含元素,则返回true。忽略,不是特有的

Java-Collection集合之单列集合List,以及遍历方式相关推荐

  1. JAVA day18,19 单列集合Collection:List(ArrayList,LinkedList,Vector)、Queue(Deque)、Set(HashSet,TreeSet),比较器

    Collection单列集合 所有超级接口: Iterable<E> 所有已知子接口: BeanContext, BeanContextServices, BlockingDeque< ...

  2. Java基础14 集合(重要)四种遍历方式 list 并发异常 set

    一.collection 带all的方法 package day14;import java.util.ArrayList; import java.util.Collection;public cl ...

  3. Java基础知识 21(Set集合,HashSet集合以及它的三种遍历方式(迭代器,增强for循环,forEach),LinkedHashSet集合,TreeSet集合(自然排序法,比较器排序法))

    Java基础知识 21 Set集合 Set集合:一个不包含重复元素的Collection集合,元素不重复,List集合是允许元素重复的. Set接口的三个字类:HashSet(),LinkedHash ...

  4. Java Map集合常用API及3种遍历方式

    1.map的常用API map是双列集合的顶层接口,是所有的双列集合都可以继承使用 2.使用Map集合 //1.创建Map集合的对象Map<String, String> m = new ...

  5. java集合之——List的三种遍历方式

    一.使用 iterator(迭代器)遍历 1) java iterrator用于遍历集合,本身并不存放对象. 2)迭代器iterator的基本操作: iterator.hasNext():判断集合中是 ...

  6. Java实现二叉树的创建与四种遍历方式(前,中,后,层)

    文章目录 1.二叉树节点的创建 2.二叉树的先序遍历 3.二叉树的中序遍历 4.二叉树的后序遍历 5.二叉树的层序遍历

  7. java 集合 接口_Java集合之Collection接口

    1 - Java集合介绍 /* 1. 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储. 2. 另一方面,使用Array存储对象方面具有一些弊 端,而 ...

  8. (Java集合框架)集合框架概述和Collection常用功能及遍历

    文章目录 集合概述 集合框架 Collection 常用功能 代码演示 集合遍历 Iterator接口 迭代器的实现原理 增强for 代码演示 集合概述 集合:集合是java中提供的一种容器,可以用来 ...

  9. Java——Collection集合

    1.集合概述 在前面基础班我们已经学习过并使用过集合ArrayList ,那么集合到底是什么呢? 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? ...

最新文章

  1. 使用Arthas 获取Spring ApplicationContext还原问题现场
  2. mysql 拼接sql批量执行_MySql 学习之 一条更新sql的执行过程
  3. JavaWeb第五讲 Web核心基础之HTTP协议
  4. C#的Timer解析(转)
  5. PL/SQL经典练习
  6. 今年双11,阿里业务100%上云
  7. 云图说 | 华为云医疗智能体智联大健康:AI医学影像
  8. 发现网络产品漏洞后,应立即通知上游开发者,并及时通知下游用户
  9. android sendmessage和post的区别,Handler的sendMessage和postDelay的区别
  10. 人活着,就应该对其他人贡献价值
  11. java get 和post_[Java教程]get和post方法的区别
  12. 树莓派开发界面显示温度_关于树莓派linux开发板
  13. 3D打印的四种应用场合
  14. java jdk oracle官网历史版本下载链接
  15. Windows 10安装AD远程服务器管理工具
  16. Err.number错误号和错误说明
  17. python画图时,中文无法正常显示的问题,RuntimeWarning: Glyph 26631 missing from current font. font.set_text(s, 0, fl
  18. LabVIEW热敏电阻温度计程序
  19. OSI/RM各层功能—物理层、数据链路层
  20. 3-2存储系统-主存与CPU的连接外部存储器

热门文章

  1. 不打开Excel文件直接读取数据
  2. 《JAVA: 学习导图》
  3. 【C/C++】输入一个整数的二目运算式的字符串,如100+20,332-19,200*2333,44/33二目运算取”加减乘除“中的一种输出运算式的整数结果值
  4. Variational Autoencoders and Nonlinear ICA: A Unifying Framework
  5. (入门、全面、通用)树莓派Raspbian系统安装配置,篇一
  6. 史上最强HashMap面试教程
  7. 698. 划分为k个相等的子集:给定一个整数数组 nums 和一个正整数 k,找出是否有可能把这个数组分成 k 个非空子集,其总和都相等。
  8. 为什么不建议执行超过3表以上的多表关联查询?
  9. Android Studio 修改 Java 语言版本到 1.8
  10. 【zblog】zba解压工具