Java基础第二十三天总结——集合

目录:

一、Collection接口方法

二、Iterator迭代器接口

三、Collection子接口一:List

四、Collection子接口二:Set

/*****************分割线************************/

一、Collection接方法

Collection接口

Collection接口是List、Set和Queue接口的父接口,该接口里定义的方法既可用于操作Set集合,也可用于操作List和Queue集合。

JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如Set和List)实现

 

Collection接口方法

1.添加:add(Object obj)、addAll(Collection coll)

2.获取有效元素的个数:int size()

3.清空集合:void clear()

4.是否是空集合:boolean isEmpty( )

5.是否包含某个元素:boolean contains(Object obj):通过元素的equals方法来判断是否是同一个对象

boolean containsAll(Collection c):也是调用元素的equals方法来比较的,拿两个集合的元素挨个比较

6.删除:boolean remove(Object obj):删除找到的第一个元素、

boolean removeAll(Collection coll):取当前集合的差集

7.取两个集合的交集:boolean retainAll(Collection c)

8.集合是否相等:boolean equals(Object obj)

9.转成对象数组:Object[ ] toArray()

10.获取集合对象的哈希值:hashCode()

 11.遍历:iterator():返回迭代器对象,用于集合遍历

 

二、Iterator迭代器接口

Iterator对象称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素

所有实现Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象

Iterator本身不提供承载对象的能力,如果需要创建Iterator对象,则必须有一个被迭代的集合

集合每次调用iteratr()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前

 

 

Iterator接口的remove()方法

注意:
Iterator可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove方
法,不是集合对象的remove方法。
如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法,
再调用remove都会报IllegalStateException。

 

使用foreach循环遍历集合元素

Java5.0提供了foreach循环迭代访问Collection和数组

遍历集合的底层用Iterator()方法来实现

foreach还可以用来遍历数组

 

三、Collection子接口之一:List

鉴于Java中数组用来存存储数据的局限性,通常用List替代数组

List集合类中元素有序、且可重复。集合中的每个元素都有其对应的顺序索引

List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

JDK API中List接口的实现类常用的有:ArrayList、ListedList和vector

 

List接口方法

void add(int index,Object ele):在index位置插入ele元素

boolean addAll(int index,Collection else):从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位置的子集合

 

List实现类之一:ArrayList

ArrayList是List接口的典型实现类、主要实现类

本质上,ArrayList是对象引用的一个“变长”数组

JDK1.8ArrayList像兰函数一开始创建一个长度为0的数组,当添加第一个元素时再创建一个始容量为10的数组

Array.asList(...)方法返回的List集合,既不是ArrayList实例,也不是Vector实例,Arrays.asList(...)返回值时一个固定长度的List集合

 

List实现类之二:LinkedList

对于频繁插入或删除元素的操作,建议使用LinkedList类,效率较高

新增方法:

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

 

LinkedList:双向链表,内部没有声明数组,而是定义了Node类型的first和last,用于记录首末元素。同时,定义内部类Node,作为LinkedList中保存数据的基本结构。Node除了保存数据,还定义了两个变量。

prev变量记录前一个元素的位置

next变量记录下一个元素的位置

 

List实现类之三:Vector

大多数操作与ArrayList相同,区别在于Vector是线程安全的

在各种List中,最好把ArrayList作为缺省选择。当插入、删除频繁时,使用LinkedList;Vector总是比ArrayList慢,所以尽量避免使用。

 

新增方法

 void addElement(Object obj)
 void insertElementAt(Object obj,int index)
 void setElementAt(Object obj,int index)
 void removeElement(Object obj)
 void removeAllElements()

 

 

Collection子接口之二:Set接口

Set接口是Collection的子接口,set接口没有提供额外的方法

Set集合不允许包含相同的元素,如果试把两个相同的元素加入同一个Set集合中,则添加操作失败

Set判断两个对象是否相同不是使用 == 运算符,而是根据equals()方法

 

Set实现类之一:HashSet

HashSet 是 Set 接口的典型实现,大多数时候使用 Set 集合时都使用这个实现类。
HashSet 按 Hash 算法来存储集合中的元素,因此具有很好的存取、查找、删除
性能。
HashSet 具有以下特点:
不能保证元素的排列顺序
HashSet 不是线程安全的
集合元素可以是 null
HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相
等,并且两个对象的 equals() 方法返回值也相等。
对于存放在Set容器中的对象,对应的类一定要重写equals()和hashCode(Object
obj)方法,以实现对象相等规则。即:“相等的对象必须具有相等的散列码”。

 

 

重写hashCode()方法的基本原则

在程序运行时,同一个对象多次调用 hashCode() 方法应该返回相同的值。
 当两个对象的 equals() 方法比较返回 true 时,这两个对象的 hashCode()
方法的返回值也应相等。
 对象中用作 equals() 方法比较的 Field,都应该用来计算 hashCode 值。

 

Set实现类之二:LinkedHashSet

LinkedHashSet是HashSet的子类

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

 

Set实现类之三:TreeSet

TreeSet 是 SortedSet 接口的实现类,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)
TreeSet 两种排序方法:自然排序和定制排序。默认情况下,TreeSet 采用自然排序。

 

 

排序-自然排序

 

 

 

排序——定制排序

 

posted @ 2019-12-14 16:01  java_取名南  阅读(182)  评论(0编辑  收藏  举报