1.集合简介

数学定义:一般地,我们把研究对象统称为元素。把一些元素组成的总体叫做集合。

java集合定义:集合就是一个放数据的容器,准确的说是放数据对象引用的容器。

java中通用集合类存放于java.util包中。

2.集合的实现

实现集合(Collection)的数据类型有三种:

  • 1.集(set)无序、不重复

    Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。

    例如:HashSet 特例:TreeSet 有序的

  • 2.列表(list)有序、可重复

    List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法。

    例如ArrayList、LinkedList 等

  • 3.队列(Queue)

    队列是一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

    在队列这种数据结构中,最先插入的元素将是最先被删除的元素;反之最后插入的元素将是最后被删除的元素,因此队列又称为“先进先出”(FIFO—first in first out)的线性表。

    例如 ArrayBlockingQueue、LinkedBlockingQueue等。由于其难以管理,性能不稳定等特点,一般项目中很少使用。

  • 4.Map(映射)(键值对、键唯一、值不唯一)
    Map与collection的关系为依赖关系并不是其他三种的泛化关系。这一点要区分。

    例如 HashMap、TreeMap

3.集合的层次关系

所有的集合都继承与Collection,而Collection实现了Iterator接口。类图如下

依据实现分类

接口\实现 哈希表(Hash) 数组(Array) 平衡二叉树(Balanced Tree) 链表(Linked List) 哈希表+链表(Hash + Linked List)
集(Set) HashSet TreeSet LinkedHashSet
列表(List) ArrayList
Stack
LinkedList
队列(Queue) ArrayBlockingQueue
ArrayDeque
PriorityQueue
LinkedBlockingQueue
映射(Map) HashMap
HashTable
WeakHashMap
IdentityHashMap
TreeMap LinkedHashMap

后续的篇章中我将各个实现类逐个解析。

4.抽象方法解读

1.Iterator与Iterable接口

定义迭代器,Iterator 接口中有三个方法:

1.hasNext()是否还有下一个元素。

2.next()返回下一个元素。

3.remove()删除当前元素。

定义是否能获取迭代器,Iterable 接口中的方法

iterator() return Iterator 返回一个迭代器。提供一个获取迭代器的方法。

2.Collection接口

Collection接口中的方法:

1.size() return int 集合中元素个数。

List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
System.out.println(list1.size());

结果 3

2.isEmpty() return boolean 集合是否为空集合。

List<String> list1 = new ArrayList<String>();
System.out.println(list1.isEmpty());

结果 true

3.contains(Object o) return boolean 集合中是否包含该元素。

List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
boolean isCont = list1.contains("3");
System.out.println(isCont);

结果: true

4.iterator() return Iterator 返回一个迭代器与Iterable中的重复了。

5.toArray() return Object[] 将所有元素以数组形式返回。

List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
for(Object obj:list1.toArray()) {System.out.print(obj+" ");
}

结果 1 2 3

6. T[] toArray(T[] a) 将所有元素按照约定的数据类型返回。 数据类型。

List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
for(Object obj:list1.toArray(new String[4])) {
System.out.print(obj+" ");
}

结果 1 2 3 null

7.boolean add(E e); 添加元素

8.boolean remove(Object o) 移除元素

List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
System.out.println(list1);
list1.remove("2");
System.out.println(list1);

结果

[1, 2, 3]

[1, 3]

9.boolean containsAll(Collection<?> c) 当前集合是否包含传入集合的全部元素

List<String> list1 = new ArrayList<String>();list1.add("1");
list1.add("2");
list1.add("3");List<String> list2 = new ArrayList<String>();
list2.add("1");
list2.add("2");
System.out.print(list1.containsAll(list2));List<String> list3 = new ArrayList<String>();
list3.add("1");
list3.add("2");
list3.add("4");
System.out.print(list1.containsAll(list3));

结果 true false

10.boolean addAll(Collection<? extends E> c) 将传入的集合全部添加到该集合中。(引用添加,如果引用的内容变化该集合也变化)

List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
List<String> list3 = new ArrayList<String>();
list3.add("1");
list3.add("2");
list3.add("4");
list1.addAll(list3);
System.out.println(list1);

结果 [1, 2, 3, 1, 2, 4]

11.boolean removeAll(Collection<?> c) 移除该集合中包含传入集合的元素。

