Java 第十章总结 集合类

本文详细介绍了Java集合类中的List接口,包括ArrayList和LinkedList的特点及应用场景。此外,还讲解了Iterator迭代器的使用方法,以及Set集合的HashSet和TreeSet的区别。在实际开发中,List适合存放有序且可能重复的数据,Set则强调唯一性,而Map用于建立键值映射关系。
摘要由CSDN通过智能技术生成

10.1 集合类概述

10.2 Collection接口 

10.3 List集合

(1)List接口 

(2)

List 接口的实现类
        List 接口不能直接被实例化。

        ArrayList 类实现了可变的数组,允许保存所有元素,包括 null,并可以根据索引位置对集合进行快速的随机访问;缺点是向指定的索引位置插入对象或删除对象的速度较慢。

        LinkedList 类采用链表结构保存对象。这种结构的优点是便于向集合中插入和删除对象,需要向集合中插入、删除对象时,使用 LinkedList 类实现的 List 集合的效率较高;但对于随机访问集合中的对象,使用 LinkedList 类实现 List 集合的效率较低。

例:

package ten01;
 
import java.util.*; //导入java.util包
 
public class UseList { // 创建类useList
    public static void main(String[] args) { // 主方法
        List<String> list = new ArrayList<>(); // 创建集合对象
        // 向集合添加元素
        list.add("a"); 
        list.add("b");
        list.add("c");
        int i = (int) (Math.random() * list.size()); // 获得0~2之间的随机数
        System.out.println("随机获取数组中的元素:" + list.get(i));
        list.remove(2); // 将指定索引位置的元素从集合中移除
        System.out.println("将索引是'2'的元素从数组移除后,数组中的元素是:");
        for (int j = 0; j < list.size(); j++) { // 循环遍历集合
            System.out.println(list.get(j)); // 获取指定索引处的值
        }
    }
}
运行结果如下:

(3)Iterator 迭代器

        在java.util 包中提供了一个 Iterator 接口,该接口是一个专门对 Collection 进行迭代的迭代器。
lterator迭代器的常用方法

方法功能描述
hasNext()如果仍有元素可以迭代,则返回 true
next()返回迭代的下一个元素
remove()从迭代器指向的Collection中移除迭代器返回的最后一个元素(可选操作)

 

注意:

Iterator的next()方法返回的是Object。

 

例:

package ten02;
 
import java.util.*; //导入java.util包,其他实例都要添加该语句
 
public class UseIterator { // 创建类useIterator
    public static void main(String args[]) {
        Collection<String> list = new ArrayList<>(); // 实例化集合类对象
        // 向集合添加数据
        list.add("a"); 
        list.add("b");
        list.add("c");
        Iterator<String> it = list.iterator(); // 创建迭代器
        while (it.hasNext()) { // 判断是否有下一个元素
            String str = (String) it.next(); // 获取集合中元素
            System.out.println(str);
        }
    }
}
运行结果如下:

10.4 Set 集合
        Set 集合中的对象不按特定的方式排序,只是简单地把对象加入集合中,但 Set 集合中不能包含重复对象。Set 集合由 Set 接口和 Set 接口的实现类组成。

1.Set 接口
        Set 接口继承了 Collection 接口,因此包含 Collection 接口的所有方法。

2.Set 接口的实现类
        Set 接口常用的实现类有 HashSet 与 TreeSet。

        HashSet 类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 Set 的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用 null 元素。该类实现了 Set 接口,不允许出现重复元素,不保证集合中元素的顺序,允许包含值为 null 的元素,但最多只能一个。


        TreeSet 类不仅实现了 Set 接口,还实现了 java.util.SortedSet 接口,因此,TreeSet 类实现的 Set 集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,即可以通过比较器对用 TreeSet 类实现的 Set 集合中的对象进行排序。该类实现了Set接口,可以实现排序等功能。
                                                

方法功能描述
first()返回此 Set中当前第一个 (最低)元素
last()返回此 Set 中当前最后一 个(最高)元素
comparator()返回对此 Set 中的元素进 行排序的比较器。如果此 Set使用自然顺序,则返回 null
headSet(E toElement)返回一个新的 Set集合,新集合是toElement(不包含)之前的所有对象
subSet(E fromElement, E fromElement)返回一个新的 Set集合,是fromElement(包含)对象与fromElement(不包含)对象 之间的所有对象
tailSet(E fromElement)返回一个新的 Set集合,新集合包含对象fromElement(包含)之后的所有对象

 

例:

package ten03;
 
import java.util.*;
 
public class UseHashSet {
    public static void main(String[] args) {
        Set set = new HashSet();// 创建Set集合
        set.add("a");// 向集合中添加数据
        set.add("b");
        set.add("c");
        set.add("c");
        Iterator<String> it = set.iterator();// 创建迭代器
        while (it.hasNext()) {// 遍历HashSet集合
            String str = (String) it.next();// 获取集合中的元素
            System.out.println(str);
        }
    }
}
运行结果如下:

10.5 Map 集合
        Map 集合没有继承 Collection 接口,其提供的是 key 到 value 的映射。Map 中不能包含相同的 key,每个 key 只能映射一个 value。key 还决定了存储对象在映射中的存储位置,但不是由 key 对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值。散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。Map 集合包括Map 接口以及 Map 接口的所有实现类。

1.Map 接口

2.Map 接口的实现类
Map 接口常用的实现类有 HashMap 和 TreeMap。

        HashMap 类是基于哈希表的 Map 接口的实现,此实现提供所有可选的映射操作,并允许使用 null 值和 null 键,但必须保证键的唯一性。HashMap 通过哈希表对其内部的映射关系进行快速查找。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。HashMap 继承于 AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。

        TreeMap 类不仅实现了 Map 接口,还实现了 java.util.SortedMap 接口,因此,集合中的映射关系具有一定的顺序。但在添加、删除和定位映射关系时,TreeMap 类比 HashMap 类性能稍差。由于 TreeMap 类实现的 Map 集合中的映射关系是根据键对象按照一定的顺序排列的,因此不允许键对象是 null。

例:

package ten04;
 
import java.util.*;
 
public class UseHashMap {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>(); // 创建Map实例
        map.put("ISBN-978654", "Java从入门到精通"); // 向集合中添加对象
        map.put("ISBN-978361", "Android从入门到精通");
        map.put("ISBN-978893", "21天学Android");
        map.put("ISBN-978756", "21天学Java");
        Set<String> set = map.keySet(); // 构建Map集合中所有key对象的集合
        Iterator<String> it = set.iterator(); // 创建集合迭代器
        System.out.println("key值:");
        while (it.hasNext()) { // 遍历集合
            System.out.print(it.next()+"\t");
        }
        Collection<String> coll = map.values(); // 构建Map集合中所有values值集合
        it = coll.iterator();
        System.out.println("\nvalues值:");
        while (it.hasNext()) { // 遍历集合
            System.out.print(it.next()+"\t");
        }
    }
}
运行结果如下:

10.6 集合的使用场合
        List集合、Set集合和Map集合,那么在实际开发中,应该选用合适的集合。

        List 集合关注的是索引,其元素是顺序存放的,例到如一个班的学生成绩,成绩可以重复就可以使用List集合存取。
        Set集合关注唯一性,它的值不允许重复,例如每个班的学生的学号,每个学生的学号是不能重复的。
        Map集合关注的是唯一的标识符(KEY),它将唯一的键映射到某个元素,例如每个班学生的学号与姓名的映射,每个学号对应一个学生的姓名,学号是不能重复的,但是学生的姓名有可能重复。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值