常用集合类

Collection的普通方法:

1:boolean remove(Object o)  删除对象

2:void clear() 清空集合

3:boolean contains(Object o)  判断集合中是否有指定的元素对象

4:boolean isEmpty()  判断集合是否为空

5:int size() 返回此 collectio

*        1:boolean remove(Object o)  删除对象

2:boolean contains(Object o)  判断集合中是否有指定的元素对象

1:boolean addAll(Collection c) 将指定 collection 中的所有元素都添加到此 collection 中

2:boolean removeAll(Collection c) 移除此 collection 中那些也包含在指定 collection 中的所有元素

3:boolean containsAll(Collection c) 如果此 collection 包含指定 collection 中的所有元素,则返回 true。

boolean retainAll(Collection c) 仅保留此 collection 中那些也包含在指定 collection 的元素,求交集,将结果返回给调用方法的集合

返回值:不是表示是否有交集。   而表示如果在取交集之后,调用方法的集合值改变了,就返回true,没改变就返回false

ArrayList当中判断元素是否唯一,使用的元素对象的equals方法。n 中的元素数

Collection的返回迭代器方法:

Iterator iterator()   返回在此 collection 的元素上进行迭代的迭代器。返回遍历工具——迭代器

迭代器:

Iterator:对 collection 进行迭代的迭代器。使用用来遍历集合的工具。调用该对象的方法即可遍历对应的集合。

我们的迭代器不是new出来的!!!必须是根据某个集合调用iterator()方法返回的。

迭代器方法:

boolean hasNext()  判断是否有下一个元素。              发现元素

Xxx next() 返回迭代的下一个元素。  获取下一个元素。    获取元素

如果迭代到结尾,仍往后迭代,则会报错NoSuchElementException

这里使用 
同时演示List的过程就是ArrayList的常规使用过程。

List的特有方法:

因为List是有序的集合,可以将元素按照加入的顺序编号。所以这些编号就可以看做是索引。从而通过索引操作集合。

1:void add(int index,Xxx element)  在指定索引位置添加指定元素。

2:Xxx remove(int index)  删除指定索引位置的元素    返回的是被删除的元素

3:Xxx get(int index)  获取指定位置的元素

4:Xxx set(int index, E element)  将指定位置的元素修改为新的对象  返回值:被修改的元素对象

5:int indexOf(Object o) 通过对象找到该对象在这个集合中的索引,如果没有找到返回-1

void add(E e)  这个添加元素的方法是迭代器的方法!!!  在使用该方法向集合中加入元素时,不会迭代新加进来的元素!

boolean hasPrevious()  判断是否有上一个元素

E previous() 返回上一个元素

void set(E e)  修改元素

List的子类,增删快,查找慢,提供了操作首尾元素的方法。

特有方法:

1:public void addFirst(E
e)  在集合头部添加元素

2:public void addLast(E e)
  在集合尾部添加元素

3:public E getFirst()  
获取头部元素

4:public E getLast()  
 获取尾部元素

Vector:
安全的,老的,速度慢的List

public void
addElement(E obj)  添加元素

public
Enumeration elements()  返回该集合的枚举

Enumeration:枚举   这里先认为枚举相当于迭代器      实际上枚举是存放元素的容器

boolean hasMoreElements()
 相当于迭代器的hasNext方法  即  判断是否有下一个元素

E nextElement()
 相当于迭代器的next方法  即  获取下一个元素

HashSet: Set的子类  哈希表结构  不可重复 无序的  
允许null值

hash表结构判断元素是否唯一的顺序:

1:判断hashCode值

2:

如果hashCode值不同,直接判断两个元素不同,加入新元素

如果hashCode值相同,继续判断equals方法的返回值。

如果equals方法返回true,则两元素相同,不加入新元素

如果equals方法返回false,则两元素不同,加入新元素

重写hashCode方法规则:

重写hashCode方法就是为了获取其hashCode值

该值是由各个属性计算而来

