JAVA基础之容器汇总

前言

之前一直在用java的容器时总感觉不太流畅,然后昨天画了一天的时间将容器方面的知识重新复习了一遍,担心以后又忘掉,所以就再花一天时间来写下博客方便以后复习,容器比较多可能昨天看的不够全面,就先这么写先。

容器总体结构图

应该画成UML图的,结果画了一半才想起来,就这样这行,理解就行。
在这里插入图片描述

其中List与Set接口都继承Collection接口,而Map接口并没有实现Collection接口,前者是单例模式,后者是双例模式

Collection接口

由于 List、Set是 Collection 的子接口,意味着所有 List、Set 的实现类都有Collection中的方法

Collection接口中的抽象方法

方法说明
boolean add(Object element)增加元素到容器中
boolean remove(Object element)从容器中移除元素
boolean contains(Object element)容器中是否包含该元素
int size()容器中元素数量
boolean isEmpty()容器是否为空
void clear()清空容器中所以元素
Iterrator iterator()获取迭代器,用于遍历所有元素
boolean containsAll(Collection c)本容器是否包含c容器中的所有元素
boolean addAll(Collection c)将容器c中所以元素增加到本容器中 (并集
boolean removeAll(Collection c)移除本容器和容器c中都包含的元素(差集
boolean retainAll(Collection c)取本容器和容器c都包含的元素,移除非交集元素(交集
Object[] toArray()转化为Object数组

也就是说上面这些方法List、Set的接口实现类都可以使用,继承过来的。

泛型

泛型类与泛型接口跳转链接: 泛型类与泛型接口

List接口

List接口特点

  1. 有序
  2. 可重复

List的常用方法

除了Collection接口中的方法,List接口还增加了下面这些跟顺序或索引有关的方法:

方法说明
void add(int index, Object element)在指定位置插入元素,以前的元素全部后移一位
Object set(int index, Object element)修改指定位置的元素
Object get(int index)返回指定位置的元素
Object remove(int index)删除指定位置的元素,后面的元素全部前移一位
int indexOf(Object o)返回第一个匹配元素的索引,如果没有该元素则返回-1
int lastIndexOf(Object o)返回最后一个匹配元素的索引,如果没有该元素则返回-1

下标索引是从0开始的

ArrayList: ArrayList
Vector与Stack: Vector与Stack
LinkedList: LinkedList

Set接口

Set接口继承Collection,本身没有新增的方法,所以跟前面的List使用的Collection的方法是一样的。

Set接口的特点

  1. 无序
  2. 不可重复

HashSet与TreeSet: HashSet与TreeSet

Map接口

Map的特点

Map接口定义了双例集合的存储特征,它就是跟我们数学中的函数y=f(x)一样,键是x,值是y,键是唯一的,一个键只能对应一个值。Map真的很重要,由于它的键值对的存储方式,可以应用到许多地方,这个一定要会,比如我之前博客写的Redis数据库,就是完全适应键值对的方式进行存储数据。

Map的常用方法

方法说明
V put(K key,V value)把键值对key与value添加到Map集合中
void putAll(Map m)从指定Map中将所有映射关系复制到此Map中
V remove(Object key)删除key对应的value
V get(Object key)根据指定的key,获取对应的value
boolean containsKey(Object key)判断容器是否包含指定的key
boolean containsValue(Object value)判断容器中是否包含指定的value
Set keySet()获取Map集合中所有的key,存储到Set集合中
Set<Map.Entry<K,V> > entrySet()返回一个Set基于Map.Entry类型包含Map中所有映射
void clear()删除Map中的所有映射

HashMap与TreeMap: HashMap与TreeMap

Iterator迭代器

通过前面的图片可知,Collection接口继承Iterator接口,而Collection中的iterator方法会返回一个Iterator接口类型的迭代器对象,在该对象中包含了三个方法用于实现对单例容器的迭代处理。
Iterator主要有三个方法:

方法说明
boolean hasNext();判断游标当前位置是否有元素,有返回true,没有返回false
Object next()获取当前游标所在位置的元素,并将游标移动到下一个位置
void remove()删除游标当前位置的元素,在执行完next后该操作只能执行一次

使用 Iterator 迭代 List 接口类型容器

直接看代码:

public class IteratorList{

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        //方法一
        System.out.println("---------------方法一----------------------");
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String c = iterator.next();
            System.out.println(c);
        }

        //方法二
        System.out.println("----------------方法二--------------------");
        for(Iterator<String> it = list.iterator(); it.hasNext();){
            String c = it.next();
            System.out.println(c);
        }
    }

}

结果:
在这里插入图片描述

使用 Iterator 迭代 Set 接口类型容器

跟遍历List基本一样

public class IteratorSet {
    public static void main(String[] args) {
        Set<String> set = new HashSet<>();
        set.add("a");
        set.add("b");
        set.add("c");
        set.add("d");

        //方法一
        System.out.println("---------------方法一---------------------");
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()){
            String c = iterator.next();
            System.out.println(c);
        }

        //方法二
        System.out.println("----------------方法二--------------------");
        for(Iterator<String> it = set.iterator(); it.hasNext();){
            String c = it.next();
            System.out.println(c);
        }
    }
}

结果:
在这里插入图片描述

使用 Iterator 迭代 Map接口类型容器

前面说过,Iterator是用来遍历单例模式的,对于多例模式的Map我们可以将其转成Set再使用Iterator进行遍历即可,讲Map时不是说过entrySet() 和keySet()这两个方法了,忘了可以重新去看一遍。

public class IteratorMap {
    public static void main(String[] args) {
        Map<String ,String > map = new HashedMap();
        map.put("yql","student");
        map.put("mfq","teacher");
        map.put("zjl","singer");

        System.out.println("-----------方法一 --------------");
        Set<String> sets = map.keySet();
        String key = null;
        Iterator<String> iterator = sets.iterator();
        while(iterator.hasNext()){
            key = iterator.next();
            System.out.println("key = " + key + " value = " + map.get(key));
        }

        System.out.println("-----------方法二 --------------");
        Set<Map.Entry<String, String> > entries = map.entrySet();
        Map.Entry<String,String> kv;
        for(Iterator<Map.Entry<String, String>> it = entries.iterator(); it.hasNext();){
            kv = it.next();
            System.out.println("key = " + kv.getKey() + " value = " + kv.getValue());
        }
    }
}

结果:
在这里插入图片描述
这样就实现了Iterator遍历双例的Map了。

Collections工具类

工具类里面的方法是静态方法

方法说明
void sort(List)对 List 容器内的元素排序,排序的规则是按照升序进行排序
void shuffle(List)对 List 容器内的元素进行随机排列
void reverse(List)对 List 容器内的元素进行逆续排列
void fill(List, Object)用一个特定的对象重写整个 List 容器
int binarySearch(List, Object)对于顺序的 List 容器,采用折半查找的方法查找特定对象

本 文就先写到这里,希望下次再用容器时别再忘记了。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值