首页 > 其他 > 详细

对象容器——集合

时间:2020-07-20 19:44:42      阅读:65      评论:0      收藏:0      [点我收藏+]

对象容器——集合

集合的概述

Java 中提供了丰富的集合接口和类,它们来自于 java.util 包。如同 15-1 所示是 Java 主要的集合接口和类,从图中可见 Java 集合类型分为:Collection 和 Map,Collection 子 接口有:Set、Queue 和 List 等接口。每一种集合接口描述了一种数据结构。 本章重点介绍 List、Set 和 Map 接口,因此图 15-1 中只列出了这三个接口的具体实现 类,事实上 Queue 也有具体实现类,由于很少使用,这里不再赘述,读者感兴趣可以自 己查询 API 文档。

技术分享图片


提示 学习Java中的集合,首先从两大接口入手,重点掌握List、Set和Map三个接口,熟悉 这些接口中提供的方法。然后再熟悉这些接口的实现类,并了解不同实现类之间的区 别。


 

List集合

List 集合中的元素是有序的,可以重复出现。图 15-2 是一个班级集合数组,这个集合 中有一些学生,这些学生是有序的,顺序是他们被放到集合中的顺序,可以通过序号访问 他们。这就像老师给进入班级的人分配学号,第一个报到的是“张三”,老师给他分配的 是 0,第二个报到的是“李四”,老师给他分配的是 1,以此类推,最后一个序号应该是 “学生人数-1”。

技术分享图片


提示 List集合关心的元素是否有序,而不关心是否重复,请大家记住这个原则。例如,图152所示的班级集合中就有两个“张三”。


List 接口的实现类有:ArrayList 和 LinkedList。ArrayList 是基于动态数组数据结构的实 现,LinkedList 是基于链表数据结构的实现。ArrayList 访问元素速优于 LinkedList,LinkedList 占用的内存空间比较大,但 LinkedList 在批量插入或删除数据时优于 ArrayList。 不同的结构对应于不同的算法,有的考虑节省占用空间,有的考虑提高运行效率,对 于程序员而言,它们就像是“熊掌”和“鱼肉”,不可兼得!提高运行速度往往是以牺牲 空间为代价的,而节省占用空间往往是以牺牲运行速度为代价的。

 

常用方法

List 接口继承自 Collection 接口,List 接口中的很多方法都继承自 Collection 接口的。 List 接口中常用方法如下。

  1. 操作元素

    • get(int index):返回 List 集合中指定位置的元素。

    • set(int index, Object element):用指定元素替换 List 集合中指定位置的元素。

    • add(Object element):在 List 集合的尾部添加指定的元素。该方法是从 Collection 集合继承过了的。

    • add(int index, Object element):在 List 集合的指定位置插入指定元素。

    • remove(int index):移除 List 集合中指定位置的元素。

    • remove(Object element):如果 List 集合中存在指定元素,则从 List 集合中移除第 一次出现的指定元素。该方法是从 Collection 集合继承过了的。

    • clear():从 List 集合中移除所有元素。该方法是从 Collection 集合继承过了的。

  2. 判断元素

    • isEmpty():判断 List 集合中是否有元素,没有返回 true,有返回 false。该方法是 从 Collection 集合继承过了的。

    • contains(Object element):判断 List 集合中是否包含指定元素,包含返回 true, 不包含返回 false。该方法是从 Collection 集合继承过了的。

  3. 查询元素

    • indexOf(Object o):从前往后查找 List 集合元素,返回第一次出现指定元素的索 引,如果此列表不包含该元素,则返回-1。

    • lastIndexOf(Object o):从后往前查找 List 集合元素,返回第一次出现指定元素的 索引,如果此列表不包含该元素,则返回-1。

  4. 其他

    • iterator():返回迭代器(Iterator)对象,迭代器对象用于遍历集合。该方法是从 Collection 集合继承下来的。

    • size():返回 List 集合中的元素数,返回值是 int 类型。该方法是从 Collection 集 合继承下来的。

    • subList(int fromIndex, int toIndex):返回 List 集合中指定的 fromIndex(包括 )和 toIndex(不包括)之间的元素集合,返回值 List 集合。


 

注意:在Java中任何集合中存放的都是对象,即引用数据类型,为什么我们在集合框架当中能够存入基本数据类型,因为在存入数据和取出数据的时候,基本数据类型存在一个自动的装箱和解装箱的过程


 

遍历集合

集合最常用的操作之一是遍历,遍历就是将集合中的每一个元素取出来,进行操作或 计算。List 集合遍历有三种方法:

  1. 使用 for 循环遍历:List 集合可以使用 for 循环进行遍历,for 循环中有循环变量, 通过循环变量可以访问 List 集合中的元素。

  2. 使用 for-each 循环遍历:for-each 循环是针对遍历各种类型集合而推出的,笔者 推荐使用这种遍历方法。

  3. 使用迭代器遍历:Java提供了多种迭代器,List集合可以使用Iterator和 ListIterator 迭代器。

    ( 1Interator it = list.iterator() 2.when(it.hasnext()){ Object item = it.next();} )

Set集合

