对于集合一些零碎知识的总结

本篇仅仅是为了防止遗忘在集合中那些重要但是又有些零碎的知识。

先来一张图吧。

我将会以图为基础记录某些知识。

首先对于Collection接口感觉就没啥好解释的了,多用于多态思想吧,就是通过接口,与实现类来做一些事情。

                               对于List接口:具有顺序,索引以及允许重复元素的特点。

                              对于Set接口:具有无序,无索引以及不允许重复元素的特点。

一.首先就从List接口开始说吧。。。。

List有两个实现类,一个是ArrayList类,另一个是LinkedList类,抽象上来理解的话,他们就像是一对双胞胎,有相同之处(大多是那些来自于List接口的抽象方法),但是他们又有不同之处,而这些不同之处刚好可以作为他们的互补。

再用一张图说明问题吧。

下面直接通过存储方式的不同把问题全都说明了吧。

首先ArrayList类是数组式存储,数组式存储的弊端就是数组是定长的,当我们想要往一个数组中增加或者减少一些元素时,看起来我们像是在原数组里添加了一些东西,其实上JVM只是帮我们复制了一个数组而已,所以这就导致了增删慢的结果,而数组之所以查询快,是因为数组的地址是连在一起的,只要我们知道了首地址,我们便可以通过索引的方式来访问数组,所以这就导致了查询快的结果。

而LinkedList类是链表式存储方式,链表式存储方式看下图。

就是因为链表是这种结构且链表的长度不定,所以当我们想要增加或者删除一些元素时并不会对后面的元素影响太多,后面的元素存储的仍是它下一个元素的地址,所以链表增删快,但是由于链表并不具备随机访问性,所以我们访问链表时只能从每一个链表的首位开始访问,这就使得我们查询的效率大大降低。

二.还有一些存储方式的积累:

1.堆栈存储(先进后出)看图

2.队列(先进先出)看图

三.Set接口与Collection接口中的方法一模一样。

HashSet类    特点:无序集合,存储和取出的顺序不同,无索引,不存储重复元素。

               底层数据结构:哈希表(链表与数组的结合体)  !!!!我会在完全理解哈希表结构之后单个总结。

LinkedHashSet继承自HashSet是有序的

四.Map接口

存储特点:成对存储,键不可以重复,只可以重复,但是若是出现了重复键,则会发生覆盖。

其常用实现类:HashMap,LinkedHashMap

HashMap的特点:不保证顺序

其关键方法:1.put(k,v)   用于存储一个键值对

                   2.get(k)    用于取出一个键值对返回值是键所对应的值

                   3.remove(k)  用于移除一个键值对

                   4.keySet()     用于将键全部存入一个Set<K>类型的集合

                   5.对于内部嵌套接口Entry的使用

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/*
     * 该类用于测试Entry内部嵌套接口的使用方法
     * 1.创建对象
     * 2.。。。。。
     */
public class Demo2 {
    public static void main(String[] args) {
        function();
    }
    public static void function() {
        Map<String,Integer>  cc=new HashMap<String, Integer>();    //首选创造了一个Map对象
        cc.put("晴天",12);
        cc.put("狮子座",21);
        cc.put("ssss",6);            //存入了一些键值对
        //将键值对存入set中
        Set<Map.Entry<String,Integer>> a=cc.entrySet();
        Iterator<Map.Entry<String,Integer>>  aa=a.iterator();
        while(aa.hasNext()) {
            Map.Entry<String,Integer> aaa=aa.next();
            System.out.println(aaa.getKey()+"......"+aaa.getValue());           
        }
        System.out.println("-.-.-.-.-.--.-.-.-.-.--.");
        for(Map.Entry<String,Integer> i:a) {
            System.out.println(i.getKey()+"......"+i.getValue()); 
        }
    }
}

该方法的使用较为复杂。

五.LinkedHashedMap的相关介绍

其实其大部分方法与HashMap相同的,只是他保证了存储的顺序。

六.可变参数

function(int ...a)

注意:1.可变参数相当于一个数组。

        2.一个方法只能有一个可变参,可变参必须写在参数列表的最后

        3.虽然是可变参但是前提是要有确定数据类型

七.想要操作集合时用其工具类Collections类

   想要操作数组时用其工具类Arrays类

八.结束

本篇真的就是我用于总结一些重要知识的,所以也没有考虑太多布局的事情,别人看起来可能会很难受。。。集合这块其实不难,但是知识点就很碎,所以学习了好几天,才将List,Set,Map映射全部学完,我都不准备发布这篇。。。

原文地址:https://www.cnblogs.com/roseneverdie/p/10596626.html