就是通过各属性的hashCode值相加得到本对象的hashCode值

基本数据类型int:直接取值

引用数据类型:直接调用其hashCode方法取值

不能存放重复元素。

是将元素进行排序的集合。

使用元素的自然顺序对元素进行排序

在创建集合对象时指定比较规则对元素进行排序

使用TreeSet存储自定义数据类型

出现问题:

自定义对象无法直接加入到集合中,会报异常ClassCastException类型转换异常

原因:

该集合不知道元素的比较规则。需要指定元素比较规则

指定规则方式:

方式1:自然排序

让元素本身具备比较性,实现Comparable接口,重写compareTo方法

比较两对象大小的方法返回值就是判断元素是否唯一的依据。

即  返回0代表两元素相同

返回正数代表新添加的元素比老元素大

返回负数代表新添加的元素比老元素小

方式2:在创建集合对象时指定比较规则对元素进行排序

让容器知晓元素的比较规则,在创建集合容器对象时,传入一个比较器。  需要定义比较器,实现Comparator接口,重写compare方法

public TreeSet(Comparator comparator)

Comparator:比较器

int compare(T o1, T o2)   :

o1:  新加入的元素     o2:老元素

比较两对象大小的方法返回值就是判断元素是否唯一的依据。

即  返回0代表两元素相同

返回正数代表新添加的元素比老元素大

返回负数代表新添加的元素比老元素小

使用匿名内部类的方式完成TreeSet存储Monkey时使用比较器排序。

TreeSet ts = new TreeSet(new Comparator(){

//重写方法,定义比较规则

// * 比较规则为:

// *         先比较年龄,再比较姓名

@Override

public int compare(Object o1, Object o2) {

Monkey newMonkey = (Monkey)o1;

Monkey oldMonkey = (Monkey)o2;

int result;

//先比较年龄

result = newMonkey.getAge() - oldMonkey.getAge();

//如果年龄相同,再比较姓名

if(result==0) {

result = newMonkey.getName().compareTo(oldMonkey.getName());

}

return result;

}});

1:添加功能

V put(K key,V value):添加元素。修改元素

如果键是第一次存储,就直接存储元素,返回null

如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值

2:删除功能

void clear():移除所有的键值对元素

V remove(Object key):根据键删除键值对元素,并把值返回

3:判断功能

boolean containsKey(Object key):判断集合是否包含指定的键

boolean containsValue(Object value):判断集合是否包含指定的值

boolean isEmpty():判断集合是否为空

4:获取功能

Set<Map.Entry<K,V>> entrySet():获取键值对,返回set集合 Set<Entry<K,
V>>

Entry类:键-值对

Entry方法:getKey()获取键

getvalue()获取值

setvalue()修改当前键的值

V get(Object key):根据键获取值

Set<K> keySet():获取集合中所有键的集合

Collection<V> values():获取集合中所有值的集合

5:长度功能

int size():返回集合中的键值对的对数

时间: 2024-10-18 13:40:49

常用集合类的相关文章

十六、C# 常用集合类及构建自定义集合(使用迭代器)

常用集合类及构建自定义集合 1.更多集合接口:IList<T>.IDictionary<TKey,TValue>.IComparable<T>.ICollection<T> 2.主要集合类:List<T>.IDictionary<TKey,TValue>.SortedDictionary<TKey,TValue>和SortedList<T> Stack<T>.Queue<T>.Linke

c#中常用集合类和集合接口之集合类系列【转】

常用集合接口系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html 常用集合类系列:http://www.cnblogs.com/fengxiaojiu/p/7997541.html 常用集合类: 数组(Array)的不足(即:集合与数组的区别) 1. 数组是固定大小的,不能伸缩.虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化.随后以前的数组就废弃!而集合却是

常用集合类使用方法