List<String> list1 = new ArrayList<String>();list1.add("1");
list1.add("2");
list1.add("3");List<String> list2 = new ArrayList<String>();
list2.add("1");
list2.add("2");
list1.removeAll(list2);
System.out.println(list1);

结果 [3]

另外一个例子

List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
List<String> list3 = new ArrayList<String>();
list3.add("1");
list3.add("2");
list3.add("4");
list1.removeAll(list3);
System.out.println(list1);

结果 [3]

由此可见不管传入元素有多少不相同的元素list的实现是只移除传入集合中与调用集合中元素相同的部分。

12.boolean retainAll(Collection<?> c) 保留该集合中相当于传入元素的集合,其他的元素删除。相当于 取两个集合的交集

List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
List<String> list3 = new ArrayList<String>();
list3.add("1");
list3.add("2");
list3.add("4");
list1.retainAll(list3);
System.out.println(list1);

结果 [1, 2]

13.void clear() 清空所有元素

List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
list1.clear();
System.out.println(list1);

结果 []

14.boolean equals(Object o) 判断是否相同

15.int hashCode() 返回该集合的哈希值。

3.AbstractCollection抽象方法

该抽象方法实现了Collection接口除了统计大小未实现外其他方法都提供了一个简单的实现方式。

4.ListIterator接口

ListIterator继承了Iterator接口。由于list的下表操作性所以ListIterator在Iterator接口方法的基础上可以拓展很多下标特点的方法,比如在迭代中转向、修改元素、添加元素等。

1.boolean hasPrevious() 是否有前一个

2.E previous() 返回前一个元素

3.int nextIndex() 下一个元素的下标

4.int previousIndex() 前一个元素的下标

5.void set(E e) 迭代中替换元素

6.void add(E e) 迭代中添加元素

5.List接口

List接口继承了Collection接口中的所有方法并重新定义了Collection接口中方法的规范。添加了一些list专用的方法。

1.E get(int index) 通过下标获取元素

2.E set(int index, E element) 将元素放入集合

3.void add(int index, E element) 添加新元素

4.E remove(int index) 依据下标移除元素

5.int indexOf(Object o) 查询元素位置从前往后找。

6.int lastIndexOf(Object o) 查询元素位置从后往前找。

7.ListIterator listIterator() 获取list迭代器。

8.ListIterator listIterator(int index) 从该元素位置迭代到最后一个元素。

List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
ListIterator<String> i = list1.listIterator(1);
while(i.hasNext()) {System.out.println(i.next());
}

结果 2 3

9.List subList(int fromIndex, int toIndex) 依据下标截取一段列表(list)

List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
List<String> subList = list1.subList(1, 2);
System.out.println(subList);

结果 [2]

返回的结果并不是ArrayList 而是ArrayList中的一个内部类SubList。SubList只是ArrayList的一个视图(映射) 所以无法转换为ArrayList.

6.Set和AbstractSet

Set接口继承了Collection接口中的所有方法并重新定义了Collection接口中方法的规范。
AbstractSet继承AbstractCollection 并重写了equals、removeAll、hashCode等方法

7.Queue

Queue继承了Collection接口中的方法并重新定义了Collection接口中方法规范。并重新添加了一些队列相关方法。

1.boolean add(E e) 像队列尾部添加一个元素,无容量检查。

2.boolean offer(E e) 向队列尾部添加一个元素,有容量检查。

3.E remove() 移除头部一个元素。

4.E poll() 移除头部一个元素。

5.E element() 获取头部元素并不移除元素。

6.E peek() 检索但不删除此队列的头部。

8.Map

Map作为集合中比较特殊的一个部分。使用了关联的方式使用了Collection并不存在继承关系。
Map的结构自成一体。下面介绍下Map接口中的功能。

1.interface Entry<K,V> 由于Map中的元素是以Key-Value方式存储的实际上就是一个一个的Entry.在Map中维护一个组合key和value的对象是有必要的。
这个对象中的方法有K getKey()、V getValue()、V setValue(V value)、boolean equals(Object o)、int hashCode()

2.int size() 元素个数

3.boolean isEmpty() 元素是否为空

4.boolean containsKey(Object key) 是否包含传来的key

5.boolean containsValue(Object value) 是否包含传来的Value

6.V get(Object key) 通过key获取value

7.V put(K key, V value) 将一个key-value放入map

8.V remove(Object key) 移除传来key的entity

9.void putAll(Map<? extends K, ? extends V> m)将传来的map中的entity传入该Map中、

10.void clear() 清空该集合