Set 集合是由一串无序的,不能重复的相同类型元素构成的集合。图 15-3 是一个班级 的 Set 集合。这个 Set 集合中有一些学生,这些学生是无序的,不能通过类似于 List 集合 的序号访问,而且不能有重复的同学。


提示 List集合中的元素是有序的、可重复的,而Set集合中的元素是无序的、不能重复的。 List集合强调的是有序,Set集合强调的是不重复。当不考虑顺序,且没有重复元素时, Set集合和List集合可以互相替换的。


常用方法

Set 接口也继承自 Collection 接口,Set 接口中大部分都是继承自 Collection 接口,这 些方法如下

  1. 操作元素

    • add(Object element):在 Set 集合的尾部添加指定的元素。该方法是从 Collection 集合继承过了的。

    • remove(Object element):如果 Set 集合中存在指定元素,该方法是从 Collection 集合继承过了的。

    • clear():从 Set 集合中移除所有元素。该方法是从 Collection 集合继承过了的。

  2. 判断元素

    • isEmpty():判断 Set 集合中是否有元素,没有返回 true,有返回 false。该方法是 从 Collection 集合继承过了的。

    • contains(Object element):判断 Set 集合中是否包含指定元素,包含返回 true, 不包含返回 false。该方法是从 Collection 集合继承过了的。

  3. 其他

    • iterator():返回迭代器(Iterator)对象,迭代器对象用于遍历集合。该方法是从 Collection 集合继承下来的。

    • size():返回 Set 集合中的元素数,返回值是 int 类型。该方法是从 Collection 集 合继承下来的。

遍历元素

Set 集合中的元素由于没有序号,所以不能使用 for 循环进行遍历,但可以使用 foreach 循环和迭代器进行遍历。事实上这两种遍历方法也是继承自 Collection 集合,也就是 说所有的 Collection 集合类型都有这两种遍历方式。

  1. foreach

  2. Iterator

Map集合

Map(映射)集合表示一种非常复杂的集合,允许按照某个键来访问元素。Map 集合 是由两个集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是 Set 类 型,因此不能有重复的元素。而值集合是 Collection 类型,可以有重复的元素。Map 集合 中的键和值是成对出现的。 图 15-4 所示是 Map 类型的“国家代号”集合。键是国家代号集合,不能重复。值是 国家集合,可以重复。

Map 接口直接实现类主要是 HashMap,HashMap 是基散列表数据结构的实现

 

常用方法

Map 集合中包含两个集合(键和值),所以操作起来比较麻烦,Map 接口提供很多方 法用来管理和操作集合。主要的方法如下。

  1. 操作元素

    • get(Object key):返回指定键所对于的值;如果 Map 集合中不包含该键值对,则 返回 null。

    • put(Object key, Object value):指定键值对添加到集合中。

    • remove(Object key):移除键值对。

    • clear():移除 Map 集合中所有键值对。

  2. 判断元素

    • isEmpty():判断 Map 集合中是否有键值对,没有返回 true,有返回 false。

    • containsKey(Object key):判断键集合中是否包含指定元素,包含返回 true,不包 含返回 false。

    • containsValue(Object value):判断值集合中是否包含指定元素,包含返回 true, 不包含返回 false

  3. 查看集合

    • keySet():返回 Map 中的所有键集合,返回值是 Set 类型。

    • values():返回 Map 中的所有值集合,返回值是 Collection 类型。

    • size():返回 Map 集合中键值对数。

遍历集合

Map 集合遍历与 List 和 Set 集合不同,Map 有两个集合,因此遍历过程可以只遍历 值的集合,也可以只遍历键的集合,也可以同时遍历。这些遍历过程都可以使用 for-each 循环和迭代器进行遍历。

public class TestMap {
    public static void main(String[] args) { 
         
          Map map = new HashMap(); 
         
          map.put(102, "张三");   
          map.put(105, "李四");   
          map.put(109, "王五");   
          map.put(110, "董六");   
          map.put(111, "李四"); 
         
          // 1.使用for-each循环遍历   
          System.out.println("--1.使用for-each循环遍历--");   
          // 获得键集合   
          Set keys = map.keySet();         
          for (Object key : keys) {    
              int ikey = (Integer) key; 
              // 自动拆箱       
              String value = (String) map.get(ikey); 
              // 自动装箱      
              System.out.printf("key=%d - value=%s \n", ikey, value);   
          } 
    
         
          // 2.使用迭代器遍历  
        System.out.println("--2.使用迭代器遍历--");   
        // 获得值集合   
        Collection values = map.values();       
        // 遍历值集合   
        Iterator it = values.iterator();   
        while (it.hasNext()) {
            Object item = it.next();    
            String s = (String) item;    
            System.out.println("值集合元素: " + s);   
        } 
         
    }
}

 


?
//--1.使用for-each循环遍历--
//key=102 - value=张三
//key=105 - value=李四
//key=109 - value=王五
//key=110 - value=董六
//key=111 - value=李四
//--2.使用迭代器遍历--
//值集合元素: 张三
//值集合元素: 李四
//值集合元素: 王五
//值集合元素: 董六
//值集合元素: 李四
?

对象容器——集合

原文:https://www.cnblogs.com/qianshen-bolg/p/13346367.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!