在编程中,我们经常需要考虑数据的储存方法——到底用什么东西去安置这些数据呢? 一般,少的可以用数组,但是数组只能存放规定大小.同一类型的数据:这样的话,不定长的可以试试链表,但是链表检索起来需要从头到尾,一旦数据多了会很慢.如果需要为一个对象存放多个不同类型的数据,可以用结构体,制作成链表.但是在Java中,更推荐用封装类来实现,用一个类来封装这些不同数据类型的数据,然后我们只需储存.管理类对象即可.如果事先知道有多少数据的话,可以用对象数组来储存.然而,实际应用中更多是不知道有多少数据的,那该

Java常用集合类详解

在Java中有一套设计优良的接口和类组成了Java集合框架,使程序员操作成批的数据或对象元素极为方便.所有的Java集合都在java.util包中. 在编写程序的过程中,使用到集合类,要根据不同的需求,来决定使用哪种集合类,比如,要经常遍历集合内元素,就要使用List,如果要保证集合中不存在重复的数据,就要用Set;如果要通过某一键来查找某一值,就要使用Map. 1).列表  List接口(继承于Collection接口)及其实现类    List接口及其实现类是容量可变的列表,可按索引访问集合

Java常用集合类

上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,比如AbstractCollection,AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等 所有的类都实现了Iterator接口,这是一个用于遍历结合中元素的接口,主要包含了hasNext(),remove(),next()三个方法,它的一个子接口LinkIterator在它的基础上又添加了三种方法,分别

常用集合类简介

简介 Java中集合类有很多,只介绍常用的集合类: Collection有两个子接口:List和Set,二者主要区别在于:list数据有序存放.可重复:set中数据无序存放,不可重复. ,如图,list相当于数组一样存放数据,每个数据是有下标对应的,通过下标来访问数据. ,而set只是提供了一片区域用来存放数据,数据的顺序只能依靠数据本身的值来决定,所以不能有重复值出现. Vector Vector类实现了一个动态数组,主要用在事先不知道数组的大小,以及需要频繁地进行查找,插入,删除工作,或者只

Java常用集合类(1)

一.HashMap 参考文章: http://yikun.github.io/2015/04/01/Java-HashMap%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE%9E%E7%8E%B0/ 特别说明:jdk8中对HashMap进行了优化,这里以jdk8为基准说明. 1.1 hashmap 结构 HashMap使用hash算法来实现字典数据结构(dictionary),任何hash算法必然伴随着hash冲突问题,而常用解决的方案有大致

java常用集合类:Deque,ArrayList,HashMap,HashSet

Queue家族 无论是queue还是stack,现在常用的是Deque的实现类:如单线程的ArrayQueue,多线程的ArrayBlockingQueue Deque:读作“deck”,算是一种“双端队列”,即支持头部和尾部的数据访问和增删.----支持stack和queue的操作 关系:ArrayDeque --> Deque(I) -> Queue(I) -> Collection(I),其中->表示继承,-->表示实现,(I)表示接口. 关系:Stack ->

常用集合类数据结构(持续更新中)

零.约定 1.  如果没有特殊说明,均指jdk 6,7,8一样 2.  源码分析出来的,有错误,请务必告知,谢谢 一.链表 1.  ArrayList<>() a) 基本介绍  i. 动态数组的数据结构 ii.新增时,容量超过当前容量,会新new一个数组 iii. 随机查询忧,添加删除劣 b)         常用构造函数 i.              ArrayList() jdk6初始化为容量10的数组 jdk7,8初始化为容量为0的数组(EMPTY_ELEMENTDATA) ii.  

浅谈C#常用集合类的实现以及基本操作复杂度

List 集合类是顺序线性表,Add操作是O(1)或是O(n)的,由于List的容量是动态扩容的,在未扩容之前,其Add操作是O(1),而在需要扩容的时候,会拷贝已存在的那些元素同时添加新的元素,此时的Add操作是O(n)的.而对于Contains方法,其是按照线性检索的,其复杂度是O(n).而BinarySearch方法,其是按二分查找的,其复杂度是O(lg n). SortedList集合类是有序线性表,Add操作是O(n),       其Contains方法是通过二分查找检索元素的,因此