11.Set keySet() 将key遍历到Set集合中

12.Collection values() 返回一个所有元素的引用。

13.Set<Map.Entry<K, V>> entrySet() 返回一个entry的set集合

14 equales 和 hashCode

5.总结

将所有抽象层级比较高的的抽象方法都了解了一遍。有些抽象层级并没有写,到具体介绍时才进行编写。
java的集合家族庞大但是结构非常清晰。需要继续深入的研究。

转载于:https://www.cnblogs.com/yanlong300/p/8487300.html

Java集合(Collection)综述相关推荐

  1. Java集合Collection接口中的常用方法演示

    Java集合Collection接口中的常用方法演示 添加 add(Objec tobj) 和 addAll(Collection coll) 获取有效元素的个数 int size() 清空集合 vo ...

  2. Java集合框架综述,这篇让你吃透!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:平凡希 cnblogs.com/xiaoxi/p/60899 ...

  3. java集合框架综述

    一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和 ...

  4. 厉害!Java集合框架综述,这篇让你吃透!

    作者:平凡希 来源:cnblogs.com/xiaoxi/p/6089984.html 一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Ja ...

  5. Java 集合框架综述

    一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和 ...

  6. Java集合Collection与List的关系、常见用法

    关系树 [java] view plain copy print? ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, 查找快 ...

  7. java 先进先出的map_「 深入浅出 」java集合Collection和Map

    本系列文章主要对java集合的框架进行一个深入浅出的介绍,使大家对java集合有个深入的理解. 本篇文章主要具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set ...

  8. Java 集合Collection常见知识点汇总~

    看了一些所谓大公司的JAVA面试问题,发现对于JAVA集合类的使用都比较看重似的,而自己在这方面还真的是所真甚少,抽空也学习学习吧. java.util包中包含了一系列重要的集合类,而对于集合类,主要 ...

  9. Java集合 Collection

    Jdk提供了一些特殊的类,用来保存数量不确定的对象,存储任意类型对象,长度可变.这些类统称为集合. 集合类位于Java.util包中,按存储结构分为Collection单列集合和Map双列集合. Co ...

  10. Java—一篇读懂java集合(Collection/Map)及Lambda表达式

    集合简介   在集合类之前,我们使用数组存储,数组既可以存储基本数据类型的值,也可以存储对象(对象的引用变量),但是集合只能存储对象.   Java集合类似于一种容器,将同类型的对象(实际为对象引用) ...

最新文章

  1. Rocket 架构设计
  2. 被快乐×××的许晴-----平淡的生活中寻找快乐
  3. 用DCGAN训练并生成自己的图像集(含tensorflow代码)
  4. Pipenv: Python包管理神器
  5. PHP处理图片(orientation)旋转问题
  6. windows自带的压缩,解压缩命令
  7. 层次和约束:项目中使用vuex的3条优化方案
  8. 改造一下jeecg中的部门树
  9. ue4模型导出_MAYA动画导出以及导入UE4的方式、方法
  10. vscode 新版eslint自动修复_VSCODE 配置eslint规则和自动修复
  11. Java 并发编程:Synchronized 及其实现原理
  12. JavaScript导出图片和数据到Excel
  13. 白皮书 | 以太坊 (Ethereum ):下一代智能合约和去中心化应用平台
  14. Python实现的爬取百度文
  15. Win10系统添加英文键盘
  16. 如何在Windows中安全删除垃圾箱(回收站)
  17. 全网无损音乐、超清视频免费下!
  18. 闲的无聊写了个很(wu)有(liao)意(dao)思(bao)的程序
  19. hhkb java_为什么知乎上这么多人推荐 HHKB,却不反复强调说该键盘不适合大多数程序员?...
  20. Correct the classpath of your application so that it contains compatible versions of the classes com

热门文章

  1. 灰度变换——反转,对数变换,伽马变换,灰度拉伸,灰度切割,位图切割
  2. ASP.NET 数据绑定操作
  3. python源码中的学习笔记_第4章_列表
  4. 对比学习(Contrastive Learning)在CV与NLP领域中的研究进展
  5. 【腾讯】结合蒸馏和多任务学习的召回模型
  6. 一个专为推荐系统定制的BERT!
  7. 【linux】常用命令之scp命令
  8. 命名实体识别数据集构建
  9. 博文视点MySQL书单丨无惧停机故障,数据库异常不可怕
  10. 白话讲解:消息队列到底解决了什么问题?