集合框架

孤街浪徒 提交于 2020-01-07 21:48:36

集合 框架

集合概述:

集合就是一个容器,这个容器可以装很多其他的数据。

为什么会有集合框架?

数组:长度固定!!! 数组在操作它内部元素的时候,功能很单一!
集合:集合的功能很多,很强大。
集合和数组 的区别
A:长度区别:
1.集合长度可变
2.数组长度固定
B:单一性区别:
1.数组只能存储同一类型的数据
2.集合可以同时存储不同类型的数据

集合的继承体系

   集合是由许多个的
   存储数据的时候需求不一样的: 有序的,无序的,允许重复有重复元素,不允许有重复元素等等
   不同种类的集合数据结构不一样

集合框架图

数据结构:就是数据的存储方式

Collection接口

集合层次结构中的根界面 。 集合表示一组被称为其元素的对象。 一些集合允许重复元素,而其他集合不允许。 有些被命令和其他无序。 JDK不提供此接口的任何直接实现:它提供了更具体的子接口的实现,如Set和List 。 该界面通常用于传递集合,并在需要最大的通用性的情况下对其进行操作。
Collection的成员方法:
boolen add (E e):添加一个元素
boolean remove(Object o):删除一个元素
void clear():清空
boolean contains(Object o):包含
boolean isEmpty():判断是否为空
int size():集合中有几个元素

1.List集合

List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。

List接口继承于Collection接口,它可以定义一个允许重复的有序集合。因为List中的元素是有序的,所以我们可以通过使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。

List接口为Collection直接接口。List所代表的是有序的Collection,即它用某种特定的插入顺序来维护元素顺序。用户可以对列表中每个元素的插入位置进行精确地控制,同时可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。实现List接口的集合主要有:ArrayList、LinkedList

(1)ArrayList

  ArrayList是一个动态数组

代码块:

package com.data;

import java.util.ArrayList;
import java.util.LinkedList;

public class LinkedListTest {
    static class Node{
     int  element;
     Node nextNode;
    }
    public  static  void main(String[] args){
        Node head=new Node();
        Node child1=new Node();
        child1.element=1;
        head.nextNode=child1;
        System.out.println(head.nextNode.element);
        LinkedList linkedList=new LinkedList();
       
        linkedList.add(1);
        linkedList.remove(0);
        linkedList.add(3);
        linkedList.set(0,2);
        linkedList.get(0);

    }
}

结果

"C:\Program Files\Java\jdk1.8.0_221\bin\java.exe" "-javaagent:F:\IntelliJ com.data.Main
3
1

Process finished with exit code 0

(2)LinkedList

  同样实现List接口的LinkedList与ArrayList不同,ArrayList是一个动态数组,而LinkedList是一个双向链表
package com.data;

import java.util.ArrayList;
import java.util.LinkedList;

public class LinkedListTest {
    static class Node{
     int  element;
     Node nextNode;
    }
    public  static  void main(String[] args){
        Node head=new Node();
        Node child1=new Node();
        child1.element=1;
        head.nextNode=child1;
        System.out.println(head.nextNode.element);
        LinkedList linkedList=new LinkedList();
       
        linkedList.add(1);
        linkedList.remove(0);
        linkedList.add(3);
        linkedList.set(0,2);
        linkedList.get(0);

    }
}

ArrayList和LinkedList

(1)ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
(2)对于随机访问get和set,ArrayList绝对优于LinkedList,因为LinkedList要移动指针。
(3)对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。
2.Queue:队列
代码块

package com.data;

import java.util.LinkedList;
import java.util.Queue;

public class QueueTest {
    public static void  main(String[] args){
        Queue queue=new LinkedList();
        queue.add(1);
        queue.add(2);
        //System.out.println(queue.element());
        //System.out.println(queue.peek());
        System.out.println(queue.remove());
        System.out.println(queue.size());

    }
}

结果在这里插入代码片

"C:\Program Files\Java\jdk1.8.0_221\bin\java.exe" "-javaagent:F:\IntelliJ com.data.QueueTest
1
1

Process finished with exit code 0

3.Set接口

Set是一种不包括重复元素的Collection
(1)HashSet

 HashSet 是一个没有重复元素的集合。它是由HashMap实现的,不保证元素的顺序(这里所说的没有顺序是指:元素插入的顺序与输出的顺序不一致),而且HashSet允许使用null 元素
 **代码块**
package com.data;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;

public class SetTest {
    public static void main(String[] args){
        Set set=new HashSet();
        set.add(1);
        //set.remove(0);
        set.contains(1);
        System.out.println(set.size());
        System.out.println(set.contains(1));

    }
}

结果

"C:\Program Files\Java\jdk1.8.0_221\bin\java.exe" "-javaagent:F:\IntelliJ 
1
true

Process finished with exit code 0

4.Map接口

 Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。同时它也没有继承Collection。在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同

代码块

package com.data;

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

public class MapTest {
    public static void main(String[] args){
        Map map=new HashMap();
        map.put("5555","aa");
        map.put("555","555");
        //map.remove("5555");
        map.put("555","ss");
        map.get("555");
        System.out.println(map.keySet());
        System.out.println(map.get("555"));
        System.out.println(map.size());
    }
}

结果

[555, 5555]
ss
2

Process finished with exit code 0

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!