java集合框架

Java集合框架(一)

集合:通常情况下,把具有相同性质的一类东西,汇聚成一个整体。
集合框架:集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
接口:即表示集合的抽象数据类型。接口提供了让我们对集合中所表示的内容进行单独操作的可能。
实现:也就是集合框架中接口的具体实现。实际它们就是那些可复用的数据结构。
算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现。
集合的作用:在类的,对数据进行组织;简单又快速的搜索大数量条目;在有的集合接口中,提供了一系列排列有序的元素并且在序列中可以快速的进行插入删除;另外,有些集合接口还提供了映射,通过key和value来达到一一对应的关系。
集合和数组的对比
数组的长度是固定的,当面对要插入的数据长度未知的情况下,数组只能重新定义,而集合却可以动态的扩大容量。
数组只能通过下标对数据进行访问,而某些集合可以通过任意的key对数据进行访问。
集合框架的体系结构
这里写图片描述
Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
一、Collection接口
Java集合框架中主要支持三种类型的集合:1.Set(规则集) 2.List(线性表) 3.Queue(队列)。
1、规则集Set
Set接口扩展于Collection接口,在一个实现Set的类中必须确保该规则集没有相同的元素。Set接口中有三个具体类:散列集HashSet、链式散列集LinkedHashSet和树形集TreeSet。

HashSet:
HashSet扩展于Set接口,可以用来储存互不相同的元素。当向hashset中添加多个相同元素时,只有一个元素被存储。此外,HashSet实例中存储的元素没有特定的顺序,并不会按照插入顺序进行排序。(无序)
HashSet包含下面构造方法:

HashSet()  //无参构造,创建一个HashSet实例  
HashSet(Collection<? extends E> c)  //从集合c中创建HashSet实例  
HashSet(int size) //创建容量为size的HashSet实例

LinkedHashSet
LinkedHashSet用一个链表实现来扩展HashSet类,但是其无法添加重复元素,也依然是无序的。其构造方法:

LinkedHashSet()  //创建一个无参实例  
LinkedHashSet(Collection<?extends E>c) //从集合c中创建LinkedHashSet实例  
LinkedHashset(int size) //创建一个容量为size的实例

TreeSet
TreeSet是SortSet接口中的一个具体子类,其中SortSet为Set的子接口。在LinkedHashSet中,可以通过元素插入的顺序对元素排序,但是有时候需要自定义元素排序的顺序,在TreeSet中,只要对象可比较,即可添加进树形集中。
主要构造方法:

TreeSet()  //创建一个无参实例  
TreeSet(Collection<? extends E>c) //从集合c中创建LinkedHashSet实例  
TreeSet(int size) //创建一个容量为size的实例  

2、线性表List
在开发的过程中,我们需要向集合中添加重复元素,但是显然HashSet满足不了我们的需求,这就需要我们来使用List来存储元素。List是一个允许重复集合。List接口中有两个具体实现类:数组线性表ArrayList和链表LinkedList。
list接口方法:

.add(int index)//指定下标添加元素  
.addAll(int index, Collection<? extends E>c)//指定下标处添加c中所有元素  
.get(int index)//返回指定下标元素  
.lastIndexOf(Object o)//返回相同元素的下标  
.listIterator()//返回遍历列表的迭代器  
.listIterator(int startIndex)//返回从startIndex开始的所有元素的迭代器  
.remove(int index)//删除指定下标的元素  
.set(int index, E element)//设置指定下标的元素  
.subList(int fromIndex,int toIndex)//返回从fromIndex到toIndex元素子列表  

ArrayList
ArrayList使用数组来存储元素,这个数组是动态创建的,当存储数量不够时,它会自动地进行扩容,相比于数组,它拥有更好的灵活性。
其构造方法为:

ArrayList() //创建一个空列表  
ArrayList(Collection<? extends E> c) //从集合c中创建实例  
ArrayList(int size) //创建一个大小为size的空列表 

LinkedList
LinkedList是一个双向链表,除了实现List接口的方法还实现了添加和删除表头表尾元素的方法。
其构造方法为:

LinkedList() //创建一个空链表  
LinkedList(int size) //创建一个容量为size的空链表  

使用方法:

.addFirst(E e) //添加表头元素  
.addLast(E e) //添加表尾元素  
.getFirst() //返回表头元素  
.getLast() //返回表尾元素  
.removeFirst() //移除表头元素  
.removeLast() //移除表尾元素  

3、队列Queue
Queue,队列,是一种先进先出的数据结构。新增的元素会插在队列的末尾。在优先队列中,优先级高的元素会首先出队.
Queue中有两个具体实现类:链表LinkedList和优先队列PriorityQueue。
LinkedList在上面已将说过了下面来介绍PriorityQueue;
PriorityQueue:
此类实现了优先队列,在默认情况下,该队列的初始容量为11。其实例所存储的元素默认以自然顺序排列,因此自然顺序下最小的元素会优先出队。队列中可能出现对个优先级相同的元素,那么拥有相同优先级的元素会有其中任意一个优先出队。
其构造方法为:

PriorityQueue() //创建一个默认的优先队列  
PriorityQueue(int size) //创建一个容量为size的优先队列  
PriorityQueue(Collection<? extends E> c) //从集合c中创建优先队列  
PriorityQueue(int size, Comparator<? super E>) //创建一个容量为size且拥有比较器顺序的优先队列 

Iterator接口
Iterator接口提供了为不同类型集合中的元素进行遍历的统一方法。通过Collection接口中的iterator方法可以返回一个Iterator接口的实例(迭代器)。该实例可以通过hasNext()方法检测迭代器中是否有更多的元素,next()方法顺序访问集合的元素等。
使用方法:

Iterator<String> iterator = a.iterator();
        while (iterator.hasNext()) {
            String ele = iterator.next();
            System.out.println(ele);//Bob  Alice  Lisy    
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值