Java集合框架

  • Java集合框架
  • Collection
  • Map
  • Collection与Map的区别
  • 常用Collection实现类基本使用
  • 常用Map实现类基本使用
  • 小结

Java集合框架

菜鸟教程

  1. 早在Java2中之前,Java就提供了特设类。比如:Dictionary,Vector,Stack,和Properties这些类用来存储和操作对象组。虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用Vector类的方式和使用Properties类的方式有着很大不同。
  2. 集合框架被设计成要满足以下几个目标。
    ①该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
    ②该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。 对一个集合的扩展和适应必须是简单的。

整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如:LinkedList,Hash Set,和TreeSet等,除此之外你也可以通过这些接口实现自己的集合。

菜鸟安装java 环境 菜鸟教程java框架_List

  • Set下有HashSet,LinkedHashSet,TreeSet
  • List下有ArrayList,Vector,LinkedList
  • Map下有Hashtable,LinkedHashMap,HashMap,TreeMap

Collection

  • Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)
  • Collection 接口存储一组不唯一,无序的对象。

1.Set

  • Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。
  • Set 接口存储一组唯一,无序的对象。

2.List

  • List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。
  • List 接口存储一组不唯一,有序(插入顺序)的对象。

Set和List的区别

  • Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。
  • Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变 <实现类有HashSet,TreeSet>。
  • List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变 <实现类有ArrayList,LinkedList,Vector> 。

Map

  • Map 接口存储一组键值对象,提供key(键)到value(值)的映射。
  • Map.Entry
    描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。

1.SortedMap

  • 继承于 Map,使 Key 保持在升序排列。

2.AbstractMap

  • HashMap, TreeMap, ConcurrentHashMap 等类的父类。
  • TreeMap是有序的,HashMap和HashTable是无序的

HashMap与HashTable的主要区别

  • Hashtable是线程安全的,HashMap不是线程安全的。
  • HashMap效率较高,Hashtable效率较低。
  • 如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap。 查看Hashtable的源代码就可以发现,除构造函数外,Hashtable的所有 public 方法声明中都有 synchronized关键字,而HashMap的源码中则没有。
  • Hashtable不允许null值,HashMap允许null值(key和value都允许)
  • 父类不同:Hashtable的父类是Dictionary,HashMap的父类是AbstractMap

3.Enumeration

  • 这是一个传统的接口和定义的方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器取代。

Collection与Map的区别

  • Collection集合:单列集合,只能存储一种类型的元素,当作为:光棍
  • Map集合:是一种键和值的映射关系(双列集合) 当作为:夫妻对
  • 间接关系:HashSet依赖于Map接口的子实现类HashMap的
  • TreeSet依赖于Map接口的子实现类TreeMap的

常用Collection实现类基本使用

  • Set

HashSet

//实例化
        HashSet<Object> hashSet = new HashSet<>();
		//使用add动态添加内容
        hashSet.add(new Object());
		//使用size返回长度
        hashSet.size();
		//remove移除内容
        hashSet.remove(new Object());
        hashSet.remove(0);
		//使用clear释放
        hashSet.clear();
        //其中一种遍历方法
		for (Object o:hashSet){}

LinkedHashSet

//实例化
    LinkedHashSet<Object> linkedHashSet = new LinkedHashSet<>();
		//使用add动态添加内容
        linkedHashSet.add(new Object());
		//使用size返回长度
        linkedHashSet .size();
		//remove移除内容
        linkedHashSet.remove(new Object());
        linkedHashSet.remove(0);
		//使用clear释放
        linkedHashSet.clear();
        //其中一种遍历方法
		for (Object o:linkedHashSet){}

TreeSet

//实例化
        TreeSet<Object> treeSet = new TreeSet<>();
		//使用add动态添加内容
        treeSet.add(new Object());
		//使用size返回长度
        treeSet.size();
		//remove移除内容
        treeSet.remove(new Object());
        treeSet.remove(0);
		//使用clear释放
        treeSet.clear();
        //其中一种遍历方法
		for (Object o:treeSet){}
  • List

ArrayList

//实例化一个ArrayList
        ArrayList<Object> arraylist = new ArrayList<>();

        //ArrayList使用add动态添加内容
        arraylist.add(new Object());

        //ArrayList使用size返回长度
        arraylist.size();

        //ArrayList使用remove移除内容
        arraylist.remove(new Object());
        arraylist.remove(0);

        //ArrayList使用clear释放
        arraylist.clear();
        //其中一种遍历方法
		for (Object o:arraylist){}

Vector

//实例化
    	Vector<Object> vector = new Vector<>();
		//使用add动态添加内容
        vector.add(new Object());
		//使用size返回长度
        vector.size();
		//remove移除内容
        vector.remove(new Object());
        vector.remove(0);
		//使用clear释放
        vector.clear();
        //其中一种遍历方法
		for (Object o:vector){}

LinkedList

//实例化
    	LinkedList<Object> linkedList = new LinkedList<>();
		//使用add动态添加内容
        linkedList.add(new Object());
		//使用size返回长度
        linkedList.size();
		//remove移除内容
        linkedList.remove(new Object());
        linkedList.remove(0);
		//使用clear释放
        linkedList.clear();
        //其中一种遍历方法
		for (Object o:linkedList){}

常用Map实现类基本使用

  • AbstractMap

HashMap

//实例化
        HashMap<Object,Object> hashMap = new HashMap<>();
        //存入内容
        hashMap.put(new Object(),new Object());
        //获取长度
        hashMap.size();
        //以key主键删除目标内容
        hashMap.remove(new Object());
        //以key主键获取目标内容
        hashMap.get(new Object());
        //使用clear释放
        hashMap.clear();
        //其中一种遍历方法
        for (Object key:hashMap.keySet()){}

TreeMap

//实例化
        TreeMap<Object,Object> treeMap = new TreeMap<>();
        //存入内容
        treeMap.put(new Object(),new Object());
        //获取长度
        treeMap.size();
        //以key主键删除目标内容
        treeMap.remove(new Object());
        //以key主键获取目标内容
        treeMap.get(new Object());
        //使用clear释放
        treeMap.clear();
        //其中一种遍历方法
        for (Object key:treeMap.keySet()){}

Hashtable

//实例化
        Hashtable<Object,Object> hashtable = new Hashtable<>();
        //存入内容
        hashtable.put(new Object(),new Object());
        //获取长度
        hashtable.size();
        //以key主键删除目标内容
        hashtable.remove(new Object());
        //以key主键获取目标内容
        hashtable.get(new Object());
        //使用clear释放
        hashtable.clear();
        //其中一种遍历方法
        for (Object key:hashtable.keySet()){}

小结

每个集合都有其特有的使用场景,这里只写了部分集合的区别对比,比如下图情况:


菜鸟安装java 环境 菜鸟教程java框架_List_02


使用的时候可以根据自己的需求进行选取