Java集合

Java集合的分类:

1.Set 无序不重复 通过元素本身来访问

2.List      有序可重复根据元素索引来访问

3.Queue  有序可重复

4.Map 具有映射关系的集合 通过key值来访问

 

集合的遍历方式:

一.Iterator(迭代器)      

A.booleanhasNext()

B.Object next()

C.Void remove()

二.Foreach

两者的共同点是集合不能被改变,如果集合改变将会发生异常

 

 

集合的两大接口以及对应的子类:

一.Collection

1.Set

2.List     

3.Queue

二.Map

 

集合Set

一.HashSet

在大多数情况系Set类都是用HashSet()。

1.特点:

A.序列不确定

B.不同步

C.集合的元素可以是NULL

2.判断两个相同元素的标准依据有两个:

A.equals()

B.Hashcode()

当equals相等时 Hashcode的值应该也相等

二.LinkedHashSet

特点:数据有顺序 元素顺序与添加顺序一致 由于属于set类所以数据不可以重复

三.TreeSet

1.特点:

有序排列 根据元素实际值得大小进行排序

2.提供的方法:

A.comparatorcomparator()

B.Objectfirst/last

C.Objectlower/high(Object e)返回指定元素前后的元素

D.Sortesetsubset(a,b)前包含后不包含

E.Sortesetheadset()/tailset() 小于/大于或等于

3.TreeSet支持的两种排序

A.自然排序

B.定制排序

4.EnumSet枚举类

用于存放枚举数据的集合类

四.Set的总结

一般情况下都是用HashSet 当需要保持数据顺序是采用TreeSet

LinkedHashSet遍历快 但比HashSet的开销大

EnumSet用于存放枚举类型的数据

以上的实现类就是线程不安全的当多个线程同事访问一个集合Set时 可以通过            collection工具包类SysnchrconizedsortedSet来包装Set集合

 

 

集合LIst

一.特性与使用方法:

特性:

元素有序可以重复 集合中每一个元素都有对应的顺序索引

索引操作元素的方法有:

A.void add(int index, Object) 添加一个元素

B.BooleanaddAll(int index, Collection c)

C.Object get(int index) 返回集合index索引出的元素

D.Int indexOf(Object o) 返回对象O在list集合中第一次出现的位置

E.Object set(int index, Object o) 进行替换

注意:

1.判断两个对象相等的标准是equals()相等返回true

2.如果进行删除 每次删除的是第一个对象

3.ListIterator 迭代器 具有向后迭代的特性

二.ArrayList和Vector实现类

两个实现方法基本相同

1.Vector-->stack

A.Object peek() 返回“栈”的第一个元素 但不将该元素“pop”出栈

B.Object pop() 返回“栈”的第一个元素 会将第一个元素“pop”出栈

C.void push(Object item) 将一个元素push进栈。最后一个进栈的位于栈顶

 

两个实现类的区别:ArrayList是线性不安全的 Vector是线性安全的

 

 

 

集合Queue

Queue用于模拟队列这种数据结构队列通常是指先进先出的容器

 

一.Queue接口实现方法

A.void add(Object e) 将指定元素加入此队列的尾部

B.Objectelement() 获取队列头部的元素但不删除该元素

C.Booleanoffer(Object e) 将指定元素加入此队列的尾部(容量限制的队列此方法优于add)

D.Objectpeek/poll() 获取队列头部的元素

E.Objectremove() 获取队列头部的元素并删除

二.实现类

1.PriorityQueue

A.一个比较标准的队列 按元素的大小进行排序

B.不允许插入null元素

2.Deque接口与ArrayDeque实现类

Deque是一个双端的队列

 

实现机制:

在底层采用一个动态 可重分配的Object【】数组来存储集合元素 当集合元素 超出了改数组的容量时 系统会在底层重新分配一个Object【】数组来存储集    合元素

3.LinkedList实现类

根据索引来随机访问集合的元素 也可以实现Deque接口来实现双端队列 它是一    个功能时分强大的队列

 

实现机制:

它是以链表的形式存储集合中的元素 因此访问性比较差但在删除和增加元    素的性能上十分的出色

 

 

 

集合Map

用于保存具有映射关系的的值

 

一.HashMap和Hashtable

1.两者的区别:

A.Hashtable是线性安全的 HashMap是线性不安全的

B.HashMap 可以使用null作为key或vaule Hashtable不能使用null

 

2.判断两个元素的方法

只需要判断key值是否相等

 

二.LinkedHashMap实现类

它是一个双向链表来存放Key-vaule对

 

三.使用Priperties读写属性文件

可以将key-vaule写入到文件中 也可以从文件中读出key-vaule对

读写方法:

A.StringgetProperty(String key) 获取Properties中指定的属性 类似于Map中的get

B.StringgetProperty(String key,String defaultvaule)

C.ObjectsetProperty(String key, String vaule)  类似于Map中的set 添加值

D.Void load(文件名) 读取

E.Void store(文件名) 写入 

 

四.SortedMap接口与TreeMap实现类

 

五.WeakHsahMap实现类

它与HashMap相似

区别:

WeakHashMap对key值时弱引用如果key被其他变量强引用则这些对对象可能会被    回收

                                                                              

六.IdentityHashMap实现类

要求两个key严格意义上的相等 允许null作为key和vaule

 

七.EnumMap实现类

不允许null作为key 但允许null作为vaule

 

八.各个Map实现类的性能分析

HashMap与Hashtable基本相同

TreeMap 有序排列

LinkedHashMap 保护添加序列

 

 

 

操作集合的工具类Collections

 

一.顺序操作

A.static voidreverse(List list) 反向排序

B.Static voidshuffle(List list) 随机排序

C.Static voidsort(List list) 升序排序

D.Staticvoid  swap(List list, int i, int  j)指定集合里i处的元素与j处的元素进行 交换

E.Static voidrotate(List list, int i)i为正数则将i后面的元素移动到前面 i为负数则   将i前面的元素移动到后面

二.查找替换

A.void intbinarysearchlist(list ,key)使用二分法查找对应的key-value

B.StaticObject max(Collectioncoll) 自然排序中返回值最大的元素

C.StaticObject max(Collectioncoll, comparator)制定排序中返回值最大的元素

D.Static voidfill(List list, Object obj) 使用指定元素替换List中的所有元素

E.Static intfrequency(Collection c, Object o)返回指定集合中元素o出现的次数

F.Static intindexOfsubList(List soure, Object obj) 返回对象在list中第一次出现的位 置

G.Staticboolean replaceAll(List list, Object oldval, Object newval)用新的纸替换旧  的值

三.同步控制

例子:

List list = Collections.SynchronizedList(new ArrayList);

解决了多线程访问集合时线程的安全问题

四.设置不可变集合

如果对不可变集合进行更改会发生异常

1.empty Xxx():返回一个空集合对象

2.SingletionXxx():返回一个只包含指定对象的不可变的集合对象

3.UnmodifiableXxx():返回指定对象的不可变视图,返回值时该集合的只读版本

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值