JAVA集合与泛型

泛型的介绍

泛型是Java 5引进的新特征,是类和接口的一种扩展机制,主要实现参数化类型机制。暂行被广泛应用在Java集合API中,在Java集合框架中大多数的类和接口都是泛型类型。使用泛型,程序员可以编写更安全的程序。

泛型类型
简单的说,泛型(generies)是带一个或多个类型参数(type parameter)的类或接口。

泛型的方法
你可以写一个泛型方法,该方法在调用时可以接收不同类型的参数。根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用。

下面是定义泛型方法的规则

1.所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的 <E>)。

2.每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。

3.类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。

4.泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像 int、double、char 等)。

泛型标记符:
E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的 java 类型

集合框架

1.collection:Set 接口,List接口 ,Queue接口

2.Map:sortedMap
集合的定义:
集合是指集中存放一组对象的一个对象。集合相当于一个容器,提供了保存、获取和操作其他元素的方法。集合能够帮助Java程序员轻松地管理对象。Java集合框架由两种类型构成,一个是Collection;另一个是Map。Collection对象用于存放一组对象,Map对象用于存放一组“关键字/值”的对象。

基本操作:
        实现基本操作的方法有添加元素,删除指定元素,返回集合中元素的个数,返回集合的迭代器对象。

1.boolean add(E e) :     向集合中添加元素e。

2.boolean remove(Object o) :   从集合中删除指定的元素o。

3.boolean contains(Object o) :   返回集合中是否包含指定的元素o。

4.boolean isEmpty() :    返回集合是否为空,即不包含元素。

5.int size() :   返回集合中包含的元素个数。

6.Iterator iterator() :  返回包含所有元素的迭代器对象。

7.default void forEach(Consumer<? super T>action) :   从父接口继承的方法,在集合的每个元素上执行指定的操作。

List接口及实现类:
       List接口是Collection的子接口,实现一种线性表的数据结构。存放在List中的所有元素都有一个下标(从0开始),可以通过下标访问List中的元素。List中可以包含重复元素。List从Collection接口继承的操作于Collection接口类似,但有的操作有些不同。例如,remove()方法总是从线性表中删除指定首次出现的元素;add()和addAll()方法总是将元素插入到线性表的末尾。 

ArrayList : 底层数据结构是数组,允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。线程不安全

LinkedList : 底层数据结构是链表。线程不安全,对顺序访问进行了优化,向List中间插入与删除快。随机访问则相对较慢。

Vector: 底层数据结构是数组。线程安全。随机访问快,向List中间插入与删除慢。

ArrayList 是一个数组队列,相当于动态数组。线程不安全。

LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。

Vector 是矢量队列,底层是数组。它是JDK1.0版本添加的类。继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口。

Set接口及实现类
Set接口是Collection的子接口,Set接口类似于数学上集合的概念,不允许有重复的元素

Set接口没有定义新的方法,只有从Collection上继承的方法

Set的接口有三个常用的实现类:HashSet,TreeSet,LinkedHashSet

TreeSet是一种树集合,使用红黑树为元素排序,添加到TreeSet中的元素必须是可以比较的。相对于Hashset它就只是添加元素,不会进行排序。

Queue接口及实现类
Queue接口中有以下几个常用实现类:

PriorityQueue:非阻塞、非线程安全、无边界,支持优先级队列实现类。

ConcurrentLinkedQueue:非阻塞、线程安全、无边界,基于链接节点的队列实现类。

ArrayBlockingQueue:阻塞、线程安全、有边界,一旦创建容量不可改变实现类。

LinkedBlockingQueue:阻塞、线程安全、可选有边界,一个由链表结构组成的可选有界阻塞队列实现类,如果未指定容量,那么容量将等于Integer.MAX_VALUE。

PriorityBlockingQueue:阻塞、线程安全、无边界,支持优先级排序的无边界阻塞队列实现类。

DelayQueue:阻塞、线程安全、无边界,使用优先级队列实现的无界阻塞队列实现类,只有在延迟期满时才能从中提取元素。

SynchronousQueue:阻塞、线程安全、无数据队列,不存储元素、没有内部容量的阻塞队列实现类。

LinkedBlockingDeque:阻塞、线程安全、无边界,由链表结构组成的可选范围双向阻塞队列实现类,如果未指定容量,那么容量将等于 Integer.MAX_VALUE

Map接口及实现类
Map:双列集合类的根接口,这种接口的实现类专门用于存储一系列键值对。在 Map 实现类中,key 不允许重复,而 value 不做要求。

常用的方法:

public V put(K key, V value):把指定的键与指定的值添加到Map集合中。

public V remove(Object key):把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。

public V get(Object key):根据指定的键,在Map集合中获取对应的值。

boolean containsKey(Object key):判断集合中是否包含指定的键。

public Set<K> keySet():获取Map集合中所有的键,存储到Set集合中。

public Set<Map.Entry<K,V>> entrySet():获取到Map集合中所有的键值对对象的集合(Set集合)。

Map接口的常用实现类:Hashmap、TreeMap、Hashtable。

迭代器
Java迭代器(Iterator)是 Java 集合框架中的一种机制,它提供了一种在不暴露集合内部实现的情况下遍历集合元素的方法。

Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList 和 HashSet 等集合。

Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。

迭代器 it 的三个基本操作是 next 、hasNext 和 remove。

调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。

调用 it.hasNext() 用于检测集合中是否还有元素。

调用 it.remove() 将迭代器返回的元素删除。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值