Java集合概述一

Java集合概述一,第1张

Java集合概述一

关系图

这是官方的图,一看就头大,没关系,慢慢来!

简单说来就是 :

Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。

Collection 接口又有 3 种子类型,List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,集合框架中常用的有 ArrayList、linkedList、HashSet、linkedHashSet、HashMap、linkedHashMap 等等。

还有的是迭代器,使你能够通过循环来得到或删除集合的元素。ListIterator 继承了 Iterator,以允许双向遍历列表和修改元素。

一个一个详细阐明一下

接口

Collection:集合框架最基础的接口,最顶层的接口。

List:Collection 的子接口,存储有序、不唯一(元素可重复)的对象,最常用的接口。

Set:Collection 的子接口,存储无序、唯一(元素不可重复)的对象。

Map:独立于 Collection 的另外一个接口,最顶层的接口,存储一组键值对象,提供键到值的映射。

Iterator:输出集合元素的接口,一般适用于无序集合,从前往后输出。

ListIterator:Iterator 子接口,可以双向输出集合中的元素。

Enumeration:传统的输出接口,已经被 Iterator 取代。

SortedSet:Set 的子接口,可以对集合中的元素进行排序。

SortedMap:Map 的子接口,可以对集合中的元素进行排序。

Queue:队列接口。

Map.Entry:Map 的内部接口,描述 Map 中存储的一组键值对元素。

Collection 接口(集合框架中最基础的父接口,可以存储一组无序,不唯一的对象。一般不直接使用该接口,也不能被实例化,只是用来提供规范。) Collection 子接口

List:存放有序、不唯一的元素

Set:存放无序、唯一的元素

Queue:队列接口

说了一大堆接口,怎么用呢:

List 接口的实现类

1. ArrayList(实现了长度可变的数组,在内存中分配连续空间,所以读取快,增删慢)

 测试加实际应用

package com.southwind.demo2;

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

import java.util.List;

public class Test {

    public static void main(String[] args) {

        ArrayList list = new ArrayList();

        list.add("Hello");

        list.add("World");

        list.add("JavaSE");

        list.add("JavaME");

        list.add("JavaEE");

        System.out.println("list:"+list);

        System.out.println("list长度:"+list.size());

        System.out.println("list是否包含Java:"+list.contains("Java"));

        for (int i = 0; i < list.size(); i++) {

            System.out.println(list.get(i));

        }

        Iterator iterator = list.iterator();

        while(iterator.hasNext()){

            System.out.println(iterator.next());

        }

        list.remove("Hello");

        list.remove(0);

        System.out.println("******************");

        System.out.println(list);

        list.add(1,"Spring");

        System.out.println(list);

        list.add(1,"Spring Boot");

        System.out.println(list);

        list.set(1,"Spring Cloud");

        System.out.println(list);

        System.out.println("*************");

        System.out.println(list.indexOf("Spring"));

        System.out.println(list.subList(1,3));

    }

}

2. LikedList(实现了先进先出的队列,采用链表的形式存储)

 测试加实际应用

package com.southwind.demo4;

import java.util.linkedList;

public class Test {

    public static void main(String[] args) {

        linkedList linkedList = new linkedList();

        linkedList.add("Hello");

        linkedList.add("World");

        linkedList.add("Java");

        System.out.println(linkedList);

        linkedList.offer("JavaSE");

        System.out.println(linkedList);

        linkedList.push("JavaME");

        System.out.println(linkedList);

        linkedList.addFirst("First");

        System.out.println(linkedList);

        linkedList.addLast("Last");

        System.out.println(linkedList);

        System.out.println(linkedList.peek());

        System.out.println(linkedList.peekFirst());

        System.out.println(linkedList.peekLast());

        System.out.println(linkedList.pop());

        System.out.println(linkedList);

    }

}

ArrayList 和 LikedList 的区别:内存中存储的形式不同,ArrayList 采用的数组的方式,linkedList 采用的是链表的形式。(线程都是不安全的)

ArrayList 数组在内存中存储空间是连续的,读取快,增删慢。

因为数组在内存中是连续的,所以取数据可以通过寻址公式很快求出目标元素的内存地址,因为内存是连续的,所以新增或者删除元素,必然需要移动数据,而且数组长度越长,需要移动的元素越多, *** 作就越慢。

LikedList 链表在内存中存储空间是不连续的,读取慢,增删快。链表在内存中是不连续的,没有固定的公式可以使用,要读取只能从第一位开始一直遍历到目标元素,数据规模越大, *** 作越慢。

增删快,因为只需要重新设置目标元素前后两个节点的后置指针即可,与数据规模无关。

3.Vector(线程安全,效率低,实现线程安全直接通过 synchronized 修饰方法来完成)

Stack:Vector 的子类,实现了栈的数据结构,(后进先出)

push:入栈方法

peek:取出栈顶元素,将栈顶复制一份取出,取完之后栈内的数据不变。

pop:取出栈顶元素,直接取出栈顶元素,取完之后栈内的数据减一。

先到此为止,下篇继续

欢迎关注我的公众号-LRL程序员(更多干货分享给你)    

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5712819.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存