Java基础之java中Set、List、Map等集合的详解

概述

  • Set 是接口,继承自collection接口
  • List 是接口,继承自collection接口
  • Map 独立接口
  • Queue 是接口,继承自collection接口

Set 接口以及其实现类(不包含重复元素)

  • HashSet  :底层数据结构是哈希表。(无序,唯一)
  • LinkedHashSet   :底层数据结构是链表和哈希表。(FIFO插入有序,唯一)

       1.由链表保证元素有序
        2.由哈希表保证元素唯一

  • TreeSet   :底层数据结构是红黑树。(唯一,有序)

Map接口以及其实现类(key到value的映射)

  • Map不是collection的子接口或者实现类。Map是一个接口。

  • Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值对象但键对象必须是唯一的。

  • TreeMap 也通过 Comparator  或者 Comparable 维护了一个排序顺序。

  • Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。

  • Map 接口最流行的几个实现类是 HashMap、LinkedHashMap、Hashtable 和 TreeMap。(HashMap、TreeMap最常用)

List接口以及其实现类(有序且允许元素重复)

  • ArrayList:数组实现,查询快,增删慢,轻量级;(线程不安全)
  • LinkedList:双向链表实现,增删快,查询慢 (线程不安全)
  • Vector:数组实现,重量级  (线程安全、使用少)

Queue接口以及其实现类

  • Queue接口与List、Set同一级别,都是继承了Collection接口。
  • LinkedList实现了Queue接口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。

参考文章:java中collection集合

  小例子有助于理解

 

  • HashMap

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

public class Main {
    public static void main(String[] args) {
   Map<String, String> myMap = new HashMap<>();        
        myMap.put("key", "value");
        System.out.println("第一次放入map后====="+myMap);
        myMap.put("key", "value1");
        System.out.println("放入进相同的key时======"+myMap);
        myMap.put("key1", "value1");
        System.out.println("放入相同的value时======"+myMap);
        myMap.put(null, "value1");
        System.out.println("放入的键为null时======="+myMap);
        myMap.put(null, "value2");
        System.out.println("第二次放入的键为null时======="+myMap);
    }
}

根据上面代码的运行结果是:

Java基础之java中Set、List、Map等集合的详解

 总结:

1.HashMap的键是唯一的,当put相同的键时,会把键的值更新

2、HashMap是无序的,值是可以任意的

3、HashMap的键可以是null

  • HashSet

 编写测试代码如下:

Java基础之java中Set、List、Map等集合的详解

 根据上面的代码,运行结果如下图:

 Java基础之java中Set、List、Map等集合的详解

 总结:

1.HashSet没有get方法,所以要遍历的话需要使用foreach循环或者迭代器进行。

2.HashSet也是无序的,是根据HashCode方法和哈希表进行插入的,在jdk1.8中,如果插入的是数字,则结果像是排序好的。

3.HashSet的值可以为null。

 图图图

 Java基础之java中Set、List、Map等集合的详解

Java基础之java中Set、List、Map等集合的详解

总结:(和ArrayList用法基本相似,这里给出对比)

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。 

 

  • LinkedList

  • ArrayList

写入如下测试代码:

Java基础之java中Set、List、Map等集合的详解

运行结果如图:

Java基础之java中Set、List、Map等集合的详解

总结:

1.ArrayList是有序的,尾插入。

2.ArrayList是可以重复值的。

3.ArrayList可以存入null.

 总结

  • List、Set、Map是这个集合体系中最主要的三个接口。
  • 其中List和Set继承自Collection接口。
  • Set不允许元素重复。HashSet和TreeSet是两个主要的实现类。
  • List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
  • Map也属于集合系统,但和Collection接口不同。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。HashMap、TreeMap和Hashtable是三个主要的实现类。
  • SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。