Java 集合操作之概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_18948359/article/details/87565711

简介

Java 中的集合大致上,可以分为如下4种体系

  • Set: 代表无序、不可重复的集合。
  • List:代表有序、可重复集合。
  • Map:代表具有映射关系的集合。
  • Queue:从 JDK 1.5 以后增加的一种体系集合,代表一种队列集合实现。

框架概述

集合框架如图
集合框架

对于以上的框架图有如下几点说明:

  1. 所有集合类都位于 java.util 包下。Java 的集合类主要由两个接口派生而出:CollectionMapCollectionMap 是 Java 集合框架的根接口,这两个接口又包含了一些子接口或实现类。
  2. 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
  3. 抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。
  4. 实现类:8个实现类(实线表示),对接口的具体实现。
  5. Collection 接口是一组允许重复的对象。
  6. Set 接口继承 Collection,集合元素不重复。
  7. List 接口继承 Collection,允许重复,维护元素插入顺序。
  8. Map接口是键-值对象,与Collection接口没有什么关系。
  9. Set、List和Map可以看做集合的三大类:
    List 集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。
    Set 集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是集合里元素不允许重复的原因)。
    Map 集合中保存 Key-value 对形式的元素,访问时只能根据每项元素的 key 来访问其 value 。
  10. CollectionsArrays 是两个工具类。

具体分析

框架图
框架总体分析图
分析几点说明:
上面的框架图中可以看到 Collection 与 Map 是整个图的两条主干。

Collection:

  1. Collection 是一个接口,包含集合的基本操作和属性。Collection 包含了 List 和 Set 两大分支。
  2. List 是一个有序的队列,每一个元素都有它的索引。第一个元素的索引值是 0。List 的实现类有 LinkedList,ArrayList, Vector, Stack。
  3. Set 是一个不允许有重复元素的集合。Set 的实现类有 HastSet 和 TreeSet。HashSet 依赖于 HashMap,它实际上是通过 HashMap 实现的;TreeSet 依赖于 TreeMap,它实际上是通过 TreeMap 实现的。

ArrayList 与 Vector 的区别:

No. 区别 ArrayList Vector
1 推出时间 JDK1.2(new) JDK1.0(old)
2 性能 异步处理 同步处理
3 数据安全 非线程安全 线程安全
4 输出 Iterator,ListIterator,foreach Iterator,ListIterator,foreach,Enumeration

Map:
Map是一个映射接口,即 key-value 键值对。Map 中的每一个元素包含 “一个key ”和 “key对应的value” 。AbstractMap是个抽象类,它实现了 Map 接口中的大部分 API。而 HashMap,TreeMap,WeakHashMap 都是继承于 AbstractMap。Hashtable 虽然继承于 Dictionary,但它实现了Map接口。

Hash 表

Hash 表是一种数据结构,用于查找对象。Hash 表为每个对象计算出一个整数,称为 Hash Code(哈希码)。Hash 表是各链接式列表的阵列。每个列表称为一个 buckets(哈希表元)。对象位置的算式为 index = HashCode % buckets。其中 HashCode 表示对象哈希码,buckets 表示哈希表元总数。

当我们添加元素时,有时会遇到已经填充了元素的哈希表元,这种情况称为 Hash Collisions(哈希冲突),这时必须要判断该元素是否已经存在于该哈希表中。

Collections 简单操作

为集合追加数据:public static boolean addAll(Collection<? super T>c,T…elements);

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
 
public class CollectionsDemo {
	public static void main(String[] args) throws Exception {
		List<String> all = new ArrayList<>();
		all.add("A");
		all.add("B");
		all.add("C");
		all.add("D");
		Collections.addAll(all, "java", "Oracle");
		System.out.println(all);
		System.out.println("逆序输出:");
		Collections.reverse(all);
		System.out.println(all);
	}
 
}

Collection 与 Collections 的区别

请解释 Collection 与 Collections 的区别:

  • Collection 是集合操作的接口
  • Collections 是集合操作的工具类,可以进行 List、Set、Map 集合的操作

Iterator 接口

Iterator 主要用于遍历(即迭代访问)Collection 集合中的元素,Iterator 对象也被称为迭代器。Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提供了遍历 Collection 集合元素的统一API。常用的有入下面几个方法:

  • boolean hasNext() :如果被迭代的集合元素没有被遍历完,返回 true。
  • Object next():返回集合里的下一个元素。
  • void remove() : 删除集合里上一次 next 方法返回的元素。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapTest {

	public static void main(String[] args) {
		Map<String, Integer> map = new HashMap<>();
		map.put("壹", 1);
		map.put("贰", 2);
		map.put("叄", 3);
		map.put(null, 0);
		
		// 通过 keySet() 来获取 key 的 Set 集合
		Set<String> all = map.keySet();
		// 使用 iterator 迭代
		Iterator<String> iter = all.iterator();
		
		while (iter.hasNext()) {
			System.out.println(iter.next());	// 贰   null  叄    壹
		}
	}
}

猜你喜欢

转载自blog.csdn.net/qq_18948359/article/details/87565711