Java 类集框架(Set, List, Map)的使用

虽然面试的要求是要知道HashMap是怎么实现的,令人望而却步,但搞明白它怎么用,就成功了一小半。

什么是类集框架

  • 是一组类和接口
  • 位于java.util包中
  • 主要用于存储和管理对象
  • 主要分为三大类--集合、列表和映射
    • 集合中的对象不按特定的方式排序,并且没有重复对象。和数学中集合的概念类似。(如果添加了重复的对象,会怎样呢?并不会报错,但重复的元素只算一个)。
    • 列表中的对象按照索引位置排序,可以有重复对象。
    • 映射中的每一个元素包含一个键对象和一个值对象,即键值对。键不可以重复,值可以重复。

注意这些接口及其实现类的继承关系:

Collection 和 Iterator接口

Set 接口和 List 接口都是 Collection 的子接口,因此我们先看看Collection 接口中有什么方法:

方法名

作用

boolean add(Object o)

向集合中加入一个对象

void clear()

删除集合中的所有对象

boolean isEmpty()

判断集合是否为空

remove(Object o)

从集合中删除一个对象的引用

int size()

返回集合中元素的数目

Set有一个实现类,就是HashSet,它是Set中我们最常用的。下面我们举一个例子,在HashSet中使用这些方法。

Set 和 HashSet的使用方法

//导包时少用*,写明确一点,方便查错和阅读import java.util.Set;
import java.util.HashSet;public class Test {    public static void main(String args []) {        //把具体的实现类向上转型为接口类型,方便接收参数,即:
        //HashSet<String> hashSet = new HashSet<String>();
        //Set<String> set = hashSet;
        Set<String> set = new HashSet<String>();        set.add("a");        set.add("b");        set.add("c");        set.add("d");
        System.out.println("Size: " + set.size());        //重复添加元素,会怎样呢? 
        set.add("c");
        System.out.println("Size with two c: " + set.size());        set.remove("a");
        System.out.println("Size after remove: " + set.size());        

        set.clear();
        System.out.println("Size after clear: " + set.size());

        System.out.println("Is empty: " + set.isEmpty());        
    }
}

运行结果:

如何遍历 Set 集合是无序的,所以不能像数组或者List那样,根据下标输出其中的元素,因此我们需要使用迭代器 Iterator。 由最前面的图可以看出,它们之间的继承关系是:Iterator <-- Collection <-- Set <-- HashSet.

Iterator 的常用方法有:

  • hasNext():判断迭代器当中,还有没有下一个元素
  • next():返回迭代器当中的下一个元素

遍历Set的方法: 生成迭代器对象:Iterator it = set.iterator() ,这个迭代器对象可以把set中的元素都取出来。 iterator() 方法属于 collection 接口,所以 collection 的子接口 set 中, 必然有 iterator() 方法。

import java.util.Iterator;
import java.util.Set;
import java.util.HashSet;public class Test {    public static void main(String args []) {
        Set<String> set = new HashSet<String>();        
        set.add("a");        set.add("b");        set.add("c");        set.add("d");        
        Iterator<String> it = set.iterator();        while(it.hasNext()) 
            System.out.println(it.next());        
    }
}

运行结果:

Map 和 HashMap的使用方法

由一开始的类图可以看出,Map并没有继承Collection接口,是一个单独的接口。 Map中的重要方法:

  • put(K key, V value): 把键值对放入Map
  • get(Object key): 返回当前键对应的值
  • 其他方法与Collection中类似,比如remove(), clear()

一个简单的例子:

import java.util.Map;import java.util.HashMap;

public class Test {
    public static void main(String args []) {        Map<String, String> map = new HashMap<String, String>();        map.put("1", "a");        map.put("2", "b");        map.put("3", "c");        map.put("4", "d");        //如果有重复的键,后面的值会覆盖前面的
        map.put("3", "e");        System.out.println(map.size());        System.out.println(map.get("3"));
    }
}

运行结果:

原文发布于微信公众号 - Java团长(javatuanzhang)

原文发表时间:2016-11-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏郭耀华‘s Blog

剑指offer第五天

28.数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2...

27750
来自专栏和蔼的张星的图像处理专栏

76. 最长上升子序列动态规划+二分查找

给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义: 最长上升子序列问题是在一个无序的给定序列中找到一个尽可能...

67010
来自专栏Phoenix的Android之旅

Java面试的基础中的基础

面试时经常从Java的基础知识开始,最基础的部分莫过于Java的集合类型。我们知道Java的集合类型有三种,Set,List,Map,那这三种有什么区别呢。

10210
来自专栏闻道于事

Java之集合初探(一)

一、集合概述、区别 集合是一种容器,数组也是一种容器 在Java编程中,装各种各样的对象(引用类型)的叫做容器。 为什么出现集合类? 面向对象语言对事物的体现都...

25870
来自专栏鸿的学习笔记

Python和Scala的集合和映射

在入门系列的最后,让我们来看看基于hash表的两种常见的数据结构,集合和映射。在Scala里的集合和映射,这两种数据结构都有可变和不可变的两种版本,区别仅仅在于...

7220
来自专栏java学习

Java基础总结大全(2)

四、集合框架 1:String类:字符串(重点) (1)多个字符组成的一个序列,叫字符串。 生活中很多数据的描述都采用的是字符串的。而且我们还会对其进...

36190
来自专栏芋道源码1024

ArrayList 其实也有双胞胎,但区别还是挺大的!

这句话的意思是Collection集合类型的toArray()方法虽然声明返回值类型是Object[],但是具体调用时还真不一定就返回Onject[]类型,也有...

13240
来自专栏编程

Python基础1

数据类型 Python3中有6钟标准的数据类型:Number(数字)、String(字符 串)、List(列表)、Tuple(元组)、Sets(集合)、Dict...

238100
来自专栏LinkedBear的个人空间

唠唠SE的集合-02——Iterator迭代器

迭代时如果没有先执行next()则会抛出IllegalStateException,这就意味着必须要先检查是否还有下一个可以被迭代的元素,才能往外取。

10530
来自专栏Duncan's Blog

四则运算表达式求值

15620

扫码关注云+社区

领取腾讯云代金券