Java集合(Collection)综述
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)|枚举(enum)|
| :------------- | :------------- |:------------- |:------------- |:------------- |:------------- |
|集(Set)|HashSet | |TreeSet||LinkedHashSet|EnumSet|
|列表(List)| |ArrayList
Stack||LinkedList|||
|队列(Queue)| |ArrayBlockingQueue
ArrayDeque
PriorityQueue ||LinkedBlockingQueue|||
|映射(Map)|HashMap
HashTable
WeakHashMap
IdentityHashMap | |TreeMap||LinkedHashMap|EnumMap|
后续的篇章中我将各个实现类逐个解析。
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的集合家族庞大但是结构非常清晰。需要继续深入的研究。
Java集合(Collection)综述的更多相关文章
- 【集合框架】Java集合框架综述
一.前言 现笔者打算做关于Java集合框架的教程,具体是打算分析Java源码,因为平时在写程序的过程中用Java集合特别频繁,但是对于里面一些具体的原理还没有进行很好的梳理,所以拟从源码的角度去熟悉梳 ...
- java集合——Collection接口
Collection是Set,List接口的父类接口,用于存储集合类型的数据. 2.方法 int size():返回集合的长度 void clear():清除集合里的所有元素,将集合长度变为0 Ite ...
- java集合框架综述
一.集合框架图 简化图: 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和 ...
- Java 集合Collection与List的详解
1.什么是集合 存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式. 集合的出现就是为了持有对象.集合中可以存储任意类型的 ...
- Java 集合-Collection接口和迭代器的实现
2017-10-30 00:30:48 Collection接口 Collection 层次结构 中的根接口.Collection 表示一组对象,这些对象也称为 collection 的元素.一些 c ...
- (二)java集合框架综述
一集合框架图 说明:对于以上的框架图有如下几点说明 1.所有集合类都位于java.util包下.Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Ja ...
- Java集合Collection基本方法
jdk1.7 api中的方法摘要: 参考java集合大全图:https://www.cnblogs.com/xkzhangsanx/p/10889114.html Collection为List.Se ...
- JAVA集合--Collection接口
本文首发于cartoon的博客 转载请注明出处:https://cartoonyu.github.io/cartoon-blog 在概述里面也说过:Collection是jav ...
- 「 深入浅出 」java集合Collection和Map
本系列文章主要对java集合的框架进行一个深入浅出的介绍,使大家对java集合有个深入的理解. 本篇文章主要具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set ...
- java: 集合collection
collection是集合层次结构中的根接口,一些集合允许重复元素,而其他集合不允许. 有些collection是有序的,而另一些是无序的. JDK不提供此接口的任何直接实现:它提供了更具体的子接口的 ...
随机推荐
- ELK 5.6.8 安装部署
操作系统版本: LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64: ...
- 函数和常用模块【day06】:random模块(三)
本节内容 1.简述 2.random模块 3.string模块 4.生成随机数 一.简述 我们经常会使用一些随机数,或者需要写一些随机数的代码,今天我们就来整理随机数模块:random模块 二.ran ...
- Spark记录-Spark on Yarn框架
一.客户端进行操作 1.根据yarnConf来初始化yarnClient,并启动yarnClient2.创建客户端Application,并获取Application的ID,进一步判断集群中的资源是否 ...
- Hive记录-部署Hive环境
1.配置 hive1.2.0(前提要配置hadoop2.7.2,前面文档有介绍) #官网下载二进制包,解压到/usr/app 下,配置/etc/profile: export HIVE_HOME=/u ...
- Study 8 —— 行块元素及定位
行&块元素display:inline;display:block;display:inline-block; 盒模型padding[内边距]padding: 上下内边距 左右内边距;padd ...
- Simple Sort
题目描述 You are given an unsorted array of integer numbers. Your task is to sort this array and kill po ...
- C# 修改编译版本的方法
- 三、u-boot 的配置-mkconfig 脚本
3.1 mkconfig 脚本 100ask24x0_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL ...
- C# 面向对象的base的使用
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- setTimeout设置不起作用
setTimeout立刻调用了 a()方法而不是xx秒以后,是因为调用方法时候没有加双引号. 正确做法:setTimeout(" a() ",5000): 调用 a() 方法时候要 ...