Java集合概述

Java 集合可分为 Collection 和 Map 两种体系

Collection接口:

这里写图片描述

Set

Set接口是Collection的子接口,set接口没有提供额外的方法。Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法。
实现类:
HashSet:
HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取和查找性能。当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值决定该对象在 HashSet 中的存储位置。HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。如果两个元素的 equals() 方法返回 true,但它们的 hashCode() 返回值不相等,hashSet 将会把它们存储在不同的位置,但依然可以添加成功。对于存放在Set容器中的对象,对应的类一定要重写equals()和hashCode(Object obj)方法,以实现对象相等规则。

HashSet 具有以下特点:
1.不能保证元素的排列顺序。
2.HashSet 不是线程安全的。
3.集合元素可以是 null。

LinkedHashSet:
LinkedHashSet 是 HashSet 的子类。LinkedHashSet 根据元素的 hashCode 值来决定元素的存储位置,但它同时使用链表维护元素的次序,这使得元素看起来是以插入顺序保存的。LinkedHashSet插入性能略低于 HashSet,但在迭代访问 Set 里的全部元素时有很好的性能。LinkedHashSet 不允许集合元素重复。

TreeSet:
TreeSet 是 SortedSet 接口的实现类,TreeSet 可以确保集合元素处于排序状态。TreeSet 两种排序方法:自然排序和定制排序。默认情况下,TreeSet 采用自然排序。
增添方法:

Comparator comparator()
Object first()
Object last()
Object lower(Object e)
Object higher(Object e)
SortedSet subSet(fromElement, toElement)
SortedSet headSet(toElement)
SortedSet tailSet(fromElement)

1.自然排序:
TreeSet 会调用集合元素的 compareTo(Object obj) 方法来比较元素之间的大小关系,然后将集合元素按升序排列。如果试图把一个对象添加到 TreeSet 时,则该对象的类必须实现 Comparable 接口。实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。

Comparable 的典型实现:
1.BigDecimal、BigInteger 以及所有的数值型对应的包装类:按它们对应的数值大小进行比较
2.Character:按字符的 unicode值来进行比较
3.Boolean:true 对应的包装类实例大于 false 对应的包装类实例
4.String:按字符串中字符的 unicode 值进行比较
5.Date、Time:后边的时间、日期比前面的时间、日期大

2.定制排序:
TreeSet的自然排序是根据集合元素的大小,进行元素升序排列。如果需要定制排序,比如降序排列,可通过Comparator接口的帮助。需要重写compare(T o1,T o2)方法。
利用int compare(T o1,T o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。
要实现定制排序,需要将实现Comparator接口的实例作为形参传递给TreeSet的构造器。
此时,仍然只能向TreeSet中添加类型相同的对象。否则发生ClassCastException异常。
使用定制排序判断两个元素相等的标准是:通过Comparator比较两个元素返回了0。

List

List集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引。List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。JDK API中List接口的实现类常用的有:ArrayList、LinkedList和Vector。
增添的method:

void add(int index, Object ele) //在index添加ele
boolean addAll(int index, Collection eles) //在index处添加eles
Object get(int index)   //获取index位置处的对象
int indexOf(Object obj) //获取第一个obj对象的位置
int lastIndexOf(Object obj) //获取最后一个obj对象的位置
Object remove(int index)    //移除index处的元素
Object set(int index, Object ele)   //index处的元素设置为ele
List subList(int fromIndex, int toIndex)    //获取fromindex到toindex的子集合(不包括toindex处的元素)

实现类:
ArrayList
本质上,ArrayList是对象引用的一个变长数组。ArrayList 是线程不安全的,而 Vector 是线程安全的,即使为保证 List 集合线程安全,也不推荐使用Vector。Arrays.asList(…) 方法返回的 List 集合既不是 ArrayList 实例,也不是 Vector 实例。 Arrays.asList(…) 返回值是一个固定长度的 List 集合。
LinkedList
对于频繁的插入或删除元素的操作,建议使用LinkedList类,效率较高。
新增方法:

void addFirst(Object obj)
void addLast(Object obj)    
Object getFirst()
Object getLast()
Object removeFirst()
Object removeLast()

Map接口:

Map与Collection并列存在。用于保存具有映射关系的数据:Key-ValueMap 中的 key 和 value 都可以是任何引用类型的数据。Map 中的 key 用Set来存放,不允许重复,即同一个 Map 对象所对应的类,须重写hashCode()和equals()方法。常用String类作为Map的“键”。key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value。
这里写图片描述

method:
添加、删除操作:

Object put(Object key,Object value) //放入键值对
Object remove(Object key)   //remove键为key的键值对
void putAll(Map t)  //放入一个map
void clear()    //清除全部

元视图操作的方法:

Set keySet()
Collection values()
Set entrySet()

元素查询的操作:

Object get(Object key)
boolean containsKey(Object key)
boolean containsValue(Object value)
int size()
boolean isEmpty()
boolean equals(Object obj)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值