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():返回集合中的键值对的对数