打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
集合总结
1.

Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

List中增,删,改,查的方法都有,Set中只有增,删的方法,查改,通过迭代

2. ArrayList,HashSet,TreeSet实现只要内容相同,就不重复添加的区别

ArrayList的add()方法:add

public boolean add(E e)

将指定的元素添加到此列表的尾部。

无异常

HashSet的add()方法:add

public boolean add(E e)

如果此 set 中尚未包含指定元素,则添加指定元素。更确切地讲,如果此 set 没有包含满足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,则向此 set 添加指定的元素 e。如果此 set 已包含该元素,则该调用不更改 set 并返回 false。无异常

ArrayList和HashSet 均可添加null元素

ArrayList和HashSet添加元素的要求不同,list直接添加,Set自动比较是否重复添加。

所以,Set实现不能重复添加的只要此对象类重写了Object的equals方法和hashCode方法即可,而List除了要实现以上方法外,每添加一个元素还要用contains方法判断是否已存在。

TreeSet的add方法:public boolean add(E e)

将指定的元素添加到此 set(如果该元素尚未存在于 set 中)。更确切地讲,如果该 set 不包含满足 (e==null ? e2==null : e.equals(e2)) 的元素 e2,则将指定元素 e 添加到此 set 中。如果此 set 已经包含这样的元素,则该调用不改变此 set 并返回 false。

异常:ClassCastException - 如果指定对象无法与此 set 的当前元素进行比较

- 如果指定元素为 null,并且此 set 使用自然顺序,或者其比较器不允许使用 null 元素

ClassCastException,TreeSet支持排序(默认自然顺序),实现的是SortedSet接口,所以每添加一个元素,要与set 的当前元素进行比较大小,来决定存放的位置,有两种实现方法:

(1) 放入的对象对应的类 实现Comparable接口,让对象自身具有比较功能

此时TreeSet可不可以添加null元素跟compareTo()的实现有关

比较大小时 compareTo()返回0 就认为是相等对象,正数,此对象大于被比较对象;负数,此对象小于被比较对象

(2). 放入的对象对应类不需要实现Comparable接口,我们创建TreeSet集合时,使用TreeSet(Comparator<? super E> comparator)构造方法,让集合本身具有比较器,进行添加元素的比较大小。此时TreeSet允许添加null元素,因为比较器实现时,当元素为null,return 0,默认相等

TreeSet实现无重复添加只要实现比较大小即可,不用再写equals,hashcode方法,因为比较大小的实现包括了比较俩对象相等

3.用方法contains(Object o),equals(Object o)时要特别注意,比较的都是对象的引用,即堆地址,除非比较对象类重写了Object类的equals方法

ArrayList,HashSet,TreeSet实现只要内容相同,就不重复添加后,他们的contains()方法用法就一样了

4. ArrayList,Vector,LinkedList ,HashSet,TreeSet此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出 。因此,面对并发的修改,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间发生任意不确定行为的风险。

当一个集合得到对应的iterator后,不允许通过此集合对象对集合进行任何修改。Iterator<Student> it = ss.iterator();

//ss.remove(null);不行

while(it.hasNext()){

System.out.println(it.next());

//ss.add(s7);不行

}

ss.add(s7);可以

List 中List 接口提供了特殊的迭代器,称为 ListIterator,除了允许 Iterator 接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问。还提供了一个方法来获取从列表中指定位置开始的列表迭代器。

public interface ListIterator<E>

extends Iterator<E>

系列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表,并获得迭代器在列表中的当前位置。ListIterator 没有当前元素;它的光标位置 始终位于调用 previous() 所返回的元素和调用 next() 所返回的元素之间。

注意, 方法不是 根据光标位置定义的;它们是根据对调用 所返回的最后一个元素的操作定义的。

5.一个集合对象为null和没有数据区别

集合没new对象时==null;

判断集合中是否有数据?

《1》先判断集合对象是否==null 《2》如果集合!=null, 判断.size()>0 6.List中

E set(int index,E element)

用指定元素替换列表中指定位置的元素(可选操作)。

