JAVASE(集合)上

List接口

List:是Collection的子接口。
List系列的集合:有序的、可重复的 List系列的常用集合: ArrayList. Vector. LinkedList. Stack

  • list接口的方法
(1 ) boolean add(object obj) :添加一个
(2 ) boolean addAll ( Collectionc) : 添加多个
(3) vold add(int index, Object obj) :添加一个,指定位置添加
(4) void addll(int index, Collectionc) : 添加多个
(5) boolean remove(Object obj) :删除-(6) Object remove(int index) :删除指定位置的元素,并返回刚刚删除的元素
(7) boolean removelCollectionc):删除多个
(8) boolean contains(Objectc):是否包含某个
(9) boolean cnansl(ollectionc):;是否包含所有
(10) boolean isEmpty():是否为空
(11) int size() :获取元素个数
(12) void clear():清空集合
(13) Object] toArray( :获取所有元素
(14) lterator iterator() :获取遍历当前集合的迭代器对象
(15) retainAlCollection c):求当前集合与c集合的交集
(16) Listlterator listlterator() :获取遍历当前集合的迭代器对象,这个迭代器可以往前、往后遍历
(17) Listerator listlterator(int index) :[index]位置开始,往前或往后遍历
(18) Object get(int index) :返回index位置的元素
(19) List subList(int start, int end) :截取[tart,end)部分的子列表
  • 迭代器接口的方法
    Listlterator 接口
Iterator接口的方法:
( 1 ) boolean hasNext()
(2) object next()
(3) vold remove(
Listlterator是Iterator子接口:增加了如下方法
(4 ) void add(bject obj)
(5 ) void set(Object obj)
(6) boolean hasPrevious)
(7 ) object previous)
(8 ) int nextindex()
(9 ) int previousIndex)

ArrayList. Vector. LinkedList. Stack

List实现类们之间的区别
( 1 ) ArrayList. Vector :都是动态数组
Vector是最早版本的动态数组,线程安全的,默认扩容机制是2倍,支持旧版的迭代器Enumeration
ArrayList是后增的动态数组,线程不安全的,默认扩容机制是1.5倍
(2)动态数组与LinkedList的区别
动态数组:底层的理结构是数组

优点:根据下标访问的速度很快
缺点:需要开辟连续的存储空间,而且需要扩容,移动元素等操作

LinkedList :底层物理结构是双向链表

优点:在增加、删除元素时,不需要移动元素,只需要修改前后元素的引用关系
缺点:我们查找元素时,只能从first或last开始查找

(3) Stack:栈
是Vector的子类。E比EVector多 了几个方法,能够表现出"先进后出或后进先出”的特点。

①bject peek) :访问栈顶元素
②object pop( :弹出栈顶元素
③push0 :把元素压入栈顶

(4) Linkedl ist可以作为很多种数据结构使用
单链表:只关注next就可以
队列:先进先出,找对应的方法
双端队列(JDK1.6加入) :两头都可以进出,找对应的方法
栈:先进后出,找对应的方法

Set接口

1、Set
Set系列的集合:不可重复的
Set系列的集合,有有序的也有无序的。HashSet无序的 , TreeSet按照元素的大小顺序遍历, LinkedHashSet按照
元素的添加顺序遍历。

实现类的特点

(1)HashSet:
底层是HashMap实现。添加到HashSet的元素是作为HashMap的key , value是一个Object类型的常量对象PRESENT.

依赖于元素的hashCode()和equals()保证元素的不可重复,存储位置和hashCode()值有关,根hashCode()
来算出它在底层table数组中的[index]

( 2 ) TreeSet
底层是TreeMap实现。添加到TreeSet的元素是作为TreeMap的key , value是一个0bject类型的常 量对象PRESENT。

依赖于元素的大小,要么是java.lang.Comparable接口compareTo(Object obj) ,要么是java.util.Comprator接口的compare(Object 01, Object 02)来比较元素的大小。认为大小相等的两元素就是重复元素。

( 3 ) LinkedHashSet
底层是LinkedHashMap.添加到LinkedHashSet的元素是作为LnkedHashMap的key , value是一ObJect类型的常量对象PRESENT.
LinkedHashSet是HashSet的子类,比父类多维护了元素的添加顺序。
当且仅当.你既想要元素不可重复。又要保证元素的添加顺序时,再使用它。

Map

  1. Map
    用来存储键值对,映射关系的集合。所有的key不可重复,键值对、映射关系的类型: Entry类型

Entry接口是Map接口的内部接口。所有的Map的健值对的类型都实现了这个接口。 HashMap中的映射关系,
是有一个内部美来实现Entry的接口,
JDK1.7是一个叫做Entry的内部美实现Entry接口。
JDK1.8是一一个叫做Node的内部类实现Entry接口。
TreeMap中的映射关系,是有一一个内部类Entry来实现Entry的接口

  1. API
(1 ) put(Object key, object value) :添加对映射关系
(2 ) putl(Map m) :添加多对映射关系
(3 ) clear() :清空map ;
(4 ) remove(Object key) :根据key删除- -(5 ) int slze() :获取有效元素的对数
(6 ) containsKey(Object key) :是否包含某个key
(7 ) containsValge(Object value) :是否包含某个value
(8 ) Object get(Object key) :根据key获取value
(9 )遍历相关的几个方法
Collection values) :获取所有的value进行遍历
Set keySet() :获取所有key进行遍历
Set entrySet) :获取所有映射关系进行遍历

Map的实现类们的区别

(1)HashMap:
依据key的hashCode()和equals()来保证key是否重复。
key如果重复,新的value会替换旧的value。
hashCode()决定了映射关系在table数组中的存储的位置,

底层实现的一个核心代码index = hash(key.hashCode() &table.length-1

HashMap的底层实现: JDK1.7是数组+链表; JDK1.8是数组+链表/红黑树
( 2 ) TreeMap
依据key的大小来保证key是否重复。key如果重 复,新的value会替换旧的value。
key的大小依赖于, java.lang.Comparable或java.util.Comparator.
( 3 ) LinkedHashMap
依据key的hashCode()和equals()来保证key是否重复。key如果重复,新的value会替换旧的value。
LinkedHashMap是HashMap的子类,比HashMap多了添加顺序

猜你喜欢

转载自blog.csdn.net/BlackBtuWhite/article/details/107712608