- 如果列表不支持 set 操作

- 如果指定元素的类不允许它添加到此列表

- 如果指定的元素为 null,并且此列表不允许 null 元素

- 如果指定元素的某些属性不允许它添加到此列表

- 如果索引超出范围 (index < 0 || index >= size())

Object[] toArray()

返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。

Vector中:

public void copyInto(Object[] anArray)

将此向量的组件复制到指定的数组中。此向量中索引 k 处的项将复制到 anArray 的组件 k 中

7.Set中Object[] toArray()

返回一个包含 set 中所有元素的数组。如果此 set 对其迭代器返回的元素的顺序作出了某些保证,那么此方法也必须按相同的顺序返回这些元素。

由于此 set 不维护对返回数组的任何引用,因而它是安全的。(换句话说,即使此 set 受到数组的支持,此方法也必须分配一个新的数组)。因此,调用者可以随意修改返回的数组

Set接口中没有clone()方法,HashSet,TreeSet中新增的

public Object clone()

返回此 HashSet TreeSet 实例的浅表副本:并没有复制这些元素本身

TreeSet的一些方法:

public TreeSet(Comparator<? super E> comparator)

构造一个新的空 TreeSet,它根据指定比较器进行排序。插入到该 set 的所有元素都必须能够由指定比较器进行相互比较:对于 set 中的任意两个元素 e1 和 e2,执行 comparator.compare(e1, e2) 都不得抛出 ClassCastException。如果用户试图将违反此约束的元素添加到 set 中,则 add 调用将抛出 ClassCastException。

public TreeSet(SortedSet<E> s)

构造一个与指定有序 set 具有相同映射关系和相同排序的新 TreeSet

public Iterator<E> descendingIterator()

返回在此 set 元素上按降序进行迭代的迭代器。

public Comparator<? super E> comparator()

返回对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的自然顺序,则返回 null。

public NavigableSet<E> descendingSet()

返回此 set 中所包含元素的逆序视图。降序 set 受此 set 的支持,因此对此 set 的更改将反映在降序 set 中,反之亦然。如果在对任一 set 进行迭代的同时修改了任一 set(通过迭代器自己的 remove 操作除外),则迭代结果是不确定的。

first(),last(),返回此 set 中当前第一个和最后一个元素

ceiling(给定元素)返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null

floor(给定元素)返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null。

8.

Map 将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。若放入的键值和当前的键值相同,则会后者覆盖前者

Map只有增,查,删的方法,put(key,value); get(key); remove(key);

改要通过迭代

Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;另一些映射实现则不保证顺序,如 HashMap 类。

某些映射实现对可能包含的键和值有所限制。例如,某些实现禁止 null 键和值,另一些则对其键的类型有限制。尝试插入不合格的键或值将抛出一个未经检查的异常,通常是 NullPointerException 或 ClassCastException。

Map的put(key,value);出现得异常

- 如果此映射不支持 put 操作

ClassCastException - 如果指定键或值的类不允许将其存储在此映射中

- 如果指定键或值为 null,并且此映射不允许 null 键或值

IllegalArgumentException - 如果指定键或值的某些属性不允许将其存储在此映射中

Map的迭代的三种方式:

《1》获得所有的value 集合

Collection<V> values()返回此映射中包含的值的 Collection 视图

优点:最简单

缺点:无法获得key

声明Collection时注意:必须声明成Collection集合才行否则出现异常:

java.util.HashMap$Values cannot be cast to java.util.ArrayList

《2》获得所有的key的集合 然后迭代,分别取value

Set<K> keySet()返回此映射中包含的键的 Set 视图

key和value都可以获得

声明set集合时,类型一定是Set,而不是HashSet或TreeSet

《3》可以获得key-value 键值对 的集合

key-value--->Map.Entry

Set<Map.Entry<K,V>> entrySet()返回此映射中包含的映射关系的 Set 视图

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java集合总结3篇
Java之集合类应用总结(转载)
map
20个最佳的Java集合框架面试题目
java集合框架
全面接触Java集合框架
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服